За последние 24 часа нас посетили 30568 программистов и 1812 роботов. Сейчас ищут 840 программистов ...

Народ! Помогите новичку разобратся!

Тема в разделе "MySQL", создана пользователем velltar, 15 мар 2007.

  1. velltar

    velltar Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    3
    Симпатии:
    0
    Можно сказать с сегоднешнего дня всялся за изучение php и MySql (по книжке) и тут же сталкнулся с неожиданной проблемкой.
    Задача куска программы просто внести новую запись в базу данных. Базу создал, таблицы тоже, а код программы писал по книжке один в один, но в результате всеравно не пашет. Вот этот кусок кода:
    PHP:
    1. <?php
    2.             if (!$isbn || !$author || !$title || !$price)
    3.             {
    4.             echo "Все поля должны быть заполнены! Вернитесь назад и заполните поля";
    5.             exit;
    6.             }
    7.            
    8.             $isbn = addslashes($isbn);
    9.             $author = addslashes($author);
    10.             $title = addslashes($title);
    11.             $price = doubleval($price);
    12.            
    13.         @ $db=mysql_connect("ххх.ххххх.ххххххх.ru", "ххххххх", "хххххххх");
    14.        
    15.         if (!$db)
    16.         {
    17.         echo "ОШИБКА! Невозможно подключится к базе данных. Пожалуйста, повторите попытку позже.";
    18.         exit;
    19.         }
    20.        
    21.         mysql_select_db("books",$db);
    22.         $query = "insert into books values ('".$isbn."', '".$author."', '".$title."', '".$price."')";
    23.         $result = mysql_query($query);
    24.         if ($result)
    25.                 {
    26.                 echo "Запись была дабавлена в базу";
    27.                 exit;
    28.                 }
    29.                
    30.                 echo "Запись не добавлена!";
    31.         ?>
    Помогите разобратся!
     
  2. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
  3. velltar

    velltar Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    3
    Симпатии:
    0
    спасибо за ссылку! буду теперь пытаться понять о чем там речь идет! :)
     
  4. Anonymous

    Anonymous Guest

    Книжка плохая.
    Скажите, что за автор?
     
  5. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    знак "@" служит для подавления сообщений об ошибках.
    Уберите его и используйте только в случае, когда знаете, что здесь может вылезти ошибка, но она работе программы не мешает.
    Это так, вообще.
     
  6. AmiD

    AmiD Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Томсква
    [off]
    pel
    плохому учите... Борцы за правильный код вас проклянут ;)
    [/off]
     
  7. Anonymous

    Anonymous Guest

    AmiD, изредка! изредка — это все таки нужно. Например, что бы ошибки не повлияли на посылку заголовков, или при генерации изображений, что бы его не испортить. Имхо, это единстенно обоснованное применение.
     
  8. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Горбунов Олег

    PHP:
    1. <?
    2. $dbh = @mysql_query(SERVER,USER,PWD) or exit("Ошибка соединения с БД:<br>номер ошибки:".mysql_errno.", описание ошибки: ".mysql_error());
    3. ?>
    чем плохо?
    Warning портит вид страницы, и останавливать придется практически в любом случае, чтоб вместо страницы не получилось хз что..
     
  9. Anonymous

    Anonymous Guest

    DarkElf, на рабочих серверах должно быть display_errors = 0 и log_errors = 1
     
  10. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    В последнее время постоянно юзаю при получении данных из поста и гета.

    пример:
    $data = (int) @$_POST['data'];

    Если data содержит целое число то все как надо пройдет, если строку то будет 0, если по каким то причинам не передано (например это был чекбокс), то 0.

    Сказка :).

    А вот при генерации изображений или для заголовков - это ламерство, потом заим...ся отлавливать что глючит.
    Чтобы отловить в таких местах лучше заюзать ob_start() - ловит все, в том числе и фатал эрроры
     
  11. Anonymous

    Anonymous Guest

    Критикуя — предлагайте. Как ты собираешься fatal error-ы отлавливать при генерации изображений, а? =)
     
  12. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    PHP:
    1.  
    2. <?
    3. ob_start("my_is_error");
    4.  
    5. $a := кривой закос под паскаль ;) ;
    6. //и прочий код
    7.  
    8.  
    9. //где то в окружении делаем функцию
    10. function my_is_error($buffer){
    11. //предполагаем что ob_start используется там где не должнобыть никаких выводов.
    12. if (!empty($buffer)) //если были ошибки
    13. {
    14.   //К примеру будем отправлять письмо админу с ошибками:
    15.  
    16.   $email = ""; //подставить по желанию
    17.   $subject = ""; //подставить по желанию
    18.   $headers = ""; //подставить по желанию
    19.   mail ($email, $subject, $buffer, $headers);
    20. }
    21.  
    22. }
    23. ?>
    24.  
     
  13. AmiD

    AmiD Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Томсква
    а вот так :
    PHP:
    1.  
    2. $data = (int) ($_POST['data']/1);
    3.  
    И ошибок не будет.
     
  14. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    AmiD
    Если data не передана, то будет нотис (Notice) с замечанием что обращение идет к несуществующему индексу массива.
    Я уже писал про это не так давно.
     
  15. AmiD

    AmiD Активный пользователь

    С нами с:
    16 янв 2007
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Томсква
    vb
    а разве нет проверки isset перед $data = (int) @$_POST['data']; ?
     
  16. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    AmiD
    о том и речь что вся проверка в одну строчку, для того и используется собака.

    Если не установлена то по логике 0. Вот и получается 0. Потому и сказка, ни иссетов ни емпти не надо и все работает как надо :).
     
  17. pel

    pel Активный пользователь

    С нами с:
    19 янв 2007
    Сообщения:
    569
    Симпатии:
    0
    Адрес:
    Симферополь
    та даже хотя бы такой прикол:
    HTML:
    1. <input type=text name=name value=<?= @$_POST['name'];?>>
    Например, если в форме неправильно заполнено поле. Чтобы не приходилось заново заполнять _всю_ форму.
    ИМХО, просто удобнее, чем перед выводом формы проверять все поля на существование соответствующих переменных.

    Борцы за правильный код проклянут нас всех))
     
  18. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    pel
    две ошибки в одной строчке :)
    1. name='' - не хватает кавычек, иначе все будет плохо если я в посте передам ">"
    2. Нельзя делать прямую вставку из поста в <input text, потому что ограничив value кавычками если в посте те же кавычки - будет касяк.

    Какой то злостный офтоп пошел... Горбунов Олег, что делать в помойку все или всем по предупреждению(начиная с меня)? :)
     
  19. Anonymous

    Anonymous Guest

    Совместим. В помойку, и предупреждения. =)
    Да нет, нормальное обсуждение, хоть и оффтоп, такое отделать в отдельную тему просто надо...
    Минус один, спор чисто идеологический: юзанье собаки не есть зло, если понимаешь, что делаешь, и готов к последствиям.
     
  20. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    +1
     
  21. velltar

    velltar Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    3
    Симпатии:
    0
    Во ё моё зашел ответы почитать на свой вопрос :shock: Народ мож кто нибудь все таки хоть в двух словах для меня-чайника объяснит что же у меня все таки в коде не правильно. Т.е. я его проверял все вроде и нормально, но в базу не записывает :D
     
  22. ZZToP

    ZZToP Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Сочи
    А вот такой вариант в одну строчку чем плох?

    PHP:
    1. <?
    2. $data = isset($_POST['data']) ? (int) $_POST['data'] : 0;
    3. ?>
    4.  
     
  23. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Тогда уж просто
    $data = (int) $_POST['data'];
     
  24. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    eduha,

    ;)
     
  25. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Хех, начало топика не читал :)