PHP和MySQL形式,我做错了什么?

时间:2011-06-12 21:10:08

标签: php mysql html

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

我遇到麻烦让代码工作。任何帮助都会很棒!

这是winspage.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>';
     }
?>

4 个答案:

答案 0 :(得分:1)

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

2)请不要那样做。不要使用addslashes()。使用mysql_real_escape_string()或更好的prepared statements. 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());

答案 1 :(得分:1)

也许试试:

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

答案 2 :(得分:0)

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

查询由单引号封装,因此不会解析内部变量。

答案 3 :(得分:0)

乍一看我会说你需要:

1)引用标记围绕您插入表格的某些值(例如任何字符串)

2)当你试图在结尾回显它们时,引用标记围绕着字段的名称(例如$link['ID']