Писал топик уже на эту тему но понял что код был совершенно не тем. теперь вроде более менее разобрался но все равно не пашет( Это обработчик Код (Text): <?php // данные доступа к базе данных $db_host="127.0.0.1"; // обычно не нужно изменять $db_user="root"; // имя пользователя БД $db_password=""; // пароль БД $db_name = "zakaz"; // имя БД $table_name = "formzakaz"; // имя таблицы статистики // соединение с БД mysql_connect($db_host, $db_user, $db_password) or die (mysql_error()); mysql_select_db($db_name) or die (mysql_error()); mysql_query("SET NAMES 'cp1251'"); mysql_query("SET CHARACTER SET 'cp1251'"); // Выполняем запрос: выбрать ID пользователей, которые посетили приложение более 10 раз $sql = mysql_query($query); $id = htmlspecialchars($_GET["id"]); if($id) { $sql = ("UPDATE formzakaz SET * WHERE id = $id"); mysql_query($sql); } if(!$sql) echo 'Запись не добавлена'; if($sql) echo '<script type="text/javascript"> alert("Запись успешно добавлена!"); </script>'; $back = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'admin.php'; header("Location: {$back}");?> Сама форма Код (Text): <?php // данные доступа к базе данных $db_host="127.0.0.1"; // обычно не нужно изменять $db_user="root"; // имя пользователя БД $db_password=""; // пароль БД $db_name = "zakaz"; // имя БД $table_name = "formzakaz"; // имя таблицы статистики // соединение с БД mysql_connect($db_host, $db_user, $db_password) or die (mysql_error()); mysql_select_db($db_name) or die (mysql_error()); mysql_query("SET NAMES 'cp1251'"); mysql_query("SET CHARACTER SET 'cp1251'"); // Выполняем запрос: выбрать ID пользователей, которые посетили приложение более 10 раз $query = 'SELECT * FROM `'.$table_name.'` WHERE `id`;'; $sql = mysql_query($query); // обрабатываем полученный результат // если нужно, то узнаем количество выбранных значений $td = '</td><td id="tho">'; $tda = '</td><td id="admin">'; $num_rows = mysql_num_rows($sql); echo '<div id="lost"> <table> <tr><td id="one">№</td><td id="tho">IP уличные</td><td id="tho">IP в помещении</td><td id="tho">Аналоговые уличные</td><td id="tho">Аналоговые в помещении</td><td id="tho">кол-во кабеля</td><td id="tho">кол-во микрофонов</td><td id="tho">хар-ки помещения</td><td id="tho">описание помещения</td><td id="tho">дата подачи</td><td id="tho">дата сдачи</td><td id="tho">город</td><td id="admin">Имя</td><td id="admin">Фамилия</td><td id="admin">Отчество</td><td id="admin">Почта</td><td id="admin">адресс</td><td id="admin">телефон</td><td id="admin">название</td><td id="admin">фирмы</td><td>Статус</td><td id="admin"><img src="..\img\deletered.png" Width="25" Height="25" ></td><td>Редактировать</td> </tr>'; // выводим данные while ($sql_data = mysql_fetch_array($sql)) { if($sql_data['status'] == 1) // Статус заявки выполнен { $fon = 'style="background-color: "'; } else { $fon = 'style="background-color:IndianRed "'; } echo ' <tr '.$fon.' ><td id="one">'.$sql_data['id'].$td.' <input type="text" style="width:40px; "name="IPul" value="'.$sql_data['IPul'].'" ></input> '.$td.'<input type="text" name="IPpom" value="'.$sql_data['IPpom'].'" ></input> '.$td.'<input type="text" name="Analogul" value="'.$sql_data['Analogul'].'" ></input> '.$td.'<input type="text" name="Analogpom" value="'.$sql_data['Analogpom'].'" ></input> '.$td.'<input type="text" name="kabel" value="'.$sql_data['kabel'].'" ></input> '.$td.'<input type="text" name="micro" value="'.$sql_data['micro'].'" ></input> '.$td.'<input type="text" name="pomenie" value="'.$sql_data['pomenie'].'" ></input> '.$td.'<input type="text" name="rabota" value="'.$sql_data['rabota'].'" ></input> '.$td.'<input type="text" name="datareal" value="'.$sql_data['datareal'].'" ></input> '.$td.'<input type="text" name="dataold" value="'.$sql_data['dataold'].'" ></input> '.$td.'<input type="text" name="city" value="'.$sql_data['city'].'" ></input> '.$tda.'<input type="text" name="name" value="'.$sql_data['name'].'" ></input> '.$tda.'<input type="text" name="firstname" value="'.$sql_data['firstname'].'" ></input> '.$tda.'<input type="text" name="lastname" value="'.$sql_data['lastname'].'" ></input> '.$tda.'<input type="text" name="email" value="'.$sql_data['email'].'" ></input> '.$tda.'<input type="text" name="adress" value="'.$sql_data['adress'].'" ></input> '.$tda.'<input type="text" name="tel" value="'.$sql_data['tel'].'" ></input> '.$tda.'<input type="text" name="namefirm" value="'.$sql_data['namefirm'].'" ></input> '.$tda.'<input type="text" name="lico" value="'.$sql_data['lico'].'" ></input> '.$tda.'<select size="1" name="status"> <option value="0">на модерацию</option> <option value="1">проверена</option> <option value="2">выполнена</option> </select> '.$tda.'<a href="del.php?id=' . $sql_data['id'] . '"><img src="..\img\deletered.png" Width="25" Height="25" ></a></td><td><a href="admintenderaction.php?id=' . $sql_data['id'] . '">Редактировать</a></td></tr>'; } $fon = $sql_data['status']; echo ' </form> </table> </div id="lost"> </body> </html>'; ?> Ошибок не выдает ну как собственно и не меняет данных в БД
Слушай, ну тут у тебя такие глупости написаны, особенно в обработчике - что сложно догадаться, что там вообще должно быть. Возьми книжку какую-нибудь, типа самоучитель PHP-MySQL для новичков, прочитай.
А по моему, я дал тебе полную реализацию для работы с базой. Новичок там поймет в легкую! Ты глаза открой =) И хватит одинаковые не уместные темы штопать.
спасибо.я уже перечитал все. текст переверстал раз на 40 без преувеличения. в гугле до 40 ой страницы дошел. в книге по мускулу тоже прочитал все. с примерами своими сверялся. я сюда пишу уже в последнюю очередь за помощью,потому что самая лучшая помощь это тех кто знает...и что мне советуют.почитай книжку. Спасибо. Your теб низкий поклон,но даже с тем что дал я уже перековырялся тоже на раз 10 и толку нету. Добавлено спустя 23 минуты 6 секунд: мне логика действий моих нужна. а вернее что не так как надо. Я соединяюсь с базой данных Вывожу таблицу со значениями нужными в инпуты. при нажатии редактировать данные что есть в форме отправляются в обработчик события В обработчике подключение к БД запрос на обновление БД и поля прописаны согласно стандарту Код (Text): $sql = ("UPDATE `formzakaz` SET lico='$lico', namefirm = '$namefirm', adress = '$adress', tel = '$tel', email = '$email', name ='$name', firstname ='$firstname', lastname ='$lastname', IPul = '$IPul', IPpom = '$IPpom', Analogul ='$Analogul', Analogpom ='$Analogpom', micro = '$micro', kabel = '$kabel', datareal ='$datareal', dataold ='$dataold', rabota = '$rabota', pomenie ='$pomenie', city = '$city',status='$status' WHERE id = '$id'"); в каком месте ошибка? не пишите код. просто скажите в каком месте копать
Ну вот сейчас, в последнем твоём сообщении - UPDATE запрос выглядит верно. А в первом сообщении в этой теме, на который я тебе посоветовал книжку почитать - было написано не пойми что и согласно какому такому стандарту - остаётся загадкой... Сейчас UPDATE запрос выглядит верно. Однако не известно, обрабатываешь ли ты данные с помощью mysql_real_escape_string (для переменных с текстом) или int (для целых чисел)? Во-первых, обрабатывать нужно, чтобы не взломали. Во-вторых, если сейчас в какой-нибудь из переменных встретиться символ ' (одинарная кавычка) - запрос не выполнится (будет ошибка синтаксиса SQL). Ну и кроме того, видно что текст запроса ты составил тут вроде верно, но не видно - а отправил ли ты его к серверу б.д. (mysql_query())?
Код (Text): <?php // данные доступа к базе данных $db_host='127.0.0.1'; $db_login='root'; $db_pass=''; $db_name='zakaz'; $table = 'formzakaz'; $db = mysql_connect($db_host,$db_login,$db_pass); $connect=false; if(!$connect=mysql_connect('127.0.0.1','root','')) { exit(mysql_error().' <> '.mysql_errno()); } else if(!mysql_select_db('formzakaz',$connect)) { exit(mysql_error().' <> '.mysql_errno()); } else { mysql_set_charset('cp1251',$db); } function query($query) { global $connect; if($connect && ''!=$query) { return mysql_query($query,$connect)or exit(mysql_error().'<br>'.mysql_errno()); } return false; } $id = htmlspecialchars($_GET["id"]); $sql = mysql_query("UPDATE `formzakaz` SET lico='$lico', namefirm = '$namefirm', adress = '$adress', tel = '$tel', email = '$email', name ='$name', firstname ='$firstname', lastname ='$lastname', IPul = '$IPul', IPpom = '$IPpom', Analogul ='$Analogul', Analogpom ='$Analogpom', micro = '$micro', kabel = '$kabel', datareal ='$datareal', dataold ='$dataold', rabota = '$rabota', pomenie ='$pomenie', city = '$city',status='$status' WHERE id = '$id'"); mysql_query($sql); if(!$sql) echo 'Запись не добавлена'; if($sql) echo '<script type="text/javascript"> alert("Запись успешно добавлена!"); </script>'; $back = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'admin.php'; header("Location: {$back}"); ?> ну пока защитой не занимаюсь. мне пока надо научится с БД работать.
Ну давай разберём твой скрипт. Сначала ты определяешь переменные для доступа к б.д. - это нормально. Далее ты создаёшь подключение к б.д. и указатель на это подключение записываешь в переменную $db: Код (PHP): $db = mysql_connect($db_host,$db_login,$db_pass); Это тоже нормально. Дальше начинается непонятное. Ты создаёшь переменную $connect и присваиваешь ей значений false. Зачем? Эта строка не нужна, ведь в следующей строке ты переопределяешь переменную $connect. Ты зачем-то создаёшь ещё одно подключение к б.д. и указатель на него записываешь в переменную $connect. Зачем тебе два одинаковых подключения к базе? Одно из них - лишнее. Дальше ты пытаешься выбрать базу данных 'formzakaz', но вот в самом начале скрипта я вижу такие переменные: Код (PHP): $db_host='127.0.0.1'; $db_login='root'; $db_pass=''; $db_name='zakaz'; $table = 'formzakaz'; Исходя из этих переменных, могу предположить, что база данных у тебя называется 'zakaz', а 'formzakaz' - это название таблицы. Но тебе видней. Только тогда не понятно, почему ты именно так назвал переменные. И ещё непонятно, почему ты их не используешь, а пишешь ещё раз название базы данных при обращении к mysql_select_db()? Далее ты определяешь функцию query(): Код (PHP): function query($query) { global $connect; if($connect && '' != $query) { return mysql_query($query, $connect) or exit(mysql_error().'<br>'.mysql_errno()); } return false; } Но не понятно, зачем? Ты нигде её не используешь. Выходит, это тоже лишнее и не нужное в твоём случае. Дальше ты получаешь из массива $_GET элемент id, обрабатываешь его функцией htmlspecialchars и присваиваешь переменной $id. А что такое id у тебя? Обычно id - это целое число. Тогда в функции htmlspecialchars тут смысла нет, а для безопасности можно привести эту переменную к типу int. Код (PHP): $id = (int) $_GET['id']; Кстати, ты не проверяешь, а пришла ли вообще переменная id в твой скрипт. Дальше ты делаешь запрос к базе. При этом ты используешь кучу разных переменных, но ни одна из них (кроме $id) не определена. Что содержится в переменных $namefirm, $adress, $tel и т.д.? А ничего в них не содержится, вообще нет таких переменных, т.к. ты нигде не создавал их и не присваивал им значений. Предполагаю, что эти значения должны приходить в твой скрипт из формы? Тогда, если форма отправлена методом GET - все эти значения будут в массиве $_GET. Если методом POST - то в массиве $_POST. И оттуда их и нужно получать. Код (PHP): $lico = $_POST['lico']; $namefirm = $_POST['namefirm']; $adress = $_POST['adress']; // ... $sql = "UPDATE `formzakaz` SET lico = '$lico', namefirm = '$namefirm', adress = '$adress', ... WHERE `id` = {$id}"; Теперь смотрим дальше. Ты делаешь запрос к базе и результат выполнения этого запроса присваиваешь переменной $sql. А потом зачем-то ещё раз делаешь запрос к базе, только вместо текста запроса - передаёшь в функцию mysql_query результат выполнения предыдущего запроса Это ошибка и вообще не нужно Дальше ты проверяешь, выполнился ли запрос и, если да - ты выводишь JavaScript alert, что запись обновлена, а если нет - то сообщаешь об этом. А после этого - пытаешься отправить заголовок переадресации функцией header(). Это неправильно. Сперва нужно отправлять заголовки, а только потом уже выводить какой-либо ещё текст. А в твоём случае вообще не понимаю, зачем нужен этот текст, если в конце всё равно идёт переадресация на другую страницу. Пользователь этого текста не должен будет увидеть. В конечном итоге получилось нечто такое: Код (PHP): <?php // данные доступа к базе данных $db_host = '127.0.0.1'; $db_login = 'root'; $db_pass = ''; $db_name = 'zakaz'; $table = 'formzakaz'; $db = mysql_connect($db_host, $db_login, $db_pass) or exit(mysql_error()); mysql_select_db($db_name, $db) or exit(mysql_error()); mysql_set_charset('cp1251', $db); $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; if(!$id) exit('ID не указан!'); $sql = "UPDATE `formzakaz` SET `lico` = '" . mysql_real_escape_string($_POST['lico'], $db) . "', `namefirm` = '" . mysql_real_escape_string($_POST['namefirm'], $db) . "', `adress` = '" . mysql_real_escape_string($_POST['adress'], $db) . "', `tel` = '" . mysql_real_escape_string($_POST['tel'], $db) . "', `email` = '" . mysql_real_escape_string($_POST['email'], $db) . "', `name` = '" . mysql_real_escape_string($_POST['name'], $db) . "', `firstname` = '" . mysql_real_escape_string($_POST['firstname'], $db) . "', `lastname` = '" . mysql_real_escape_string($_POST['lastname'], $db) . "', `IPul` = '" . mysql_real_escape_string($_POST['IPul'], $db) . "', `IPpom` = '" . mysql_real_escape_string($_POST['IPpom'], $db) . "', `Analogul` = '" . mysql_real_escape_string($_POST['Analogul'], $db) . "', `Analogpom` = '" . mysql_real_escape_string($_POST['Analogpom'], $db) . "', `micro` = '" . mysql_real_escape_string($_POST['micro'], $db) . "', `kabel` = '" . mysql_real_escape_string($_POST['kabel'], $db) . "', `datareal` = '" . mysql_real_escape_string($_POST['datareal'], $db) . "', `dataold` = '" . mysql_real_escape_string($_POST['dataold'], $db) . "', `rabota` = '" . mysql_real_escape_string($_POST['rabota'], $db) . "', `pomenie` = '" . mysql_real_escape_string($_POST['pomenie'], $db) . "', `city` = '" . mysql_real_escape_string($_POST['city'], $db) . "', `status` = '" . mysql_real_escape_string($_POST['status'], $db) . "' WHERE `id` = {$id}"; $res = mysql_query($sql, $db) or exit(mysql_error()); $back = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'admin.php'; header("Location: {$back}"); if($res) { echo '<script type="text/javascript"> alert("Запись успешно обновлена!"); </script>'; } else { echo 'Запись не обновлена'; } ?> Я там добавил кучу mysql_real_escape_string для каждой переменной - это чтобы если пользователь введёт в какое-нибудь из полей символ ' (одинарная кавычка) - запрос не обламывался. Но вообще, когда полей много - пожалуй, удобнее создать массив с названиями переменных и обработать входящие данные в цикле. По крайней мере писать меньше
Огромное спасибо! Я щас понимаю что там бред))) у меня просто получается всегда обучение не как у всех нормальных людей. я по армейской системе все делаю) по пути разберусь) вот на данный момент читаю мануалы по пхп и мускулу и применяю на сайте. как только связался с БД начался стопор хотя я реально многое понимать начал. Тебе за этот пост так вообще огромнейшее спасибо! Понял где ошибки. Почему их надо исправлять и многие другие вещи. это неоценимая информация для меня,потому как везде пишут КАК надо делать а не КАК и ПОЧЕМУ именно так. Добавлено спустя 19 минут 19 секунд: Код (Text): <?php // данные доступа к базе данных $db_host="127.0.0.1"; // обычно не нужно изменять $db_user="root"; // имя пользователя БД $db_password=""; // пароль БД $db_name = "zakaz"; // имя БД $table_name = "formzakaz"; // имя таблицы статистики // соединение с БД mysql_connect($db_host, $db_user, $db_password) or die (mysql_error()); mysql_select_db($db_name) or die (mysql_error()); mysql_query("SET NAMES 'cp1251'"); mysql_query("SET CHARACTER SET 'cp1251'"); // Выполняем запрос: выбрать ID пользователей, которые посетили приложение более 10 раз $query = 'SELECT * FROM `'.$table_name.'` WHERE `id`;'; $sql = mysql_query($query); // обрабатываем полученный результат // если нужно, то узнаем количество выбранных значений $td = '</td><td id="tho">'; $tda = '</td><td id="admin">'; $num_rows = mysql_num_rows($sql); $fon = 'status'; echo '<div id="lost"> <table> <tr><td id="one">№</td><td id="tho">IP уличные</td><td id="tho">IP в помещении</td><td id="tho">Аналоговые уличные</td><td id="tho">Аналоговые в помещении</td><td id="tho">кол-во кабеля</td><td id="tho">кол-во микрофонов</td><td id="tho">хар-ки помещения</td><td id="tho">описание помещения</td><td id="tho">дата подачи</td><td id="tho">дата сдачи</td><td id="tho">город</td><td id="admin">Имя</td><td id="admin">Фамилия</td><td id="admin">Отчество</td><td id="admin">Почта</td><td id="admin">адресс</td><td id="admin">телефон</td><td id="admin">название</td><td id="admin">фирмы</td><td>Статус</td><td id="admin"><img src="..\img\deletered.png" Width="25" Height="25" ></td><td>Редактировать</td> </tr>'; // выводим данные while ($sql_data = mysql_fetch_array($sql)) { if($sql_data['status'] == 1) // Статус заявки выполнен { $fon = 'style="background-color: "'; } elseif($sql_data['status'] == 0) { $fon = 'style="background-color:IndianRed "'; } else { $fon = 'style="background-color:BlanchedAlmond "'; } echo ' <tr '.$fon.' ><td id="one">'.$sql_data['id'].$td.' <input type="text" style="width:40px; "name="IPul" value="'.$sql_data['IPul'].'" ></input> '.$td.'<input type="text" name="IPpom" value="'.$sql_data['IPpom'].'" ></input> '.$td.'<input type="text" name="Analogul" value="'.$sql_data['Analogul'].'" ></input> '.$td.'<input type="text" name="Analogpom" value="'.$sql_data['Analogpom'].'" ></input> '.$td.'<input type="text" name="kabel" value="'.$sql_data['kabel'].'" ></input> '.$td.'<input type="text" name="micro" value="'.$sql_data['micro'].'" ></input> '.$td.'<input type="text" name="pomenie" value="'.$sql_data['pomenie'].'" ></input> '.$td.'<input type="text" name="rabota" value="'.$sql_data['rabota'].'" ></input> '.$td.'<input type="text" name="datareal" value="'.$sql_data['datareal'].'" ></input> '.$td.'<input type="text" name="dataold" value="'.$sql_data['dataold'].'" ></input> '.$td.'<input type="text" name="city" value="'.$sql_data['city'].'" ></input> '.$tda.'<input type="text" name="name" value="'.$sql_data['name'].'" ></input> '.$tda.'<input type="text" name="firstname" value="'.$sql_data['firstname'].'" ></input> '.$tda.'<input type="text" name="lastname" value="'.$sql_data['lastname'].'" ></input> '.$tda.'<input type="text" name="email" value="'.$sql_data['email'].'" ></input> '.$tda.'<input type="text" name="adress" value="'.$sql_data['adress'].'" ></input> '.$tda.'<input type="text" name="tel" value="'.$sql_data['tel'].'" ></input> '.$tda.'<input type="text" name="namefirm" value="'.$sql_data['namefirm'].'" ></input> '.$tda.'<input type="text" name="lico" value="'.$sql_data['lico'].'" ></input> '.$tda.'<select size="1" name="status"> <option value="0">на модерацию</option> <option value="1">проверена</option> <option value="2">выполнена</option> </select> '.$tda.'<a href="del.php?id=' . $sql_data['id'] . '"><img src="..\img\deletered.png" Width="25" Height="25" ></a></td><td><a href="admintenderaction.php?id=' . $sql_data['id'] . '">Редактировать</a></td></tr>'; }if(!$sql_data) echo '<script type="text/javascript"> alert("Запись не добавлена!"); </script>'; if($sql_data) echo '<script type="text/javascript"> alert("Запись успешно добавлена!"); </script>'; echo ' </form> </table> </div id="lost"> </body> </html>'; ?> вот полный текст формы Показывает после нажатия на редактировать что функций не существует. я их вытаскивал из БД в инпуты. По Сути функции то ведь вызваны уже. НЕ работает. Прописывал их $city = $_POST['city']; типа такого все. Не работает. Прописывал без ПОСТ. $city = 'city'; Аналогично... Прописывал В обработчике обоими способами. В УПДАДЕ прописывал тоже всяко. он их не видит. ID прописывал так потому что это для меня был самый простой способ достать его из адресной строки и как то работать с ним. Ну этот способ меня спас когда мне надо было достать какие то строки из другой таблицы ,которые были привязаны к id из другой таблицы. Щас сижу читаю php мануал .надеюсь что вычитаю
У тебя на редактирование сейчас - просто ссылка. Вот эта: Код (Text): <a href="admintenderaction.php?id=' . $sql_data['id'] . '">Редактировать</a> Когда ты на неё нажимаешь - запустится скрипт admintenderaction.php и в него будет передана только только переменная id. С инпутами это вообще никак не связано. Ни один из них в скрипт не попадёт. Тебе нужно создавать для каждой строки форму. И для редактирования использовать submit-кнопку, которая будет отправлять значения всех этих инпутов в твой скрипт. Похоже, ты ещё и html знаешь не очень. В общем, это должно быть примерно так: Код (PHP): while($sql_data = mysql_fetch_array($sql)) { echo '<form method="post" action="admintenderaction.php?id=' . $sql_data['id'] . '">' . '<tr ' . $fon . '><td>' . $sql_data['id'] . '</td>' . '<td><input type="text" name="IPul" value="' . $sql_data['IPul'] . '" /></td>' . '<td><input type="text" name="IPpom" value="' . $sql_data['IPpom'] . '" /></td>' . '<td><input type="text" name="Analogul" value="' . $sql_data['Analogul'] . '" /></td>' . // ... тут все остальные инпуты '<td>[url="del.php?id=' . $sql_data['id'] . '"]<img src="../img/deletered.png" Width="25" Height="25" >[/url]</td>' . '<td><input type="submit" value="Редактировать" /></td></tr></form>'; }
Этого то я и боялся что все данные туда писать. ну HTML в принципе на 6 из 10 знаю. сверстать могу на дивах и табле. и CSS пропишу.