А вот и код
<?php
//Подключаем файл-коннект к БД
include_once ("db.php") ;
//Инициализация переменных
$title = !empty ($_POST['title']) ? $title = trim (htmlspecialchars ($_POST['title'])) : NULL ;
$text = !empty ($_POST['text']) ? $text = trim (nl2br(htmlspecialchars ($_POST['text']))) : NULL ;
if ($_SERVER['REQUEST_METHOD'] == POST)
{
if ($title == '' or $text == '')
{
echo "Заполните все поля" ;
}
else
{
$res = mysql_query ("SELECT * FROM `news`
WHERE `title` = '".mysql_real_escape_string ($title)."'
AND `text` = '".mysql_real_escape_string ($text)."'") ;
if (mysql_num_rows ($res) > 0)
{
echo "Эта новость уже есть" ;
}
else
{
$ins = mysql_query ("INSERT INTO `news` (`title`, `text`)
VALUES ('".mysql_real_escape_string ($title)."',
'".mysql_real_escape_string ($text)."')") ;
if ($ins)
{
echo "Новость успешно добавлена" ;
}
}
}
}
?>
<h3>Добавление новой статьи</h3>
<form action="" method="post">
<p><label>Введите заголовок</label><br />
<input type="text" name="title" size="30" /></p>
<p><label>Введите текст новости</label><br />
<textarea cols="60" rows="20" name="text"></textarea></p>
<p><input type="submit" name="s" value="Добавить" /></p>
</form>
А вот файл для подключения к БД
<?php
//Название хоста
$host = "localhost" ;
//Имя пользователя
$user = "root" ;
//Пароль пользователя
$pass = "" ;
//Название Базы Данных
$baza = "site" ;
//Подключение к серверу
mysql_connect ($host, $user) or die ("Error connect ".mysql_error()) ;
mysql_select_db ($baza) or die ("Error select Database ".mysql_error());
//Устанавливаем кодировку
mysql_query ("SET NAMES cp1251") ;
Спустя 26 минут, 51 секунда (14.10.2010 - 10:55) arvitaly написал(а):
1. Учитесь избегать вложенных условий - это ужасно
2. or die - очень плохая привычка, программа должна делать осознанные действия, а не обрываться, там где плохо лежит. Ошибка должна входить в алгоритм.
3. POST в кавычки
4. Смысл получать $title и $text если мы еще не знаем про POST
5. Если что-то заполнено неправильно - есть смысл оставлять поля заполненными
6. mysql_query ("SET NAMES cp1251") ; К любому mysql-запросу делайте проверку ошибки
7. Смысл писать комментарии в коде русскими, а в die совать английский
8. Краткая запись условия составлена неправильно
На первый взгляд все.
2. or die - очень плохая привычка, программа должна делать осознанные действия, а не обрываться, там где плохо лежит. Ошибка должна входить в алгоритм.
3. POST в кавычки
4. Смысл получать $title и $text если мы еще не знаем про POST
5. Если что-то заполнено неправильно - есть смысл оставлять поля заполненными
6. mysql_query ("SET NAMES cp1251") ; К любому mysql-запросу делайте проверку ошибки
7. Смысл писать комментарии в коде русскими, а в die совать английский
8. Краткая запись условия составлена неправильно
На первый взгляд все.
Спустя 1 минута, 38 секунд (14.10.2010 - 10:56) Guest написал(а):
arvitaly, как бы ты написал это код?
Спустя 2 минуты, 58 секунд (14.10.2010 - 10:59) arvitaly написал(а):
Цитата |
arvitaly, как бы ты написал это код? |
По другому, и уж конечно без тех ошибок - которые я указал, если что-то непонятно могу объяснить, но делать за вас не буду
Спустя 2 минуты, 22 секунды (14.10.2010 - 11:02) Guest написал(а):
я не понял ошибки 1,2,8 объясни, пожалуйста, подробнее, что и где исправить надо
Спустя 13 минут, 4 секунды (14.10.2010 - 11:15) arvitaly написал(а):
1
if ($_SERVER['REQUEST_METHOD'] ==' POST')
смысла весь остальной код держать в этом нету. Допустим есть блок в котором есть проверки после которых остальной код блока бессмысленен.
Такой блок лучше оформить в конструкцию try{код}catch{код, если ошибка}
В итоге никаких бесконечных ифов, все четко и понятно.
2.
Ошибка - ничем не отличается от не ошибки. Пример ошибки доступа к mysql можно обработать так
и функция обработки
8.
if ($_SERVER['REQUEST_METHOD'] ==' POST')
смысла весь остальной код держать в этом нету. Допустим есть блок в котором есть проверки после которых остальной код блока бессмысленен.
Такой блок лучше оформить в конструкцию try{код}catch{код, если ошибка}
try
{
if ($_SERVER['REQUEST_METHOD'] !=' POST')
{
throw new Exception ("");//Здесь нам не нужно выводить никаких сообщений, поэтому пусто
}
if (!$title or !$text)
{
throw new Exception ("Заполните все поля!");
}
if (mysql_num_rows ($res))
{
throw new Exception ("Эта новость уже есть");
}
}
catch (Exception $e)
{
echo '<p>' . $e->getMessage() . '</p>';
}
//Тут форма пошла
В итоге никаких бесконечных ифов, все четко и понятно.
2.
Ошибка - ничем не отличается от не ошибки. Пример ошибки доступа к mysql можно обработать так
mysql_connect ($host, $user) or nedie () ;
и функция обработки
function nedie()
{
//Тут идет запись в лог файл времени ошибки, файл, сама ошибка mysql_error(), ну еще много чего. + Можно послать email админу (или ICQ)
//Тут вывод чего то типа - сервер на профилактике, попробуйте через неск минут
}
8.
$title = !empty ($_POST['title']) ? trim (htmlspecialchars ($_POST['title'])) : NULL ;
Спустя 1 час, 48 минут, 4 секунды (14.10.2010 - 13:03) Guest написал(а):
$title = !empty ($_POST['title']) ? trim (htmlspecialchars ($_POST['title'])) : NULL ;
по-твоему, эта запись неверная?
Спустя 35 минут, 2 секунды (14.10.2010 - 13:38) arvitaly написал(а):
Цитата |
по-твоему, эта запись неверная? |
почему я должен считать свою запись неверной?
Спустя 12 минут, 16 секунд (14.10.2010 - 13:50) Guest написал(а):
а зачем ты её вообще написал? я ж тоже её написал в своем коде в начале
Спустя 1 минута, 50 секунд (14.10.2010 - 13:52) arvitaly написал(а):
Цитата |
а зачем ты её вообще написал? я ж тоже её написал в своем коде в начале |
где?
Спустя 49 секунд (14.10.2010 - 13:53) Guest написал(а):
в своем коде в первом посте
Спустя 2 минуты, 47 секунд (14.10.2010 - 13:56) arvitaly написал(а):
там такого нет, вы вроде программировать хотели, а пока только пишите на форум
Спустя 1 минута, 25 секунд (14.10.2010 - 13:57) Guest написал(а):
слепой что ли? как это нет
Спустя 49 секунд (14.10.2010 - 13:58) arvitaly написал(а):
Цитата |
слепой что ли? как это нет |
ладно я слепой, вы умный - разбирайтесь сами.
Спустя 44 секунды (14.10.2010 - 13:58) Guest написал(а):
и одолжение мне не делай собой, своей личностью
вот смотри
вот смотри
<?php
//Подключаем файл-коннект к БД
include_once ("db.php") ;
//Инициализация переменных
$title = !empty ($_POST['title']) ? $title = trim (htmlspecialchars ($_POST['title'])) : NULL ;
$text = !empty ($_POST['text']) ? $text = trim (nl2br(htmlspecialchars ($_POST['text']))) : NULL ;
if ($_SERVER['REQUEST_METHOD'] == POST)
{
if ($title == '' or $text == '')
{
echo "Заполните все поля" ;
}
else
{
$res = mysql_query ("SELECT * FROM `news`
WHERE `title` = '".mysql_real_escape_string ($title)."'
AND `text` = '".mysql_real_escape_string ($text)."'") ;
if (mysql_num_rows ($res) > 0)
{
echo "Эта новость уже есть" ;
}
else
{
$ins = mysql_query ("INSERT INTO `news` (`title`, `text`)
VALUES ('".mysql_real_escape_string ($title)."',
'".mysql_real_escape_string ($text)."')") ;
if ($ins)
{
echo "Новость успешно добавлена" ;
}
}
}
}
?>
Спустя 1 час, 7 минут, 47 секунд (14.10.2010 - 15:06) Xpund написал(а):
И ещё, htmlspecialchars в твоём случае вообще не нужна!
Спустя 14 минут, 58 секунд (14.10.2010 - 15:21) aH6y написал(а):
Цитата (Guest @ 14.10.2010 - 13:57) |
слепой что ли? как это нет |
спокойнее надо было быть, авось и помогли б...
Спустя 1 час, 30 минут, 47 секунд (14.10.2010 - 16:52) Basili4 написал(а):
aH6y
Ты смотри вежливости захотел. Скажи спасибо, что в морду не дал а то мог бы. А то развелись тут умники, помочь хотят иж ты....
Ты смотри вежливости захотел. Скажи спасибо, что в морду не дал а то мог бы. А то развелись тут умники, помочь хотят иж ты....
Спустя 2 минуты, 12 секунд (14.10.2010 - 16:54) aH6y написал(а):
Цитата (Basili4 @ 14.10.2010 - 16:52) |
aH6y Ты смотри вежливости захотел. Скажи спасибо, что в морду не дал а то мог бы. А то развелись тут умники, помочь хотят иж ты.... |
не нервничай


Спустя 8 минут, 47 секунд (14.10.2010 - 17:03) mihai написал(а):
Нормально мне понравилось

Цитата |
Посмотрите, пожалуйста, скажите, где и что не так, если че |
Цитата |
и одолжение мне не делай собой, своей личностью |
я вот что хотел спросит почему тебе не нравится вложенные if
ну про проверку формы это понятно, там можно в массив запихать
а так вообще, почему вложенные if - это ужасно
Спустя 3 минуты, 21 секунда (14.10.2010 - 17:06) arvitaly написал(а):
Цитата |
а так вообще, почему вложенные if - это ужасно |
Потому что не имеет смысла и многократно усложняет разбор кода (даже своего). Теоретически условий может быть очень много....
Да и логики никакой
Если у нас первое условие уже не дает выполнить все остальные - значит для первого условия нам абсолютно неважно, что будет после него в случае положительного результата - значит else лишнее
Спустя 13 часов, 2 минуты, 55 секунд (15.10.2010 - 06:09) mihai написал(а):
не понимаю глупость какая то
"Если у нас первое условие уже не дает выполнить"
а если даёт ... ???
"Если у нас первое условие уже не дает выполнить"
а если даёт ... ???

Спустя 6 минут, 43 секунды (15.10.2010 - 06:16) arvitaly написал(а):
Цитата |
не понимаю глупость какая то "Если у нас первое условие уже не дает выполнить" |
Объясню (реал непонятно сказал)
if ($a==5)
{
echo 1;
}
else
{
if ($b==6)
{
echo 2;
}
}
Вот тут для $b нам абсолютно все равно есть $a или нет, $b о нем не знает. Вложенные условия тут создаются только для обхода блока следующих проверок, но это можно сделать гораздо проще и без бесконечных вложенных проверок
if ($a==5)
{
echo 1;goto metka;
}
if ($b==6)
{
echo 2; goto metka;
}
Функии goto тут могут выполнить исключения, что и по логике верно. Если например не введено имя, то это ошибка и нам без разницы, что еще не введено, игнорируем остальные проверки и сразу выводим ошибку.
Спустя 4 дня, 7 часов, 37 минут, 43 секунды (19.10.2010 - 13:54) mihai написал(а):
что то я не вьеду, а что такое
goto
только не надо ссылок на мануал
goto
только не надо ссылок на мануал
Спустя 1 минута, 53 секунды (19.10.2010 - 13:56) arvitaly написал(а):
Цитата |
Функии goto тут могут выполнить исключения, что и по логике верно. |
А пример кода выше