1) соединения с БД PHP: <?php /***********************************************************\ | Script: Web Site of Vowik.ru | | Author: Sharapov Vladimir (DragonOfDeath) | | E-Mail: [email=DragonOfDeath@bk.ru]DragonOfDeath@bk.ru[/email] | | File: function.php | | Date: 18.06.2008 | \***********************************************************/ /* Функция соединения с базой данных и выбором таблицы Передаем функции: сервер, пользователя, пароль и саму таблицу */ function db_connect($db_server, $db_user, $db_passwd, $db_table) { $db_connect = @mysql_connect ($db_server, $db_user, $db_passwd); // Соеденяемся с БД if (!$db_connect) // Если ошибка, сообщаем об этом { $error = 'базой данных'; } $db_table_connect = @mysql_select_db ($db_table); // Соеденяемся с таблицей elseif (!$db_table_connect) // Если ошибка, сообщаем об этом { $error = 'таблицей'; } // Выводим сообщение об ошибке printf (' <html> <head> <meta http-equiv="Content-Language" content="ru"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Ошибка № '. mysql_errno() .'</title> </head> <body> <p align="center">Соединение с '.$error.' невозможно, ошибка - № <b>'. mysql_errno() .'</b> - <u>'. mysql_error() .'</u></p> <p align="center">Нет соединения с '.$error.' <p align="center"><b>Проверьте параметры в config.php</b> </body> </html>'); mysql_close(); die(); } // Закрыли функцию db_connect ?> Суть такова... максимум оптимизировать. Хочу сделать, что бы при ошибке соединения с БД одна ошибка, если БД верно, попытка соедениться с таблицей, если неудача - эррор... НО не могу поянть куда надо пихнуть ПРИНТ, что бы не выполнять оба запроса сразу и к БД и к таблице... т.е. не соединился с БД, еррор и ДИЕ, если прошел, проверяем таблицу - ошибка, значит еррор, но уже с переменной "таблица" и ДИЕ.... Mysql_close(); как сделать, голову сломал, пока ЭТО лучший вариант, что мне пришел в голову 2) помогите написать функцию, что бы защититься от sql инъекций и прочих бяк... Типа вводишь $sql = 'insert into...'; // или любой другой query($sql); и сразу и ескейпы всякие экранировались и на входе облом с инъекциями... Заранее огромное за все спасибо
А в чем проблема? Есть шаблон, есть функция/метод, который принимает данные и вставляет их в шаблон и, возможно, выводит. Просто при ошибке отправляем данные ошибки в шаблон и убиваем скрипт.
после mysql_connect(), mysql_select_db() и mysql_query() пропиши or die('Произошла ошибка: <b>'.mysql_error().'</b>'); на тему защиты от инъекций, я id-шники обрабатываю с помощью ф-ции intval(); текстовые данные - mysql_real_escape_string() (в момент ее вызова уже должно быть установлено соединение с БД)
DarkElf, Ну так я хочу все цивильненько... со всем заголовками и пр... а не просто вывод сообщения.... А там, опять же, приходится дважды делать текст...
Nemo or my_error_handler(mysql_error()); где my_error_handler() замени на свою функцию, которая будет выводить страницу с сообщением об ошибке
PHP: <?php /***********************************************************\ | Script: Web Site of Vowik.ru | | Author: Sharapov Vladimir (DragonOfDeath) | | E-Mail: [email=DragonOfDeath@bk.ru]DragonOfDeath@bk.ru[/email] | | File: function.php | | Date: 18.06.2008 | \***********************************************************/ function error_db_connect($error, $mysql_error, $mysql_errno) { printf (' <html> <head> <meta http-equiv="Content-Language" content="ru"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Ошибка № '. mysql_errno() .'</title> </head> <body> <p align="center">Соединение с '.$error.' невозможно, ошибка - № <b>'. $mysql_errno .'</b> - <u>'. $mysql_error .'</u></p> <p align="center">Нет соединения с '.$error.' <p align="center"><b>Проверьте параметры в config.php</b> </body> </html>'); mysql_close(); die(); } /* Функция соединения с базой данных и выбором таблицы Передаем функции: сервер, пользователя, пароль и саму таблицу */ function db_connect($db_server, $db_user, $db_passwd, $db_table) { $db_connect = @mysql_connect ($db_server, $db_user, $db_passwd); // Соеденяемся с БД if (!$db_connect) // Если ошибка, сообщаем об этом { $error = 'базой данных'; error_db_connect($error, $mysql_error(), $mysq_errno()); } $db_table_connect = @mysql_select_db ($db_table); // Соеденяемся с таблицей elseif (!$db_table_connect) // Если ошибка, сообщаем об этом { $error = 'таблицей'; error_db_connect($error, $mysql_error, $mysq_errno); } else { echo "Все ок"; } } // Закрыли функцию db_connect ?> Опять я что-то намудрил? Не работает (( На экнран тоже ничего не выводит
Сделал... PHP: <? // Функция создания сообщения об ошибке, при соединении с БД function error_db_connect() { printf ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Language" content="ru"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Ошибка</title> </head> <body> <p align="center">Нет соединения с базой данных <p align="center"><b>Проверьте параметры в config.php</b> </body> </html>'); } /* Функция соединения с базой данных и выбором таблицы Передаем функции: сервер, пользователя, пароль и саму таблицу */ function db_connect($db_server, $db_user, $db_passwd, $db_table) { $db_connect = @mysql_connect ($db_server, $db_user, $db_passwd) or die (error_db_connect()); // Соединяемся с БД $db_table_connect = @mysql_select_db ($db_table) or die (error_db_connect()); // Соединяемся с таблицей } // Закрыли функцию db_connect?> Сейчас попробую сделать с защитой от бяк
Утащил из мануала вот такой код... переделал... перепроверьте за мной PHP: <?php function sql_query($sql) { // если magic_quotes_gpc включена - используем stripslashes if (get_magic_quotes_gpc()) { $sql = stripslashes($sql); } // Если переменная - число, то экранировать её не нужно // если нет - то окружем её кавычками, и экранируем if (!is_numeric($sql)) { $sql = "'" . mysql_real_escape_string($sql) . "'"; } return $sql; } mysql_query($sql) or die ('Не возмодно выполнить запрос к базе'); } ?> Все норм?