php更新记录没有';由于查找变量以某种方式被删除,因此无法工作


php update record doesn't work due to lookup variable somehow being dropped

所以我在构建订阅系统时遇到了一个挑战。我使用一个简单的登录php页面来根据DB验证用户的用户名和密码,一旦通过身份验证,脚本就会创建一个安全会话,并调用edit_subscription.php文件,并通过Url传递用户的ID。

edit_subscription.php文件获取ID并使用MYsql提取用户信息并将他们的信息加载到表单中。然后,用户可以编辑或修改他们的订阅详细信息,并按下提交按钮更新数据库。

除了将mysql更新回数据库之外,一切都正常。我已经设法将问题缩小到ID变量如果我将变量硬编码到update命令中,它就会工作,数据库也会更新如果我将ID硬编码到update命令中使用的变量中,它会一直工作到某个点。如果我把那个硬编码的变量移到第42行前面,那么update命令将不再工作。

我认为这与post命令有关,但即使我将旧ID加载到一个隐藏的表单中,并尝试将其重新发布以用于更新命令,它仍然不起作用,并将变量视为空。

我已经试了好几个小时来让它发挥作用,但似乎能让它继续下去。

任何人都对这个问题有任何建议(请不要评论安全性或最佳实践,除非它与所描述的问题特别相关,谢谢)

    <? 
$id = htmlspecialchars($_GET['ID']);
$username="****";
$database="****";
$host="****";
$pass ="****";
mysql_connect($host,$username,$pass);
@mysql_select_db($database) or die( "Unable to select database");
$result = mysql_query("SELECT * FROM  `****`.`****` WHERE  `Subscriber ID` = '$id' LIMIT 1");
$name_old=mysql_result($result,0,"Name");
$address1_old=mysql_result($result,0,"Address 1");
$address2_old=mysql_result($result,0,"Address 2");
$city_old=mysql_result($result,0,"City");
$prov_old=mysql_result($result,0,"Prov");
$postal_old=mysql_result($result,0,"Postal");
$country_old=mysql_result($result,0,"Country");
$email_old=mysql_result($result,0,"Email");
$qty_old=mysql_result($result,0,"qty");
$status_old=mysql_result($result,0,"Status");
$ezine_old=mysql_result($result,0,"Ezine");
$mailout_old=mysql_result($result,0,"Mailout");
$password_old=mysql_result($result,0,"Password");
$nameErr = $emailErr = $passwordErr = "";
$name=$_POST['name'];
$email=$_POST['email'];
$address1=$_POST['address1'];
$address2=$_POST['address2'];
$city=$_POST['city'];
$province=$_POST['prov'];
$postal=$_POST['postal'];
$country=$_POST['country'];
$password=$_POST['password'];    
$mailout=$_POST['mailout'];
$ezine=$_POST['ezine'];
$status="Subscribed";
$qty=$_POST['qty'];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["password"])) {
        $passwordErr = "* Password is required";
     }
     if (empty($_POST["name"])) {
         $nameErr = "* Name is required";
     } else {
         $name = test_input($_POST["name"]);
         if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
             $nameErr = "* Invalid Characters"; 
        }
     }
    if(isset($_POST['mailout'])){}
else{
    $mailout="NO";
}   
if(isset($_POST['ezine'])){}
else{
    $ezine="NO";
}     
     if (empty($_POST["email"])) {
         $emailErr = "* Email is required";
     } else {
         $email = test_input($_POST["email"]);
         if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
             $emailErr = "* Invalid email"; 
         } 
     }  
    if($name != NULL AND $nameErr == ""){
          if($email != NULL AND $emailErr == ""){
              if($password != NULL AND $passwordErr == ""){
mysql_query("UPDATE `Subscribers` SET
      `Name` ='$name',
      `Email` =  '$email',
      `Address 1` =  '$address1',
      `Address 2` =  '$address2',
      `City` =  '$city',
      `Prov` =  '$province',
      `Postal` =  '$postal',
      `Country` =  '$country',
      `Password` =  '$password',
      `qty` =  '$qty',
      `Status` =  '$status',
      `Mailout` =  '$mailout',
      `Ezine` =  '$ezine',
      WHERE `Subscriber ID` = $id");
mysql_close();
                 echo ("<p align='"center'"><font color='"red'">Thank you for updating your subscription, you should receive an email confirmation shortly</font></p>");
              }
          }
     }   
}
function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  <table width="100%" border="0">
    <tr>
      <td width="11%" align="right">Name</td>
      <td width="3%">&nbsp;</td>
      <td width="47%"><input type="text" name="name" value="<?php echo $name_old;?>">
        <font color="red"> <?php echo $nameErr;?></font></td>
      <td width="39%" bgcolor="#CCCCCC"><input type="checkbox" name="ezine" value="YES" 
            <?  if($ezine_old =="YES"){echo "checked";}  ?>>
        Subscribe by email</td>
    </tr>
    <tr>
      <td width="11%" align="right">Address 1</td>
      <td>&nbsp;</td>
      <td width="47%"><input type="text" name="address1" value="<?php echo $address1_old;?>"></td>
      <td bgcolor="#CCCCCC"><input type="checkbox" name="mailout" value="YES" <?  if($mailout_old =="YES"){echo "checked";}  ?>>
        Subscribe by Post&nbsp;</td>
    </tr>
    <tr>
      <td width="11%" align="right">Address 2</td>
      <td>&nbsp;</td>
      <td width="47%"><input type="text" name="address2" value="<?php echo $address2_old;?>"></td>
      <td bgcolor="#CCCCCC"><input type="text" name="qty" value="<?php echo $qty_old;?>" size="5">
        # of copies.</td>
    </tr>
    <tr>
      <td align="right">City</td>
      <td>&nbsp;</td>
      <td><input type="text" name="city" value="<?php echo $city_old;?>"></td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td align="right">Province</td>
      <td>&nbsp;</td>
      <td><input type="text" name="prov" value="<?php echo $prov_old;?>" >
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td align="right">Postal</td>
      <td>&nbsp;</td>
      <td><input type="text" name="postal"value="<?php echo $postal_old;?>"  ></td>
      <td></td>
    </tr>
    <tr>
      <td align="right">Country</td>
      <td>&nbsp;</td>
      <td><input type="text" name="country" value="<?php echo $country_old;?>" ></td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td align="right">Email</td>
      <td>&nbsp;</td>
      <td colspan="2"><input type="text" name="email" value="<?php echo $email_old;?>">
        <font color="red"><?php echo $emailErr;?></font></td>
    </tr>
    <tr>
      <td align="right">Password</td>
      <td>&nbsp;</td>
      <td colspan="2"><input type="password" name="password" value="<?php echo $password_old;?>">
        <font color="red"> <?php echo $passwordErr;?></font></td>
    </tr>
    <tr>
      <td align="right">&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td></td>
    </tr>
    <tr>
      <td align="right">&nbsp;</td>
      <td><img src="images/shim.png" width="20" height="20" /></td>
      <td><input type="Submit" ></td>
      <td>&nbsp;</td>
    </tr>
  </table>
  <p>&nbsp;</p>
</form>

后面有一个逗号Ezine='$ezine',

删除它。你还应该使用mysqli扩展或PDO-sql。mysql_已弃用

正如您所说,该代码有很多错误。。然而,为了满足你的问题,这里有一个简单的答案:

您在更新语句中多留了一个逗号。

`Ezine` =  '$ezine',

以后,请尝试始终检查查询是否通过。

$result = mysql_query(..);
if($result) {
    // it worked
} else {
    // it failed
    echo mysql_error(); // or mysqli_error($link); or $link->error, etc.
}

祝好运