Значения формы, заполненные старой переменной - PullRequest
2 голосов
/ 01 декабря 2011

Я пытаюсь создать страницу, где пользователи могут редактировать информацию.

Я могу заполнить форму значениями из массива и обновить их, однако, когда она сохраняется и снова посещается с другой информацией о массиве, отображаются предыдущие данные формы. Я посмотрел на очистку кэша и установку массива в NULL после отправки страницы, но ни один из них не сработал!

Вот что у меня есть:

$id = ($_GET['id']);
function get_edit_event_details() {
global $connection;
    $query = 'SELECT * 
        FROM events
        WHERE id = "$id"';
$event_details = mysql_query($query, $connection);
confirm_query($event_details);
return $event_details;
echo $query;
}   
$event_details = get_event_details();
$details = mysql_fetch_array($event_details);

и для заполнения значений формы (я также пробовал autocomplete = "off", который тоже не работал)

<input type="text" name="event_date" id="event_date" size="27" value="<?php echo $details["date"];?>" autocomplete="off" />

Я относительно новичок в PHP и смог решить все проблемы, с которыми столкнулся, кроме этой!

1 Ответ

0 голосов
/ 01 декабря 2011

Я знаю, что, возможно, это не настоящий ответ, но я хотел бы указать на некоторые вещи:

  1. Ваш идентификатор должен быть приведен к INT, так как теперь вы уязвимы для инъекций.
    Итак, должно быть $id = intval($_GET['id']);
  2. Как ваш идентификатор передается в функцию? это снаружи, и не передается в качестве параметра, и не делается глобальным. Я считаю, что это может быть проблемой, так как ваш запрос всегда будет без и ID для использования в качестве условия. Попробуйте с:

    get_edit_event_details ($ ID) {}

  3. Личный вкус может быть, но с использованием 2 функций и внешнего вызова возвращаемого значения, просто чтобы получить результаты, это немного вонючий. Я бы переписал все это как:

    function get_edit_event_details($_GET['id']) 
    {
      global $connection;
      $id = intval($_GET['id']);
      $query = "SELECT * FROM events WHERE id = '$id'";
      $result = mysql_query($query, $connection) or trigger_error('Query error: '.mysql_error());
      if(mysql_num_rows($result) > 0)
      {
       return mysql_fetch_array($result);
      }
      else
      {
        return FALSE;
      }
    }
    
    if($details = get_edit_event_details($_GET['id']) :?>
    <input type="text" name="event_date" id="event_date" size="27" value="<?php echo $details["date"];?>" autocomplete="off" /> 
    <?php endif;?>
    

Имейте в виду, что это все еще не идеальный код, я знаю, мой запах тоже немного :). Возможно, вы захотите проверить, установлен ли $ _GET ['id'] также внутри или снаружи функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...