Помогите новичку делаю свой первый сайт на PHP. У меня выдает ошибку Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\phpsite\index.php on line 4 Код: Код (Text): <?php include ("blocks/bd.php"); $result = mysql_query ("SELEST title,mate_d,mate_k,text FROM settings WHERE page='index'",$db); $myrow = mysql_fetch_array($result); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <meta name="description" content="<?php echo $myrow['mate_d']; ?>"> <meta name="keywords" content="<?php echo $myrow['mate_k']; ?>"> <title><?php echo $myrow['title']; ?></title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <table width="690" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border"> <? include ("blocks/header.php");?> <tr> <td><table width="690" border="0" cellspacing="0" cellpadding="0"> <tr> <? include ("blocks/lefttd.php");?> <td> <?php echo $myrow['text']; ?> </td> </tr> </table></td> </tr> <? include ("blocks/footer.php");?> </table> </body> </html> Код БЗ: Код (Text): <?php $db = mysql_connect ("localhost","php","12345"); mysql_select_db ("phpsite", $db); ?> Как избавится от ошибки?
Исправте SELEST на SELECT А вообще лучше писать так: Код (Text): $result = mysql_query ("SELECT title,mate_d,mate_k,text FROM settings WHERE page='index'",$db) or die(mysql_error());
плиз помогите, выдает ошибку Parse error: syntax error, unexpected '[', expecting ',' or ';' in Z:\home\localhost\www\phpsite\index.php on line 34 код: <?php $db = mysql_connect("localhost","php","12345"); mysql_select_db("phpsite",$db); $result = mysql_query ("SELECT title,meta_d,meta_k,text FROM settings WHERE page='index'",$db)or die(mysql_error()); $myrow = mysql_fetch_array($result); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta name="description" content=" <?php echo $myrow['meta_d']; ?>"> <meta name="keywords" content=" <?php echo $myrow['meta_k']; ?> "> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title><?php echo $myrow['title']; ?></title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <table width="690" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border"> <!--подключаем шапку сайта--> <? include ("blocks/header.php"); ?> <tr> <td height="679"><table width="690" height="679" border="0" cellpadding="0" cellspacing="0"> <tr> <!--подключаем левую часть сайта--> <? include("blocks/lefttd.php");?> <td valign="top"> <?php echo myrow['text']; ?> </td> </tr> </table></td> </tr><!--подключаем нижнюю часть сайта--> <? include("blocks/footer.php");?> </table> </body> </html>
Помогите с кодом Код (Text): [php]бд <?php header('Content-type: text/html; charset=utf-8'); $db = mysql_connect('localhost'); mysql_select_db("user",$db); ?>[/php] <?php header('Content-type: text/html; charset=utf-8'); if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} } if (empty($login) or empty($password)) { exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); } $login = stripslashes($login); $login = htmlspecialchars($login); $password = stripslashes($password); $password = htmlspecialchars($password); $login = trim($login); $password = trim($password); include ("bd.php");// подклюяаемся к базе $result = mysql_query("SELECT id FROM users WHERE login='$login'",$db); $myrow = mysql_fetch_array($result); if (!empty($myrow['id'])) { exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."); } // если такого нет, то сохраняем данные $result2 = mysql_query ("INSERT INTO users (login,password) VALUES('$login','$password')"); // Проверяем, есть ли ошибки if ($result2=='TRUE') { echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>"; } else { echo "Ошибка! Вы не зарегистрированы."; } ?> Проблема: Warning: mysql_fetch_array() expects parameter 1 to be resource
Это означает, что неправильный запрос был, база его отказалась обрабатывать. Выведи на экран, какой запрос получается, и разберись, что неправильно. Ещё ошибку выведи.mysql_error, если не ошибаюсь. А вообще, пахнет уроками какого-нибудь Попова. 1. Расширение mysql устарело года 4 назад, надо использовать mysqli или PDO 2. Бредовая подготовка данных. stripslashes была нужна, пока не были выпилены магические кавычки (такими древними версиями php, в которых они ещё есть, пользоваться для новых сайтов не следует). htmlspecialchars никакого отношения к защите от sql-инъекций, которые тут возможны, не имеет
Упс, только заметил что ответил на ваше сообщение, а хотел ответить во-этому форумчанину: "mkramer"( просто тогда пришел с ДР друга, так в голове каша была, и почему-то меня потянуло к компу). Что касается кода, то ошибки по поводу полной работы его я исправил будучи при этом пьяненьким, а от на форме наверное залип и не заметил кому отвечаю... Прошу прощения, и прошу помочь мне в защите от sql инъекции, а то я не давно начал изучать php и в безопасности я пока вообще не шарю...(
Мифы о PDO, универсальности и подготовленных запросах: 1) PDO из коробки гарантирует безопасность через использование подготовленных запросов. МИФ. По умолчанию PDO не использует имеющийся движок адаптера, обеспечивающий работу с подготовленными запросами, а эмулирует их, выступая в роли кверибилдера, уязвимого к атакам через кодировку. Это мало кто знает, к сожалению. За это отвечает отдельный параметр Код (Text): PDO::ATTR_EMULATE_PREPARES 2) Только PDO позволяет работать с подготовленными запросами, а MySQLi не имеет нативного инструментария для этого. МИФ. Активно распространяемый повсюду и, зачастую, являющийся главным аргументом для выбора между PDO и MySQLi на проектах, где даже не обдумывалась возможность и необходимость использования разных БД. MySQLi прекрасно умеет работать с подготовленными запросами, причем не эмулируя их, а нативно, юзая соответствующий механизм БД. 3) Если юзаешь PDO, то автоматом решается проблема с переносом проекта на новую БД. МИФ. PDO предоставляет универсальный интерфейс, но если запрос написан под MySQL, и использует специфичные для него вещи, то на том же PostgreSQL запрос завалится. PDO абстрагируется от особенностей работы конкретного адаптера, но не от его языка. Да, да, есть всякие абстрактные кверибилдеры, но что-то изощренное на них собирать задолбаешься. 4) Универсальность PDO добавляет гибкости приложению. МИФ. Суть в том, что если проект пилится человеком знающим, он знает и о тонкостях работы той или иной БД. И учитывает их при проектировании структуры БД, при написании запросов. И архитектурное решение, выгодное для одной БД может быть проигрышным или не рабочим для другой. В итоге мы либо все подводим под общий знаменатель, отрезая все не общие фичи, либо поддерживаем двойной(минимум) набор команд и, возможно, двойную(тоже как минимум) архитектуру. Так, например, ряд специфичных команд надо дублировать для разных БД через костыли типа "PDO::MYSQL_ATTR_INIT_COMMAND". И вот чот как-то универсальный переносимый код на PDO превращается в MySQL-специфичный код на костылях. Вывод: юзать PDO надо тогда и только тогда, когда его основная фича, то бишь мультидвижковость, изначально заложена в проект. Когда у тебя есть силы и время на поддержание работы сразу с несколькими БД (а их больше двух, ваш КО), и если ты уверен, что это обязательно пригодится и окупится. В противном случае - хрень это тормозная, состоящая из оверхедов чуть более чем вся, да заставляющая дергать движок базы через служебные запросы, а не напрямую, через API адаптера. Не более того. При этом, местами доходя до маразма. Так, например, чтобы указать кодировку соединения, нам надо...установить соединение, а потом, используя его, указать через служебный запрос его кодировку.
@Fell-x27, спасибо за ликбез Узнал много нового. А можно поподробнее? Что за уязвимость через кодировку?
На русском не нашел, но если с инглишем проблем нет, то вот и вот. Вкратце, если тебе пришло два левых символа в одной кодировке, а в базу они были переданы для сохранения в другой, как есть, без спецификации кодировки соединения, то, при сохранении с последующим чтением в той кодировке, в которой работает БД, эти два символа могут быть истолкованы уже как третий, наш любимый апостроф. Это называется "инъекция второго порядка". И это одна из причин, почему желателньо не доверять даже тем данным, которые вытащил из собственной БД. И, кроме прочего, это одна из причин, почему расширение _mysql считалось само по себе дырой в безопасности. Оно не умело указывать явно кодировку работы с базой. У _mysqli такой проблемы нет. Более того, _mysqli умеет общаться с БД напрямую, минуя сетевой протокол(если, конечно, используется драйвер mysqlnd). И у нее есть целый развесистый букет функций для управления БД тоже напрямую, а не через посылание служебных запросов текстом.