Lunik
Постоялец
Offline
|
|
« : 02-12-2010 16:28 » |
|
Такой вопрос, есть скрипт, на удаление и редактирование данных. Не могу понять, почему скрипт не отпрвляют данные в БД посде их редактирвоание, в запросы все параметры передает. Сам скрипт. <? include ('include/_db.class.php');
if (isset($_POST['del'])) { $id=intval($_POST['id']); $result_delete = mysql_query ("DELETE FROM `news` WHERE id='$id'"); } if ($result_delete == true ) { echo "<p>Запись Удалена</p>"; }
$editlist = ""; $sel = ""; $result = mysql_query("SELECT * FROM `news` ORDER BY `id` DESC"); if (($result) != 0) { while ($data = mysql_fetch_array($result)) { if (isset($id)) $sel = ($id == $data['id'] ? " selected" : ""); $editlist .= "<option value='".$data['id']."'$sel>".$data['titl']."</option>"; } } ?> <form name='selectform' method='post' action=''> <table cellpadding="0" cellspacing="0" width="500" class="history" align="left"> <tr> <td> <select name='id' style='width:300px'> <?=$editlist;?></select> </td> <td> <a href="/?page=edit_news&do=red&id=29">Править</a> <input type='submit' name='del' value='Удалить'> </td> </tr> </table> </form> </td> </tr> <tr> <td> <? if (@$_GET['do'] == 'red') { $id = $_GET['id']; $query = "SELECT * FROM `news` WHERE id = $id"; /* Выполняем запрос. Если произойдет ошибка - вывести ее. */ $res = mysql_query($query) or die(mysql_error()); /* Узнаем количество записей в базе данных */ $row = mysql_num_rows($res);
/* Цикл вывода данных из базы конкретных полей */ while ($row = mysql_fetch_array($res)) { ?>
<form action="" method="POST" name="edit_form" enctype="multipart/form-data"> <input type="hidden" name="id" value="<?echo $row['id'];?>"> Заголовок<Br> <input type="text" name="titl" value="<?echo $row['titl'];?>" style="width:300px"><Br> Сообщение<Br> <textarea type="text" name="body" value="<?echo $row['body'];?>"><?echo $row['body'];?></textarea><Br> Дата<Br> <input type="text" name="date" value="<?echo $row['date'];?>"><Br> Автор<Br> <input type="text" name="avtor" value="<?echo $row['avtor'];?>"><Br> <p><input type="submit" name="submit_edit" value="Сохранить изменения"></p> </form> <? } if (@$_GET['do'] == 'red') { $query = "UPDATE `news` SET `titl` = ".mysql_real_escape_string($_POST['titl'])." , `body` = ".mysql_real_escape_string($_POST['body']).", `date` = ".mysql_real_escape_string($_POST['date']).", `avtor` = ".mysql_real_escape_string($_POST['avtor'])." WHERE `id` = '".$_POST['id']."';"; mysql_query($query) or die (mysql_error()); if ($query == true ) { echo "<p>Запись Удалена</p>"; } echo "UPDATE `news` SET `titl` = ".mysql_real_escape_string($_POST['titl'])." , `body` = ".mysql_real_escape_string($_POST['body']).", `date` = ".mysql_real_escape_string($_POST['date']).", `avtor` = ".mysql_real_escape_string($_POST['avtor'])." WHERE `id` = '".$_POST['id']."';"; /* Закрываем соединение */ mysql_close();
/* Выводим ссылку возврата */ echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.html\">Вернуться назад</a></div>"); } } ?>
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 02-12-2010 19:44 » |
|
<?=$editlist;?></select>
Что это?
$id=intval($_POST['id']); echo $id;
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Lunik
Постоялец
Offline
|
|
« Ответ #2 : 03-12-2010 06:50 » |
|
<?=$editlist;?></select>
Что это?
$editlist .= "<option value='".$data['id']."'$sel>".$data['titl']."</option>";\ Из базы он передает заголовки в <option> что бы они выводились, в выпадающем списке. $id=intval($_POST['id']); echo $id;
Пустоту выводит, это понятно. Меня щас интересует функция редактирования. Данные при нажатие кнопки я получаю, тоесть он выводит их из БД в форму, но когда я их правлю и отправляю то в базу они не доходят. Добавлено через 6 дней, 3 часа, 27 минут и 33 секунды:Вопрос такой, изменен скрипт. но почему то не отправляет данные в БД. Подскажите пожалуйста, может я чет не вижу. function puterror($message) { exit("<p>$message</p>"); }
if(empty($_POST['titl'])) links("Отсутствует заголовок"); if(empty($_POST['body'])) links("Содержание не введено"); if(empty($_POST['date'])) links("Содержание не введено"); if(empty($_POST['avtor'])) links("Содержание не введено"); if(!preg_match("|^[\d]*$|",$_POST['id'])) puterror("Ошибка при обращении к блоку новостей"); if (!get_magic_quotes_gpc()) { $_POST['titl'] = mysql_escape_string($_POST['titl']); $_POST['body'] = mysql_escape_string($_POST['body']); $_POST['date'] = mysql_escape_string($_POST['date']); $_POST['avtor'] = mysql_escape_string($_POST['avtor']); }
$query = "UPDATE news SET titl='".$_POST['titl']."', body='".$_POST['body']."', date='".$_POST['date']."', avtor='".$_POST['avtor']."', WHERE id=".$_POST['id'].""; if(mysql_query($query)) header("Location: ".$_GET['page']); else links("Ошибка при редактировании новостей (база данных)");
echo "UPDATE news SET titl='".$_POST['titl']."', body='".$_POST['body']."', date='".$_POST['date']."', avtor='".$_POST['avtor']."', WHERE id=".$_POST['id']."";
function links($msg) { echo "<p>".$msg."</p>"; echo "<p><a href=# onClick='history.back()'>Вернуться к правке новостей</a></p>"; echo "<p><a href=index.php>Администрирование новостей</a></p>"; exit(); }
|
|
« Последнее редактирование: 09-12-2010 10:17 от Lunik »
|
Записан
|
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #3 : 09-12-2010 10:40 » |
|
а COMMIT там разве не нужен?
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
baldr
|
|
« Ответ #4 : 09-12-2010 11:17 » |
|
В mysql по умолчанию включен autocommit mode, так что,допустим, не нужен, хотя... Lunik, а руками запрос выполняется? Именно в том виде, в каком ты его пытаешься из скрипта выполнить?
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #5 : 09-12-2010 11:37 » |
|
baldr, меня просто смущает выражение "в базу они не доходят". То есть, ошибок нет... и данных нет. Может автокоммит отключен?
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
baldr
|
|
« Ответ #6 : 09-12-2010 11:54 » |
|
PooH, да скорее всего, в запросе синтаксическая ошибка и он не выполняется... Вот мне и хочется узнать как он выглядит..
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Lunik
Постоялец
Offline
|
|
« Ответ #7 : 09-12-2010 12:24 » |
|
PooH, да скорее всего, в запросе синтаксическая ошибка и он не выполняется... Вот мне и хочется узнать как он выглядит..
Если бы была ошибка в синтаксисе, я бы ее видел. Но у меня даже не выходит <?php error_reporting(E_ALL & ~E_NOTICE); ?> Не говоря о том, что я пытаюсь вызвать запро "UPDATE `news` SET `titl` = ".mysql_real_escape_string($_POST['titl'])." , `body` = ".mysql_real_escape_string($_POST['body']).", `date` = ".mysql_real_escape_string($_POST['date']).", `avtor` = ".mysql_real_escape_string($_POST['avtor'])." WHERE `id` = '".$_POST['id']."';";
Даже тут ничего не выводит.
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #8 : 09-12-2010 13:27 » |
|
Может что-то не так с условием в запросе и просто не находит нужную запись в БД? Помотри конечный текст запроса (echo $query;) и попробуй (как советует baldr) выполнить запрос "руками" - в консоли или другой программе.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #9 : 09-12-2010 13:59 » |
|
а "левые" кавычки это нормально?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
baldr
|
|
« Ответ #10 : 09-12-2010 14:02 » |
|
Если бы была ошибка в синтаксисе, я бы ее видел. Но у меня даже не выходит <?php error_reporting(E_ALL & ~E_NOTICE); ?> Ну, во-первых, я говорил про ошибку в синтаксисе SQL-запроса, а её тебе PHP может и не показать. Флаги, которые ты ставишь ставят уровень вывода логов для PHP. А куда выводятся ошибки? В файл или на экран? Чему равны переменные PHP display_errors, log_errors, error_log ? Добавлено через 1 минуту и 11 секунд:а "левые" кавычки это нормально?
Sla, да, это нормально. Это сообщает MySQL что в кавычках находятся не ключевые слова языка, а имена полей/таблиц/баз
|
|
« Последнее редактирование: 09-12-2010 14:03 от baldr »
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
RXL
|
|
« Ответ #11 : 09-12-2010 14:05 » |
|
Запятая в запросе лишняя - перед WHERE.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
baldr
|
|
« Ответ #12 : 09-12-2010 14:06 » |
|
блин... Конечно же я прав.. Ошибка в SQL-синтаксисе.. Lunik, в этом куске: avtor='".$_POST['avtor']."', WHERE id=".$_POST['id']."";
запятую перед WHERE убери.
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
RXL
|
|
« Ответ #13 : 09-12-2010 14:10 » |
|
Называется программирование копипастом...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Lunik
Постоялец
Offline
|
|
« Ответ #14 : 09-12-2010 15:33 » |
|
Называется программирование копипастом...
копировал запрос с phpmyadmin - хоть запрос проверить. Зап ятую убрал, все равно не работает.
|
|
« Последнее редактирование: 09-12-2010 17:29 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #15 : 09-12-2010 17:06 » |
|
Перед if(mysql_query($query)) header("Location: ".$_GET['page']); else links("Ошибка при редактировании новостей (база данных)"); вставляем echo "<!-- $query -->\n"; die; Результат в студию.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|