"Добавить новость"
|
|
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 в БД, думаю, труда не составит, если что, гугл поможет, уроки имеются.
|
|
| |
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> Если так, то... Может можно как-то поудобнее сделать, что ли? Я просто ещё совсем новичок Добавлено (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" Вот, собственно, связь. Это указатель, какой файл будет обрабатывать данные формы. Цитата (Deswing) method="post" А это указывает, каким запросом будут переданы данные GET или POST.
Собственно, при нажатии на кнопку в форме, идет обращение к addnews_a.php, который и должен добавлять данные в базу. Так как Цитата (Deswing) name="news_t"
То данные будут храниться в переменной $_POST['news_t']
т.е. если в addnews_a.php написать, например, echo $_POST['news_t']; то по нажатию на кнопку должен выдаться твой написанный в textarea текст.
|
|
| |
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) Так вот я переделал чуток на денвере всё чудесно работает. а в табличку как у меня добавляет спокойно? Может быть это я протупил и как-то плохо сделал...
|
|
| |