【问题标题】:Update SQL data via PHP/HTML form通过 PHP/HTML 表单更新 SQL 数据
【发布时间】:2015-02-28 16:40:00
【问题描述】:

我有以下表单,它是一个带有选项的选择,用户在其中选择一个选项,例如电子邮件、地址等。输入新数据以更新现有字段,这是通过将字段匹配到名字。

    <form action="sUpdateResponse.php" method="post">

    <select id="sRetrieveUpdate" name="sRetrieveUpdate" onchange=";">
       <option value='' disabled selected style='display:none;'>Select Field To Update</option>
       <option value="address">Address</option>
       <option value="email">Email</option>
    </select><br>

    <div id="box-1"><input type="text" id="address" name="sUpdateAddress" placeholder="Enter New Address..." 
        onClick="$(this).removeClass('placeholderclass')" class="dateclass placeholderclass"></input></div>

    <div id="box-2"><input type="text" id="email" name="sUpdateEmail" placeholder="Enter New Email..." 
        onClick="$(this).removeClass('placeholderclass')" class="dateclass placeholderclass"></input></div>

            For the staff entry
            where the name matches...<br>
    <input type="text" placeholder="Enter Forename..." name="sUpdateFN">
    <input type="text" placeholder="Enter Surname..." name="sUpdateSN">
        <input type="submit" value="Update Record" name="sRetrieveUpdate">
        </form>  

然后响应检查是否选择了地址或电子邮件,并更新名字和姓氏与输入的匹配的位置。

    if(isset($_POST['sUpdateEmail']) && isset($_POST['sUpdateFN']) && isset($_POST['sUpdateSN']))
            $query = "UPDATE staffData SET sEmail = '".$_POST['sUpdateEmail']."' WHERE sFN = '".$_POST['sUpdateFN']."' AND sSN = '".$_POST['sUpdateSN']."'";
            $result = mysql_query($query);


  if(isset($_POST['sUpdateAddress']) && isset($_POST['sUpdateFN']) && isset($_POST['sUpdateSN']))
        $query = "UPDATE staffData SET sAddress = '".$_POST['sUpdateAddress']."' WHERE sFN = '".$_POST['sUpdateFN']."' AND sSN = '".$_POST['sUpdateSN']."'";
        $result = mysql_query($query);

这里唯一的问题是,当由于某种原因更新一个字段时,另一个字段变为空,知道哪里出错了吗?

【问题讨论】:

  • 这不是唯一的问题,您应该使用mysqli 和准备好的语句。这里有很多安全问题。
  • @ArianFaurtosh 这永远不会被使用,所以安全不是问题,只是试图让这个概念发挥作用

标签: php html sql forms


【解决方案1】:

你需要在你的代码块周围加上括号,否则第二行总是会被执行。

这里的问题是,即使 updateAddress 为空,变量仍然会被设置。所以isset 是一个不好的方法来测试它是否为空。

所以你应该添加!empty()!= ''(要使用empty()你必须有一个高于5.4的PHP版本)

这是一个例子:

if(isset($_POST['sUpdateEmail']) && $_POST['sUpdateEmail'] != '' && isset($_POST['sUpdateFN']) && isset($_POST['sUpdateSN'])) {
  $query = "UPDATE staffData SET sEmail = '".$_POST['sUpdateEmail']."' WHERE sFN = '".$_POST['sUpdateFN']."' AND sSN = '".$_POST['sUpdateSN']."'";
  $result = mysql_query($query);
}


if(isset($_POST['sUpdateAddress']) && $_POST['sUpdateAddress'] != '' && isset($_POST['sUpdateFN']) && isset($_POST['sUpdateSN'])){
  $query = "UPDATE staffData SET sAddress = '".$_POST['sUpdateAddress']."' WHERE sFN = '".$_POST['sUpdateFN']."' AND sSN = '".$_POST['sUpdateSN']."'";
  $result = mysql_query($query);
}

【讨论】:

  • 这并不能解决问题。更新电子邮件时,地址会自行删除,反之亦然。
  • 是的,我刚想出来啊哈,你有什么建议?
  • 如果你有足够新的 php 版本,要么使用 if!empty($_POST['sUpdateAddress']),要么你可以使用 $_POST['sUpdateAddress']) != ''
  • 如果它的邮箱不需要更新怎么办?
  • @ili 看看我在回答中发布的示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 2016-06-21
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多