Возможно ли уменьшить размер данного кода? Быть может я чего-то не знаю, и налепил тут лишнего...) Код (Text): if(empty($title) || empty($cutdesc) || empty($fulldesc)){ header("Location: /?added=0"); }else{ $result = mysql_query("INSERT INTO `news` (`title`, `cutdescription`, `description`, `author`, `date`) VALUES ('$title', '$cutdesc', '$fulldesc', '$author', NOW())"); if($result==1){$adding=1;}else{$adding=0;} header("Location: /?added=$adding");} задача: если новость добавлена - послать header с 1, если нет - с 0 + проверка на пустоту одного, или нескольких полей
Код (PHP): if(empty($title) || empty($cutdesc) || empty($fulldesc)) { header("Location: /?added=0"); }else{ $result=mysql_query("INSERT INTO `news` (`title`, `cutdescription`, `description`, `author`, `date`) VALUES ('$title', '$cutdesc', '$fulldesc', '$author', NOW())")?1:0; header("Location: /?added=$result"); }
Тут не уменьшать надо, а увеличивать... Сперва, mysql_real_escape_string добавить (прочитав сначала, как использовать), потом выключить register_globals (почитав, что это такое) и переписать проверки переменных (-//-), сделать вывод текста ошибок, понятных посетителю (а не отписку: "Не удалось добавить запись"). А вот потом уже можно заняться и лаконичностью. P.S. на мой взгляд вот так. P.P.S. и еще: надо сделать так, чтобы запрос INSERT не возвращал ошибку, а после всех проверок добавлял данные.
Да, все верно, начинать надо действительно с BDD (Behavior Driven Development ). Тут я полностью Вас поддерживаю. ЗЫ: Речь просто о сценариях, Вы это умеет расписывать =)
Какого - то хрена, не дописалось мое сообщение, только заметил, не дописалось: Не забываем про экранирование.
Насчет register_globals почитал, понял что это, и понял что это лучше отключить. Вообщем отключил Код (Text): //.htaccess php_flag register_globals off Насчет mysql_real_escape_string прочитал. Как я понимаю эта функция экранирует символы, но в коде символы выглядят как код символа. Если я не прав, поправьте меня Из этого всего следует что код наверное должен выглядеть так: Код (Text): $title = mysql_real_escape_string($_POST['title']); // раньше было просто $_POST['title'] $cutdesc = mysql_real_escape_string($_POST['cutdesc']); // раньше было просто $_POST['cutdesc'] $fulldesc = mysql_real_escape_string($_POST['fulldesc']); // раньше было просто $_POST['fulldesc'] if(empty($title) || empty($cutdesc) || empty($fulldesc)) { header("Location: /?added=0"); }else{ $result=mysql_query("INSERT INTO `news` (`title`, `cutdescription`, `description`, `author`, `date`) VALUES ('$title', '$cutdesc', '$fulldesc', '$author', NOW())")?1:0; header("Location: /?added=$result"); } На целевой странице вот такие вот строчки получают данные и показывают результат: Код (Text): if($_GET['added']=='1'){echo '1';} if($_GET['added']=='0'){echo '0';} // else не использовал, т.к. вместо 1 может быть любая другая цифра/буква а важен именно 0 или 1 И еще 1 вопрос. Конструкция вида: Код (Text): mysql_real_escape_string(substr(isset($_POST['title']) ? $_POST['title'] : '',0,32)); будет нормально работать? P.S. как в новом варианте форума вставлять в код подсвечивание синтаксиса? Как например у Your во 2м сообщении данной темы.
1. Нет смысла делать mysql_real_escape_string на пустых строках. К тому же эту функцию лучше использовать либо прямо в запросе, либо до запроса (зависит от того, нужны ли переменные дальше по тексту или нет). 2. Перед тем, как обращаться к переменной или индексу массива, - стоит убедиться, а определено ли оно. 3. Насчет added = 1 | 0, можно еще так: Код (Text): if ($_GET['added'] == 0 || $_GET['added'] == 1) echo $_GET['added']; - все-таки, как насчет полноценного текста ошибки, которую допустил пользователь? 4. Конструкция будет работать - см. пункт 1.
А если захочется 10+ и т.д. будешь с этими кастылями только муздыкаться, туда, сюда, обратно. Проще тогда уже так написать: Код (PHP): if (intval($_GET['added'])>=0) echo $_GET['added'];
1. Сделал запрос таким: Код (Text): INSERT INTO `news` (`title`, `cutdescription`, `description`, `author`, `date`) VALUES ('mysql_real_escape_string($_POST["title"])', 'mysql_real_escape_string($_POST["cutdesc"])', 'mysql_real_escape_string($_POST["fulldesc"])', '$author', NOW()) Но не слишком ли он большой?)) 2. Определенно, всмысле: Код (Text): $i = 0; ? И что будет если этого не будет? 3.Спасибо, совсем забыл про "и"
Ты еще больших не видел )))), но посоветую тебе сделать одну функцию под экранирование, чтобы меньше писанины было. Тем пипец много, было бы каждая тема под, что - то одно и чтобы там все смотреть, а не как все подрят на создают и не смотрят есть нет она)) И бывает, что не по теме вылетает)) Ну вообщем вот ссылка viewtopic.php?f=13&t=5945&p=310629#p310629 И еще если не создавать переменную до цикла сделать можно так: Код (PHP): for(;;) { if($a > 10){break;} echo $a; $a++; } Можно написать просто любую переменную и она начнется с 1 Вывод: 12345678910 Можно даже так: Код (PHP): ((empty($title) || empty($cutdesc) || empty($fulldesc)))?$result=0:mysql_query("INSERT INTO `news` (`title`, `cutdescription`, `description`, `author`, `date`) VALUES ('$title', '$cutdesc', '$fulldesc', '$author', NOW())")?$result=1:$result=0; header("Location: /?added=".$result); Или так: Код (PHP): $result=((empty($title) || empty($cutdesc) || empty($fulldesc)))?0:mysql_query("INSERT INTO `news` (`title`, `cutdescription`, `description`, `author`, `date`) VALUES ('$title', '$cutdesc', '$fulldesc', '$author', NOW())")?1:0; header("Location: /?added=".$result); ))))))))))
klon5555, мне кажется, что Your шутит и это тот случай, когда уменьшение кода сильно мешает читабельности. Но дело Ваше, в конце концов. Жаль, что потом приходится исправлять вот такие "уменьшения".
Вообще, чтобы было меньше кода и логичнее, нужно все делать от функций. Вызывать те конструкции которые тебе потребуются. Легче тем, что не нужно будет менять все на всех страницах, а лишь только поправить код в одном месте. И в дальнейшем делать это в одном месте. А вывод уже делать где угодно и как угодно.