Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [PHP] Не понятки со скриптом  (Прочитано 19318 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Lunik
Постоялец

ru
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 02-12-2010 19:44 » 

<?=$editlist;?></select>

Что это?


$id=intval($_POST['id']);
echo $id;
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Lunik
Постоялец

ru
Offline 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
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #3 : 09-12-2010 10:40 » 

а COMMIT там разве не нужен?
Записан

Удачного всем кодинга! -=x[PooH]x=-
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #4 : 09-12-2010 11:17 » 

В mysql по умолчанию включен autocommit mode, так что,допустим, не нужен, хотя...
Lunik, а руками запрос выполняется? Именно в том виде, в каком ты его пытаешься из скрипта выполнить?
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #5 : 09-12-2010 11:37 » 

baldr,  меня просто смущает выражение "в базу они не доходят". То есть, ошибок нет... и данных нет. Может автокоммит отключен?
Записан

Удачного всем кодинга! -=x[PooH]x=-
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #6 : 09-12-2010 11:54 » 

PooH, да скорее всего, в запросе синтаксическая ошибка и он не выполняется... Вот мне и хочется узнать как он выглядит..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Lunik
Постоялец

ru
Offline 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
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 09-12-2010 13:27 » 

Может что-то не так с условием в запросе и просто не находит нужную запись в БД?
Помотри конечный текст запроса (echo $query;) и попробуй (как советует baldr) выполнить запрос "руками" - в консоли или другой программе.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 09-12-2010 13:59 » 

а "левые" кавычки это нормально?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 09-12-2010 14:05 » 

Запятая в запросе лишняя - перед WHERE.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #12 : 09-12-2010 14:06 » 

блин... Конечно же я прав.. Ошибка в SQL-синтаксисе..
Lunik, в этом куске:
Код:
avtor='".$_POST['avtor']."',
            WHERE id=".$_POST['id']."";
запятую перед WHERE убери.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 09-12-2010 14:10 » 

Называется программирование копипастом...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Lunik
Постоялец

ru
Offline Offline

« Ответ #14 : 09-12-2010 15:33 » 

Называется программирование копипастом...
копировал запрос с phpmyadmin -  хоть запрос проверить.

Запятую убрал, все равно не работает.
« Последнее редактирование: 09-12-2010 17:29 от Алексей1153++ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 09-12-2010 17:06 » new

Перед

Код: (PHP)
if(mysql_query($query)) header("Location: ".$_GET['page']);
  else links("Ошибка при редактировании новостей (база данных)");

вставляем

Код: (PHP)
echo "<!--  $query  -->\n";
die;

Результат в студию.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines