Четверг, 28 Марта 2024, 13:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Дополнительные темы » Вебмастеринг » "Добавить новость"
"Добавить новость"
DeswingДата: Понедельник, 14 Января 2013, 21:26 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Как реализовать эту фичу? Итак, совсем недавно я смог связать сайт с MySQL:
Код
<?php
$host='127.0.0.1';
$user='root';
$pass='';
$site_base='site';
$db=mysql_connect($host,$user,$pass);
if (!$db)  
{
    echo "Could not connect: " . mysql_error();
  die();
}  
else  
{
  mysql_set_charset(utf8);
  mysql_select_db($site_base,$db) or die('db not found');
  mysql_close($db);
}
?>

Ещё (немного) считывать инфу из БД
Но я так подумал - а ведь новости должны писаться в определенной форме, а не в каких-то там Навикатах и phpmyadmin, манипулируя напрямую с БД. Как это всё делается? Там ведь и абзацы, и пробелы есть...

Добавлено (14.01.2013, 21:26)
---------------------------------------------
пысы: тяжелый случай?)) Со всякими шаблонизаторами и сессиями пока что не работал

LunarPixelДата: Понедельник, 14 Января 2013, 21:53 | Сообщение # 2
старожил
Сейчас нет на сайте
Ну если я правильно понял, что тебе нужно, то создаешь форму, в которой ставишь textarea и кнопку. В textarea пишешь текст новости, по нажатию на кнопку посылаешь всё это в БД. В textarea можешь прописывать html теги, они так же сохранятся в БД и при выводе новости будут учтены, всё оформится как надо (если для этого нет преград). Углубляясь в реализацию, можно сделать панель инструментов для формы, которая будет содержать кнопочки для каждого тега оформления и по нажатию автоматом проставлять теги. Отправить содержимое textarea в БД, думаю, труда не составит, если что, гугл поможет, уроки имеются. smile

DeswingДата: Понедельник, 14 Января 2013, 22:26 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Что-то типа этого?:
Код
<html>
<body>
<form action="addnews_a.php" method="post" enctype="multipart/form-data">
  <textarea name="news_t" rows=10 cols=30>
     </textarea>
     <br>
  <input type="submit" value="Добавить новость" />
     <input type="reset" value="Reset">
</form>
</body>
</html>

Если так, то... Может можно как-то поудобнее сделать, что ли? Я просто ещё совсем новичок smile

Добавлено (14.01.2013, 22:26)
---------------------------------------------
Ладно, постыдно сознаюсь: не знаю как связать формы HTML и PHP. Нашел что-то похожее, но объяснений нет. Как PHP связать с HTML?

alex_progerДата: Понедельник, 14 Января 2013, 22:41 | Сообщение # 4
участник
Сейчас нет на сайте
ээм как бэ вы уже связали HTML и PHP
Цитата
<form action="addnews_a.php" method="post" enctype="multipart/form-data">
<textarea name="news_t" rows=10 cols=30>
</textarea>
<br>
<input type="submit" value="Добавить новость" />
<input type="reset" value="Reset">
</form>

если в PHP вам надо прочитать данные от формы то вот вам код в помощь
Код
$news_text = $_POST['news_t'];

в этой переменной будет храниться значение из этого поля :
Цитата
<textarea name="news_t" rows=10 cols=30>
</textarea>

Добавлено (14.01.2013, 22:41)
---------------------------------------------
И в вашем случае логичнее будет через JQuery сделать отправку / загрузку данных ибо юзер не любит когда страница перезагружается полностью что и будет происходить в вашем случае

LunarPixelДата: Понедельник, 14 Января 2013, 22:47 | Сообщение # 5
старожил
Сейчас нет на сайте
Цитата (Deswing)
action="addnews_a.php"

Вот, собственно, связь. Это указатель, какой файл будет обрабатывать данные формы. smile
Цитата (Deswing)
method="post"

А это указывает, каким запросом будут переданы данные GET или POST.

Собственно, при нажатии на кнопку в форме, идет обращение к addnews_a.php, который и должен добавлять данные в базу. Так как
Цитата (Deswing)
name="news_t"


То данные будут храниться в переменной $_POST['news_t']

т.е. если в addnews_a.php написать, например, echo $_POST['news_t']; то по нажатию на кнопку должен выдаться твой написанный в textarea текст. smile


DeswingДата: Понедельник, 14 Января 2013, 22:58 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Код
<html>
<body>
<form action="addnews_a.php" method="post" enctype="multipart/form-data">
  <textarea name="news_t" rows=10 cols=30>
     </textarea>
     <br>
  <input type="submit" value="Добавить новость" />
     <input type="reset" value="Reset">
</form>
</body>
</html>

Код

<?php
include_once('Scripts\mysql_connect.php');
$news_text = $_POST['news_t'];
mysql_query("INSERT INTO test (text) VALUES ('$news_text')") or die();
?>

Код
<?php
$host='127.0.0.1';
$user='root';
$pass='';
$site_base='site';
$db=mysql_connect($host,$user,$pass);
if (!$db)  
{
    echo "Could not connect: " . mysql_error();
  die();
}  
else  
{
  //Connection is ok
  mysql_set_charset(utf8);
  mysql_select_db($site_base,$db) or die('db not found');
  mysql_close($db);
}
?>


ничего не получается...

Добавлено (14.01.2013, 22:58)
---------------------------------------------

Цитата (LunarPixel)

То данные будут храниться в переменной $_POST['news_t']

т.е. если в addnews_a.php написать, например, echo $_POST['news_t']; то по нажатию на кнопку должен выдаться твой написанный в textarea текст.

Да, супер. Работает. Осталось дело за малым - запись в таблицу... Стыдно мне прям
alex_progerДата: Понедельник, 14 Января 2013, 23:04 | Сообщение # 7
участник
Сейчас нет на сайте
Код страницы :
Код
<html>  
<body>  
<form action="addnews_a.php" method="post" enctype="multipart/form-data">  
   <textarea name="news_t" rows=10 cols=30>  
      </textarea>  
      <br>  
   <input type="submit" value="Добавить новость" />  
      <input type="reset" value="Reset">  
</form>  
</body>  
</html>

Конфиг : (сохрани как config.php)
Код
<?php  
$host='127.0.0.1';  
$user='root';  
$pass='';  
$site_base='site';

function ConnectDB()
{
$db=mysql_connect($host,$user,$pass);  
mysql_set_charset(utf8);  
mysql_select_db($site_base,$db) or die('db not found');  
mysql_close($db);  
}
?>

addnews_a.php :
Код
<?php
include 'config.php';
if(isset($_POST['news_t'])){
  ConnectDB();
  mysql_query("INSERT INTO test (text) VALUES ('$_POST['news_t']')") or die();  
}
?>


Естественно тут защиты никакой нету =)
Если надо могу написать скрипт как выводить новости =)
DeswingДата: Понедельник, 14 Января 2013, 23:08 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
alex_proger, всю логику программы понял, но что делает
if(isset($_POST['news_t'])){
?
Цитата (alex_proger)
Естественно тут защиты никакой нету =)
Если надо могу написать скрипт как выводить новости =)

Было бы очень интересно посмотреть. Конечно пишите! Если, конечно, Вас не затруднит :)
Ещё раз извиняюсь за свою "зелёность"
alex_progerДата: Понедельник, 14 Января 2013, 23:10 | Сообщение # 9
участник
Сейчас нет на сайте
В честь того что вы мне + в репу кинули дам вам скрипт вывода :
Код
<?php
include 'config.php';
ConnectDB();
$resp = mysql_query('SELECT * FROM `site`;');
while ($data = mysql_fetch_array($resp)){
  echo $data['НАЗВАНИЕ_ПОЛЯ_В_ТАБЛИЦЕ_MYSQL'];
}
?>


Это самый простой пример который я мог бы вам дать в столь поздний час =)
DeswingДата: Понедельник, 14 Января 2013, 23:10 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Цитата (alex_proger)
Естественно тут защиты никакой нету =)

