繁体   English   中英

PHP 和 MySQL 表格,我做错了什么?

[英]PHP and MySQL form, what am I doing wrong?

我有一个表,其中已经有用户 ID,但是缺少一些信息,这就是我需要用户自己输入的地方。 使用表格的 URL 我有他们的 ID...winnerpage.php?ID=123

我无法让代码正常工作。 任何帮助都会很棒!

这是获胜者页面上的代码。php

<form enctype="multipart/form-data" action="winnerpage.php" method="POST">
ID: <input name="ID" type="text" value="<?=$ID?>" /><br/>
First Name: <input type="text" name="FN"><br />
Last Name: <input type="text" name="LN"><br />
Email: <input type="text" name="EM"><br />
Phone: <input type="text" name="PH"><br />
<input type="submit" name="edit" value="edit"></form> <br>

<?
require_once('mysql_serv_inc.php');

$conn = mysql_connect("$mysql_server","$mysql_user","$mysql_pass"); 
if (!$conn) die ("ERROR"); 
mysql_select_db($mysql_database,$conn) or die ("ERROR"); 

if(isset($_POST['edit']))
{
$sID        =    addslashes($_POST['ID']);
$sFN        =    addslashes($_POST['FN']);
$sLN        =    addslashes($_POST['LN']);
$sEM        =    addslashes($_POST['EM']);
$sPH        =    addslashes($_POST['PH']);


mysql_query('UPDATE winner SET FN=$sFN, LN=$sLN, EM=$sEM, PH=$sPH 
             WHERE ID=$sID') or die (mysql_error());

echo 'Updated!';
}

$query = "select * from winner order by ID";
$result = mysql_query($query);
?>

<?
   while ($link=mysql_fetch_array($result))
   {
     echo 'Unique ID - Completion Time - First Name - Last Name - Email - Phone<br/>'.$link[ID].' -' .$link[FN].' - '.$link[LN].' - '.$link[EM].' - '.$link[PH].'<br>';
     }
?>

1) ID: <input name="ID" type="text" value="<?=$ID?>" /><br/>
你从哪里得到那个$ID?
您是在做类似$_GET['ID']的事情,还是依赖 safe_mode 开启? (从您提供的代码中不清楚)
(更好的是, if(isset($_GET['ID'])) { $ID = (int)$_GET['ID'] }

2)请不要那样做。 不要使用addlashes()。 使用 mysql_real_escape_string() ,或者更好的是,使用准备好的语句。 在查询的 escaping 数据中,Addslashes 并不完全可靠。

sID    =    (int)$_POST['ID'];
$sFN   =    mysql_real_escape_string($_POST['FN']);
$sLN   =    mysql_real_escape_string($_POST['LN']);
$sEM   =    mysql_real_escape_string($_POST['EM']);
$sPH   =    mysql_real_escape_string($_POST['PH']);

此外,在每个输入字段中添加'value=""' (非强制性)

3)在查询中封装值:

mysql_query("UPDATE winner SET FN='".$sFN."', LN='".$sLN."', EM='".$sEM."', PH='".$sPH."' WHERE ID='".$sID."'") or die (mysql_error());

也许尝试:

mysql_query("UPDATE winner SET FN='$sFN', LN='$sLN', EM='$sEM', PH='$sPH' WHERE ID=$sID") or die (mysql_error());
mysql_query('UPDATE winner SET FN=$sFN, LN=$sLN, EM=$sEM, PH=$sPH WHERE ID=$sID')

查询是用单引号封装的,所以里面的变量不会被解析。

乍一看,我会说你需要:

1) 在您插入表中的一些值周围加上引号(例如任何字符串)

2)当您尝试在末尾回显字段名称时,请在字段名称周围加上引号(例如$link['ID']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM