我正在尝试创建一个用户可以编辑信息的页面。
我可以用数组中的值填充表单并更新它们,但是,当它被保存并使用不同的数组信息再次访问时,它显示以前的表单数据。我看过在提交页面后清除缓存并将数组设置为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比较陌生,除了这个问题,我已经能够解决我遇到的每一个问题!
我知道这可能不是一个真正的答案,但我想指出一些事情:
- 你的ID应该被强制转换为INT,因为现在你很容易被注入。
所以应该是$id = intval($_GET['id']);
-
你的ID是如何传递给函数的?它在外部,没有作为参数传递,也没有全局化。我相信这可能是问题所在,因为您的查询将始终没有和ID用作条件。试一试:
get_edit_event_details ($ 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;?>
请记住,这仍然不是完美的代码,我知道,有点像我的了:)。您可能需要检查$_GET['id']是否也设置了,在函数内部或外部。