[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверьте мой код
Вежливый гость
Здравствуйте! Посмотрите, пожалуйста, мой код добавления новости на сайт (тут все очень просто: заголовок и сама новость добавляется, и ВСЕ), скажите, где и что не так, если че

А вот и код

<?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. Краткая запись условия составлена неправильно

На первый взгляд все.

Спустя 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{код, если ошибка}

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
Ты смотри вежливости захотел. Скажи спасибо, что в морду не дал а то мог бы. А то развелись тут умники, помочь хотят иж ты....

не нервничай smile.gif спокойствие и только спокойствие user posted image

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

Цитата

Посмотрите, пожалуйста, скажите, где и что не так, если че


Цитата

и одолжение мне не делай собой, своей личностью


я вот что хотел спросит почему тебе не нравится вложенные if
ну про проверку формы это понятно, там можно в массив запихать
а так вообще, почему вложенные if - это ужасно

Спустя 3 минуты, 21 секунда (14.10.2010 - 17:06) arvitaly написал(а):
Цитата
а так вообще, почему вложенные if - это ужасно


Потому что не имеет смысла и многократно усложняет разбор кода (даже своего). Теоретически условий может быть очень много....
Да и логики никакой

Если у нас первое условие уже не дает выполнить все остальные - значит для первого условия нам абсолютно неважно, что будет после него в случае положительного результата - значит else лишнее

Спустя 13 часов, 2 минуты, 55 секунд (15.10.2010 - 06:09) mihai написал(а):
не понимаю глупость какая то

"Если у нас первое условие уже не дает выполнить"

а если даёт ... ??? huh.gif

Спустя 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

только не надо ссылок на мануал

Спустя 1 минута, 53 секунды (19.10.2010 - 13:56) arvitaly написал(а):
Цитата
Функии goto тут могут выполнить исключения, что и по логике верно.


А пример кода выше
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.