За последние 24 часа нас посетили 22829 программистов и 1718 роботов. Сейчас ищет 1481 программист ...

Помогите написать две функции

Тема в разделе "PHP и базы данных", создана пользователем EvelRus, 18 июн 2008.

  1. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    1) соединения с БД

    PHP:
    1. <?php
    2. /***********************************************************\
    3. |   Script:         Web Site of Vowik.ru                    |
    4. |   Author:         Sharapov Vladimir (DragonOfDeath)       |
    5. |   E-Mail:         [email=DragonOfDeath@bk.ru]DragonOfDeath@bk.ru[/email]                     |
    6. |   File:           function.php                            |
    7. |   Date:           18.06.2008                              |
    8. \***********************************************************/
    9.  
    10. /*
    11. Функция соединения с базой данных и выбором таблицы
    12. Передаем функции: сервер, пользователя, пароль и саму таблицу
    13.  */
    14. function db_connect($db_server, $db_user, $db_passwd, $db_table)
    15. {
    16. $db_connect = @mysql_connect ($db_server, $db_user, $db_passwd); // Соеденяемся с БД
    17. if (!$db_connect) // Если ошибка, сообщаем об этом
    18. {
    19.  $error = 'базой данных';
    20. }
    21. $db_table_connect = @mysql_select_db ($db_table); // Соеденяемся с таблицей
    22. elseif (!$db_table_connect) // Если ошибка, сообщаем об этом
    23. {
    24.  $error = 'таблицей';
    25. }
    26. // Выводим сообщение об ошибке
    27.  printf ('
    28. <html>
    29. <head>
    30. <meta http-equiv="Content-Language" content="ru">
    31. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    32. <title>Ошибка № '. mysql_errno() .'</title>
    33. </head>
    34. <body>
    35. <p align="center">Соединение с '.$error.' невозможно, ошибка - № <b>'. mysql_errno() .'</b> - <u>'. mysql_error() .'</u></p>
    36. <p align="center">Нет соединения с '.$error.'
    37. <p align="center"><b>Проверьте параметры в config.php</b>
    38. </body>
    39. </html>');
    40. die();
    41. } // Закрыли функцию db_connect
    42. ?> 
    43.  

    Суть такова... максимум оптимизировать. Хочу сделать, что бы при ошибке соединения с БД одна ошибка, если БД верно, попытка соедениться с таблицей, если неудача - эррор... НО не могу поянть куда надо пихнуть ПРИНТ, что бы не выполнять оба запроса сразу и к БД и к таблице... т.е. не соединился с БД, еррор и ДИЕ, если прошел, проверяем таблицу - ошибка, значит еррор, но уже с переменной "таблица" и ДИЕ.... Mysql_close(); как сделать, голову сломал, пока ЭТО лучший вариант, что мне пришел в голову


    2) помогите написать функцию, что бы защититься от sql инъекций и прочих бяк... Типа вводишь
    $sql = 'insert into...'; // или любой другой
    query($sql);
    и сразу и ескейпы всякие экранировались и на входе облом с инъекциями...
    Заранее огромное за все спасибо :)
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А в чем проблема? Есть шаблон, есть функция/метод, который принимает данные и вставляет их в шаблон и, возможно, выводит.
    Просто при ошибке отправляем данные ошибки в шаблон и убиваем скрипт.
     
  3. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    после mysql_connect(), mysql_select_db() и mysql_query() пропиши or die('Произошла ошибка: <b>'.mysql_error().'</b>');

    на тему защиты от инъекций, я id-шники обрабатываю с помощью ф-ции intval(); текстовые данные - mysql_real_escape_string() (в момент ее вызова уже должно быть установлено соединение с БД)
     
  4. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    DarkElf, Ну так я хочу все цивильненько... со всем заголовками и пр... а не просто вывод сообщения.... А там, опять же, приходится дважды делать текст...
     
  5. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Nemo

    or my_error_handler(mysql_error());

    где my_error_handler() замени на свою функцию, которая будет выводить страницу с сообщением об ошибке
     
  6. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1. <?php
    2. /***********************************************************\
    3. |   Script:         Web Site of Vowik.ru                    |
    4. |   Author:         Sharapov Vladimir (DragonOfDeath)       |
    5. |   E-Mail:         [email=DragonOfDeath@bk.ru]DragonOfDeath@bk.ru[/email]                     |
    6. |   File:           function.php                            |
    7. |   Date:           18.06.2008                              |
    8. \***********************************************************/
    9.  
    10. function error_db_connect($error, $mysql_error, $mysql_errno)
    11. {
    12. <html>
    13. <head>
    14. <meta http-equiv="Content-Language" content="ru">
    15. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    16. <title>Ошибка № '. mysql_errno() .'</title>
    17. </head>
    18. <body>
    19. <p align="center">Соединение с '.$error.' невозможно, ошибка - № <b>'. $mysql_errno .'</b> - <u>'. $mysql_error .'</u></p>
    20. <p align="center">Нет соединения с '.$error.'
    21. <p align="center"><b>Проверьте параметры в config.php</b>
    22. </body>
    23. </html>');
    24. die();
    25. }
    26. /*
    27. Функция соединения с базой данных и выбором таблицы
    28. Передаем функции: сервер, пользователя, пароль и саму таблицу
    29. */
    30. function db_connect($db_server, $db_user, $db_passwd, $db_table)
    31. {
    32. $db_connect = @mysql_connect ($db_server, $db_user, $db_passwd); // Соеденяемся с БД
    33. if (!$db_connect) // Если ошибка, сообщаем об этом
    34. {
    35. $error = 'базой данных';
    36. error_db_connect($error, $mysql_error(), $mysq_errno());
    37. }
    38. $db_table_connect = @mysql_select_db ($db_table); // Соеденяемся с таблицей
    39. elseif (!$db_table_connect) // Если ошибка, сообщаем об этом
    40. {
    41. $error = 'таблицей';
    42. error_db_connect($error, $mysql_error, $mysq_errno);
    43. }
    44. else
    45. {
    46. echo "Все ок";
    47. }
    48. } // Закрыли функцию db_connect
    49. ?> 
    Опять я что-то намудрил? Не работает :((( На экнран тоже ничего не выводит :(
     
  7. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    Nemo



    на первый цитату обрати особое внимание
     
  8. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Сделал...

    PHP:
    1. <?
    2. // Функция создания сообщения об ошибке, при соединении с БД
    3. function error_db_connect()
    4. {
    5. printf ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    6. <html>
    7. <head>
    8. <meta http-equiv="Content-Language" content="ru">
    9. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    10. <title>Ошибка</title>
    11. </head>
    12. <body>
    13. <p align="center">Нет соединения с базой данных
    14. <p align="center"><b>Проверьте параметры в config.php</b>
    15. </body>
    16. </html>');
    17. }
    18.  
    19. /*
    20. Функция соединения с базой данных и выбором таблицы
    21. Передаем функции: сервер, пользователя, пароль и саму таблицу
    22. */
    23. function db_connect($db_server, $db_user, $db_passwd, $db_table)
    24. {
    25. $db_connect = @mysql_connect ($db_server, $db_user, $db_passwd) or die (error_db_connect()); // Соединяемся с БД
    26. $db_table_connect = @mysql_select_db ($db_table) or die (error_db_connect()); // Соединяемся с таблицей
    27. } // Закрыли функцию db_connect?>

    Сейчас попробую сделать с защитой от бяк :)
     
  9. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Утащил из мануала вот такой код... переделал... перепроверьте за мной :)

    PHP:
    1. <?php
    2. function sql_query($sql)
    3. {
    4.  // если magic_quotes_gpc включена - используем stripslashes
    5.  {
    6.   $sql = stripslashes($sql);
    7.  }
    8.  // Если переменная - число, то экранировать её не нужно
    9.  // если нет - то окружем её кавычками, и экранируем
    10.  if (!is_numeric($sql))
    11.  {
    12.   $sql = "'" . mysql_real_escape_string($sql) . "'";
    13.  }
    14.  return $sql;
    15. }
    16. mysql_query($sql) or die ('Не возмодно выполнить запрос к базе');
    17. }
    18. ?>
    Все норм?