ну и... кстати, а что за защита? Я как понимаю пароль от БД хрен кто узнает... Пока что я считаю, что пхп - серверный язык. То есть машина, согласно коду пхп, формирует хтмл страницу и кидает юзеру. Так от чего защищать сайт? Или можно как-то перехватить пакет и всякие пакости делать с сайтом? Я просто не понимаю ещё немного. Если где-то не прав или что-то не так понимаю - поправьте, пожалуйста. Мне действительно очень любопытно
alex_progerДата: Понедельник, 14 Января 2013, 23:13 | Сообщение # 11
участник
Сейчас нет на сайте
Код
if(isset($_POST['news_t'])){

Это проверка на то что нам вообще передали текст из формы. Помогает чуток снизить нагрузку на MySQL базу

Добавлено (14.01.2013, 23:12)
---------------------------------------------

Код
ну и... кстати, а что за защита? Я как понимаю пароль от БД хрен кто узнает... Пока что я считаю, что пхп - серверный язык. То есть машина, согласно коду пхп, формирует хтмл страницу и кидает юзеру. Так от чего защищать сайт? Или можно как-то перехватить пакет и всякие пакости делать с сайтом? Я просто не понимаю ещё немного. Если где-то не прав или что-то не так понимаю - поправьте, пожалуйста. Мне действительно очень любопытно  

Дело в том что если написать SQL запрос вместо вашей новости можно получить доступ к БД (в теории сам никогда на практике этим не занимался, называется вроде SQL INJECT погуглите есть стандартные методы защиты от этого)

Добавлено (14.01.2013, 23:13)
---------------------------------------------
Вот материал :
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=63461
http://habrahabr.ru/qa/27667/
http://habrahabr.ru/qa/29355/

DeswingДата: Понедельник, 14 Января 2013, 23:39 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
Цитата (alex_proger)

Это самый простой пример который я мог бы вам дать в столь поздний час =)

Спасибо, понемногу картина в голове складывается
Цитата (alex_proger)
В честь того что вы мне + в репу кинули дам вам скрипт вывода :

Вы же заслужили =) Ещё раз благодарю за разжевывание и помощь

Добавлено (14.01.2013, 23:23)
---------------------------------------------
index.php:

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Документ без названия</title>
<?php include('Forms\addnews_f.php'); ?>
</head>

<body>

</body>
</html>

mysql.php:
Код
<?php   
$host='127.0.0.1';   
$user='root';   
$pass='';   
$site_base='site';  

function ConnectDB()  
{  
$db=mysql_connect($host,$user,$pass);   
mysql_set_charset(utf8);   
mysql_select_db($site_base,$db) or die('db not found');   
mysql_close($db);   
}  
?>

addnews_f.php:
Код
<html>
<body>
<form action="addnews_a.php" method="post" enctype="multipart/form-data">
  <textarea name="news_t" rows=10 cols=30>
     </textarea>
     <br>
  <input type="submit" value="Добавить новость" />
     <input type="reset" value="Reset">
</form>
</body>
</html>

addnews_a.php:
Код
<?php
include('Scripts\mysql.php');
$news_text = $_POST['news_t'];
if(isset($_POST['news_t'])){  
  ConnectDB();  
  mysql_query("INSERT INTO test (text) VALUES ('$news_text')") or die();  
}  
?>

не пашет...

Добавлено (14.01.2013, 23:23)
---------------------------------------------

Цитата

Warning: mysql_connect() [function.mysql-connect]: [2002] ������� ���������� ���������� ���� �����������, �.�. �� ������� (trying to connect via tcp://localhost:3306) in Z:\home\localhost\www\Scripts\mysql.php on line 9

Warning: mysql_connect() [function.mysql-connect]: ������� ���������� ���������� ���� �����������, �.�. �� ������� ���������� �� ��������� ����� �� ������� ������ ������, ��� ���� ��������� ��� ������������� ���������� ��-�� ��������� ������� ��� ������������� ����������. in Z:\home\localhost\www\Scripts\mysql.php on line 9

Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\localhost\www\Scripts\mysql.php on line 9

Добавлено (14.01.2013, 23:39)
---------------------------------------------
help...

alex_progerДата: Понедельник, 14 Января 2013, 23:51 | Сообщение # 13
участник
Сейчас нет на сайте
измени кодировку php скрипта и кинь снова текст ошибок (измени либо на ANSI либо на UTF-8 без BOM)

Добавлено (14.01.2013, 23:51)
---------------------------------------------
А вообще вот потенциальная ошибка :

Код
mysql_query("INSERT INTO test (text) VALUES ('$news_text')") or die();  

Вот верный вариант (должен робить)
Код
mysql_query("INSERT INTO test (text) VALUES ('.$_POST['news_t'].')") or die();  
DeswingДата: Понедельник, 14 Января 2013, 23:52 | Сообщение # 14
заслуженный участник
Сейчас нет на сайте
Цитата (alex_proger)
mysql_query("INSERT INTO test (text) VALUES ('.$_POST['news_t'].')") or die(); 

ругается на эту строку. Помечает красным
alex_progerДата: Понедельник, 14 Января 2013, 23:54 | Сообщение # 15
участник
Сейчас нет на сайте
попробуй так :
mysql_query("INSERT INTO test (text) VALUES ('$_POST['news_t']')") or die();
или же вот так :
$query = 'INSERT INTO test (`text`) VALUES ('.$_POST["news_t"].')';
mysql_query($query);

Я уже сонный так что более адекватная помощь будет завтра =)


