Php 用旧变量填充的表单值

Php 用旧变量填充的表单值,php,forms,caching,Php,Forms,Caching,我正在尝试创建一个用户可以编辑信息的页面 我可以用数组中的值填充表单并更新它们,但是,当保存表单并再次使用不同的数组信息访问表单时,它会显示以前的表单数据。我已经考虑过在提交页面后清除缓存并将数组设置为NULL,但这两种方法都不起作用 以下是我所拥有的: $id = ($_GET['id']); function get_edit_event_details() { global $connection; $query = 'SELECT * FROM events

我正在尝试创建一个用户可以编辑信息的页面

我可以用数组中的值填充表单并更新它们,但是,当保存表单并再次使用不同的数组信息访问表单时,它会显示以前的表单数据。我已经考虑过在提交页面后清除缓存并将数组设置为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”,但也没有成功)


我知道这可能不是一个真正的答案,但我想指出一些事情:

  • 你的ID应该被转换为INT,因为现在你很容易被注射
    因此,它应该是
    $id=intval($\u GET['id'])
  • 您的ID是如何传递给函数的?它在外部,没有作为参数传递,也没有全局化。我相信这可能是一个问题,因为您的查询将始终没有ID作为条件。尝试:

    获取\u编辑\u事件\u详细信息($id){}

  • 可能是个人喜好,但使用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;?>
    
    function get\u edit\u event\u详细信息($\u get['id'])
    {
    全球美元连接;
    $id=intval($_GET['id']);
    $query=“从id=“$id”的事件中选择*;
    $result=mysql\u query($query,$connection)或trigger\u error('query error:'.mysql\u error());
    如果(mysql_num_rows($result)>0)
    {
    返回mysql\u fetch\u数组($result);
    }
    其他的
    {
    返回FALSE;
    }
    }
    如果($details=get\u edit\u event\u details($\u get['id']):?>
    
    我知道这可能不是一个真正的答案,但我想指出一些事情:

  • 您的ID应该强制转换为INT,因为现在您很容易被注射。
    因此,它应该是
    $id=intval($\u GET['id']);
  • 您的ID是如何传递到函数的?它在函数外部,没有作为参数传递,也没有全局传递。我相信这可能是问题所在,因为您的查询将始终没有ID作为条件。请尝试:

    获取\u编辑\u事件\u详细信息($id){}

  • 可能是个人喜好,但使用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;?>
    
    function get\u edit\u event\u详细信息($\u get['id'])
    {
    全球美元连接;
    $id=intval($_GET['id']);
    $query=“从id=“$id”的事件中选择*;
    $result=mysql\u query($query,$connection)或trigger\u error('query error:'.mysql\u error());
    如果(mysql_num_rows($result)>0)
    {
    返回mysql\u fetch\u数组($result);
    }
    其他的
    {
    返回FALSE;
    }
    }
    如果($details=get\u edit\u event\u details($\u get['id']):?>
    
    如果我理解正确,您可以尝试添加属性autocomplete=“off”到表单元素。不确定这是否能在所有浏览器上运行。谢谢Jemaclus,但我尝试过,但仍然没有成功。如果表单提交,表单将更改值,但否则它将保留一个旧的$id变量。confirm_query执行:函数confirm_query($result_set){if(!$result_set){die(“数据库查询失败:”.mysql\u error());}啊,我明白了。所以如果有帖子,你只需要从mysql\u fetch\u数组中加载$details。如果($\u GET){}将整个过程包装起来。如果我理解正确,你可以尝试添加autocomplete=“off”属性“到表单元素。不确定这是否在所有浏览器上都有效。谢谢Jemaclus,但我尝试过,但仍然没有成功。表单在提交表单时将更改值,但在其他情况下它将保留旧的$id变量。confirm_query执行:函数confirm_query($result_set){if(!$result_set){die”(数据库查询失败:“.mysql_error());}啊,我明白了。所以,如果有帖子,您只需要从mysql_fetch_数组加载$details。将整个过程包装在if($_GET){行得通!谢谢Damien。我想是因为$\u GET不在函数内。行得通!谢谢Damien。我想是因为$\u GET不在函数内。