Можно сказать с сегоднешнего дня всялся за изучение php и MySql (по книжке) и тут же сталкнулся с неожиданной проблемкой. Задача куска программы просто внести новую запись в базу данных. Базу создал, таблицы тоже, а код программы писал по книжке один в один, но в результате всеравно не пашет. Вот этот кусок кода: PHP: <?php if (!$isbn || !$author || !$title || !$price) { echo "Все поля должны быть заполнены! Вернитесь назад и заполните поля"; exit; } $isbn = addslashes($isbn); $author = addslashes($author); $title = addslashes($title); $price = doubleval($price); @ $db=mysql_connect("ххх.ххххх.ххххххх.ru", "ххххххх", "хххххххх"); if (!$db) { echo "ОШИБКА! Невозможно подключится к базе данных. Пожалуйста, повторите попытку позже."; exit; } mysql_select_db("books",$db); $query = "insert into books values ('".$isbn."', '".$author."', '".$title."', '".$price."')"; $result = mysql_query($query); if ($result) { echo "Запись была дабавлена в базу"; exit; } echo "Запись не добавлена!"; ?> Помогите разобратся!
знак "@" служит для подавления сообщений об ошибках. Уберите его и используйте только в случае, когда знаете, что здесь может вылезти ошибка, но она работе программы не мешает. Это так, вообще.
AmiD, изредка! изредка — это все таки нужно. Например, что бы ошибки не повлияли на посылку заголовков, или при генерации изображений, что бы его не испортить. Имхо, это единстенно обоснованное применение.
Горбунов Олег PHP: <? $dbh = @mysql_query(SERVER,USER,PWD) or exit("Ошибка соединения с БД:<br>номер ошибки:".mysql_errno.", описание ошибки: ".mysql_error()); ?> чем плохо? Warning портит вид страницы, и останавливать придется практически в любом случае, чтоб вместо страницы не получилось хз что..
В последнее время постоянно юзаю при получении данных из поста и гета. пример: $data = (int) @$_POST['data']; Если data содержит целое число то все как надо пройдет, если строку то будет 0, если по каким то причинам не передано (например это был чекбокс), то 0. Сказка . А вот при генерации изображений или для заголовков - это ламерство, потом заим...ся отлавливать что глючит. Чтобы отловить в таких местах лучше заюзать ob_start() - ловит все, в том числе и фатал эрроры
Критикуя — предлагайте. Как ты собираешься fatal error-ы отлавливать при генерации изображений, а? =)
PHP: <? ob_start("my_is_error"); $a := кривой закос под паскаль ;) ; //и прочий код ob_end_flush(); //где то в окружении делаем функцию function my_is_error($buffer){ //предполагаем что ob_start используется там где не должнобыть никаких выводов. if (!empty($buffer)) //если были ошибки { //К примеру будем отправлять письмо админу с ошибками: $email = ""; //подставить по желанию $subject = ""; //подставить по желанию $headers = ""; //подставить по желанию mail ($email, $subject, $buffer, $headers); } } ?>
AmiD Если data не передана, то будет нотис (Notice) с замечанием что обращение идет к несуществующему индексу массива. Я уже писал про это не так давно.
AmiD о том и речь что вся проверка в одну строчку, для того и используется собака. Если не установлена то по логике 0. Вот и получается 0. Потому и сказка, ни иссетов ни емпти не надо и все работает как надо .
та даже хотя бы такой прикол: HTML: <input type=text name=name value=<?= @$_POST['name'];?>> Например, если в форме неправильно заполнено поле. Чтобы не приходилось заново заполнять _всю_ форму. ИМХО, просто удобнее, чем перед выводом формы проверять все поля на существование соответствующих переменных. Борцы за правильный код проклянут нас всех))
pel две ошибки в одной строчке 1. name='' - не хватает кавычек, иначе все будет плохо если я в посте передам ">" 2. Нельзя делать прямую вставку из поста в <input text, потому что ограничив value кавычками если в посте те же кавычки - будет касяк. Какой то злостный офтоп пошел... Горбунов Олег, что делать в помойку все или всем по предупреждению(начиная с меня)?
Совместим. В помойку, и предупреждения. =) Да нет, нормальное обсуждение, хоть и оффтоп, такое отделать в отдельную тему просто надо... Минус один, спор чисто идеологический: юзанье собаки не есть зло, если понимаешь, что делаешь, и готов к последствиям.
Во ё моё зашел ответы почитать на свой вопрос :shock: Народ мож кто нибудь все таки хоть в двух словах для меня-чайника объяснит что же у меня все таки в коде не правильно. Т.е. я его проверял все вроде и нормально, но в базу не записывает
А вот такой вариант в одну строчку чем плох? PHP: <? $data = isset($_POST['data']) ? (int) $_POST['data'] : 0; ?>