Сообщение отредактировал alex_proger - Понедельник, 14 Января 2013, 23:55
DeswingДата: Вторник, 15 Января 2013, 00:03 | Сообщение # 16
заслуженный участник
Сейчас нет на сайте
alex_proger, не ругается, но всё равно ничего не делается и приходится ждать целіх 30 сек до ошибок
alex_progerДата: Вторник, 15 Января 2013, 00:05 | Сообщение # 17
участник
Сейчас нет на сайте
И в базе никаких изменений?
Скиньте структуру базы (SQL код её) сделаю у себя локально завтра скину рабочий вариант)
DeswingДата: Вторник, 15 Января 2013, 00:09 | Сообщение # 18
заслуженный участник
Сейчас нет на сайте
alex_proger, ээм... У меня полнейший примитив, вот:
Код
/*
Navicat MySQL Data Transfer

Source Server         : MySQL
Source Server Version : 50140
Source Host           : localhost:3306
Source Database       : site

Target Server Type    : MYSQL
Target Server Version : 50140
File Encoding         : 65001

Date: 2013-01-14 22:09:00
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
   `text` text
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------

Спасибо, буду ждать с нетерпением!
alex_progerДата: Вторник, 15 Января 2013, 00:21 | Сообщение # 19
участник
Сейчас нет на сайте
Так вот я переделал чуток на денвере всё чудесно работает.
index.html :
Код
<html>
<head><title>AAANNNN</title></head>
<body>
<form action="newsadd.php" method="post">   
    <textarea name="news_t" rows=10 cols=30>   
       </textarea>   
       <br>   
    <input type="submit" value="Добавить новость" />   
       <input type="reset" value="Reset">   
</form>
</body>
</html>

config.php :
Код
<?php
define('DB_PASS', 'proger_alex');
define('DB_LOGIN', 'testbs');
define('DB_USER', 'alex64');
define('DB_HOST', 'localhost');

function Connect()
{
  mysql_connect(DB_HOST, DB_USER, DB_PASS) or die (mysql_error());
     mysql_select_db(DB_LOGIN) or die (mysql_error());
     mysql_query("SET NAMES 'utf8'");
}
?>

newsadd.php :
Код
<?php
include 'config.php';
if (isset($_POST['news_t'])){
  $news = $_POST['news_t'];
  Connect();
  mysql_query('INSERT INTO `test` (`text`) VALUES ("'.$news.'");');
  echo 'add complete!';
}
?>
DeswingДата: Вторник, 15 Января 2013, 00:32 | Сообщение # 20
заслуженный участник
Сейчас нет на сайте
Цитата (alex_proger)
define('DB_PASS', 'proger_alex');
define('DB_LOGIN', 'testbs');
define('DB_USER', 'alex64');
define('DB_HOST', 'localhost');

???
Цитата (alex_proger)
"SET NAMES 'utf8'")

?
Цитата (alex_proger)
Так вот я переделал чуток на денвере всё чудесно работает.

а в табличку как у меня добавляет спокойно? Может быть это я протупил и как-то плохо сделал...
Форум игроделов » Дополнительные темы » Вебмастеринг » "Добавить новость"
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг