表单更新包含';未被用户PHP查询更新

表单更新包含';未被用户PHP查询更新,php,html,phpmyadmin,Php,Html,Phpmyadmin,我需要一些关于PHP查询的帮助。我本质上是让用户在登录后有机会更新自己的详细信息。表格: <div class="grid-2"> <p><b>UPDATE MY DETAILS</b></p> <form action ="includes/update.inc.php" method ="post"> <label>S.Name</label>

我需要一些关于PHP查询的帮助。我本质上是让用户在登录后有机会更新自己的详细信息。表格:

<div class="grid-2"> 
    <p><b>UPDATE MY DETAILS</b></p>
        <form action ="includes/update.inc.php" method ="post">
        <label>S.Name</label>
        <input name="update-surname" type="text" placeholder="Enter new surname...">
        <label>Address</label>
        <input name="update-houseno" type="text" placeholder="Enter house no' or name...">
        <input name="update-ln1" type="text" placeholder="1st Line of Address...">
        <input name="update-town" type="text" placeholder="Town...">
        <input name="update-county" type="text" placeholder="County...">
        <input name="update-postcode" type="text" placeholder="Postcode...">
        <label>Contact Number</label>
        <input name="update-number" type="text" placeholder="Contact Number...">
        <label>Email</label>
        <input name="update-email" type="text" placeholder="Email...">

        <input type="submit" name="update-details" value="Update">
    </form>
</div>

更新我的详细信息

美国名字 地址 联系电话 电子邮件
我目前拥有的php代码,如果用户没有在框中输入任何内容,它会用空白输入更新数据库(我不希望出现这种情况),如果没有输入,我不希望表中的字段被触动

    <?php
// Here we check whether the user got to this page by clicking the proper button.
if (isset($_POST['update-details'])) {

      require 'dbh.inc.php';

// We grab all the data which we passed from the signup form so we can use it later.
    $surname = $_POST['update-surname'];
    $houseno = $_POST['update-houseno'];
    $ln1 = $_POST['update-ln1'];
    $town = $_POST['update-town'];
    $county = $_POST['update-county'];
    $postcode = $_POST['update-postcode'];
    $email = $_POST['update-email'];
    $number = $_POST['update-number'];

      // We validate the updated email is correct if email has been updated. 
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../after-login.php?error=invalidmail=");
    exit();
    }

    $query = "UPDATE `tblMember` SET `fldSName` = '$surname', `fldTelNum` = '$number', `fld1stLnAddress` = '$houseno', `fld2ndLnAddress` = '$ln1', `fld3rdLnAddress` = '$town', `fldCounty` = '$county', `fldPostcode` = '$postcode', `fldEmailAddress` = '$email' WHERE `tblMember`.`fldMemberID` = 1";


    $result = $conn->query($query) or die ("error");
}
?>

您需要检查数据输入字段是否为非空/有效

避免空白字段更新的步骤:

1) 取一个空数组

2) 检查每个发布的变量是否有效,如果有效,请将其追加到数组中

3) 检查数组是否为空

4) 如果不是空的,则激发SQL

<?php
// Here we check whether the user got to this page by clicking the proper button.
if (isset($_POST['update-details'])) {

      require 'dbh.inc.php';

// We grab all the data which we passed from the signup form so we can use it later.
    $ln1 = $_POST['update-surname'];
    $houseno = $_POST['update-houseno'];
    $ln1 = $_POST['update-ln1'];
    $town = $_POST['update-town'];
    $county = $_POST['update-county'];
    $postcode = $_POST['update-postcode'];
    $email = $_POST['update-email'];
    $number = $_POST['update-number'];

      // We validate the updated email is correct if email has been updated. 
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../after-login.php?error=invalidmail=");
    exit();
    }

    $update = [];
    if (! empty($surname)) {
        $update['fldSName'] = "fldSName = '".$surname ."'";
    }

    if (! empty($number)) {
        $update['fldTelNum'] = "fldTelNum='".$number ."'";
    }

    if (! empty($houseno)) {
        $update['fld1stLnAddress'] = "fld1stLnAddress='".$houseno ."'";
    }

    if (! empty($ln1)) {
        $update['fld2ndLnAddress'] = "fld2ndLnAddress='".$ln1 ."'";
    }

    if (! empty($town)) {
        $update['fld3rdLnAddress'] = "fld3rdLnAddress='".$town ."'";
    }

    if (! empty($county)) {
        $update['fldCounty'] = "fldCounty='".$county ."'";
    }
    if (! empty($postcode)) {
        $update['fldPostcode'] = "fldPostcode='".$postcode ."'";
    }
    if (! empty($email)) {
        $update['fldEmailAddress'] = "fldEmailAddress='".$email ."'";
    }


    if (! empty($update)) {
        $query = "UPDATE `tblMember` SET ";
        $query .= implode(', ', $update);
        $query .= " WHERE `tblMember`.`fldMemberID` = 1";
        $result = $conn->query($query) or die ("error");
    }
}
?>

您需要检查数据输入字段是否为非空/有效

避免空白字段更新的步骤:

1) 取一个空数组

2) 检查每个发布的变量是否有效,如果有效,请将其追加到数组中

3) 检查数组是否为空

4) 如果不是空的,则激发SQL

<?php
// Here we check whether the user got to this page by clicking the proper button.
if (isset($_POST['update-details'])) {

      require 'dbh.inc.php';

// We grab all the data which we passed from the signup form so we can use it later.
    $ln1 = $_POST['update-surname'];
    $houseno = $_POST['update-houseno'];
    $ln1 = $_POST['update-ln1'];
    $town = $_POST['update-town'];
    $county = $_POST['update-county'];
    $postcode = $_POST['update-postcode'];
    $email = $_POST['update-email'];
    $number = $_POST['update-number'];

      // We validate the updated email is correct if email has been updated. 
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../after-login.php?error=invalidmail=");
    exit();
    }

    $update = [];
    if (! empty($surname)) {
        $update['fldSName'] = "fldSName = '".$surname ."'";
    }

    if (! empty($number)) {
        $update['fldTelNum'] = "fldTelNum='".$number ."'";
    }

    if (! empty($houseno)) {
        $update['fld1stLnAddress'] = "fld1stLnAddress='".$houseno ."'";
    }

    if (! empty($ln1)) {
        $update['fld2ndLnAddress'] = "fld2ndLnAddress='".$ln1 ."'";
    }

    if (! empty($town)) {
        $update['fld3rdLnAddress'] = "fld3rdLnAddress='".$town ."'";
    }

    if (! empty($county)) {
        $update['fldCounty'] = "fldCounty='".$county ."'";
    }
    if (! empty($postcode)) {
        $update['fldPostcode'] = "fldPostcode='".$postcode ."'";
    }
    if (! empty($email)) {
        $update['fldEmailAddress'] = "fldEmailAddress='".$email ."'";
    }


    if (! empty($update)) {
        $query = "UPDATE `tblMember` SET ";
        $query .= implode(', ', $update);
        $query .= " WHERE `tblMember`.`fldMemberID` = 1";
        $result = $conn->query($query) or die ("error");
    }
}
?>

对于第一个问题,您可以按以下方式编辑查询:

UPDATE tblMember
SET fldSName = IF('$surname' = '', fldSName, '$surname'),
    fldTelNum = IF('$number' = '', fldTelNum, '$number'),
    fld1stLnAddress = IF('$houseno' = '', fld1stLnAddress, '$houseno'),
    fld2ndLnAddress = IF('$ln1' = '', fld2ndLnAddress, '$ln1'),
    fld3rdLnAddress = IF('$town' = '', fld3rdLnAddress, '$town'),
    fldCounty = IF('$county' = '', fldCounty, '$county'),
    fldPostcode = IF('$postcode' = '', fldPostcode, '$postcode'),
    fldEmailAddress = IF('$email' = '', fldEmailAddress, '$email'),
WHERE  
    `tblMember`.`fldMemberID` = 1  
第二个问题是,您必须删除die()并在登录.php之后重定向到

 $conn->query($query);
 header("Location: ../after-login.php");

首先,您可以将查询编辑为

UPDATE tblMember
SET fldSName = IF('$surname' = '', fldSName, '$surname'),
    fldTelNum = IF('$number' = '', fldTelNum, '$number'),
    fld1stLnAddress = IF('$houseno' = '', fld1stLnAddress, '$houseno'),
    fld2ndLnAddress = IF('$ln1' = '', fld2ndLnAddress, '$ln1'),
    fld3rdLnAddress = IF('$town' = '', fld3rdLnAddress, '$town'),
    fldCounty = IF('$county' = '', fldCounty, '$county'),
    fldPostcode = IF('$postcode' = '', fldPostcode, '$postcode'),
    fldEmailAddress = IF('$email' = '', fldEmailAddress, '$email'),
WHERE  
    `tblMember`.`fldMemberID` = 1  
第二个问题是,您必须删除die()并在登录.php之后重定向到

 $conn->query($query);
 header("Location: ../after-login.php");


关于第二部分(因此页面不会刷新或重定向),您需要ajax请求。Hi@pr1nc3,因此页面变为空白,并且在URL中,它在登录后会从
变为
update.inc.php
,在查询中,我会在login.php
页面上直接放置一个标题以保留在
页面上吗?只需将标题放在页面中,以便它知道提交后要做什么。您不能在查询中放置标题,只需在末尾执行即可。您可以使用
value
属性将当前值插入表单输入,而不是放置空白字段。这样做的好处是可以告知用户当前值是什么,而无需更改查询。对于空白页,尝试在成功后执行<代码>标题(“位置:…/登录后.php”)<代码>update@JoseFG他/她对您的第二部分的查询是正确的(因此页面不会刷新或重定向)您需要ajax请求。Hi@pr1nc3,这样页面会变为空白,并且在URL中,它会从登录后的
.php
更改为
update.inc.php
,在查询中,我会在登录后的
页面上直接放置一个标题吗?只需将标题放在页面中,这样它就知道提交后要做什么。您不能在查询中放置标题,只需在末尾执行即可。您可以使用
value
属性将当前值插入表单输入,而不是放置空白字段。这样做的好处是可以告知用户当前值是什么,而无需更改查询。对于空白页,尝试在成功后执行<代码>标题(“位置:…/登录后.php”)<代码>update@JoseFG他/她的查询正确。这可能导致最后一个逗号出现SQL语法错误。请检查。删除,添加新行时忘记。非常感谢,欢迎光临。如果用户不发布
fldEmailAddress
,怎么办?
fldPostcode
将是最后一个字段。只是个奇怪的问题。不怀疑您的答案:)然后根据代码,在删除我的第一个电子邮件验证检查(如果框留空,它不喜欢在那里)后,它将在验证电子邮件hi@pr1nc3的上一个检查中退出因此,我尝试了这段代码,并在“更新”按钮上单击它,在登录.php后确实将我重定向到同一页面
,但它似乎没有更新我的任何表。现在我将进行另一项检查,这可能导致最后一个逗号出现SQL语法错误。请检查。删除,添加新行时忘记。非常感谢,欢迎光临。如果用户不发布
fldEmailAddress
,怎么办?
fldPostcode
将是最后一个字段。只是个奇怪的问题。不怀疑您的答案:)然后根据代码,在删除我的第一个电子邮件验证检查(如果框留空,它不喜欢在那里)后,它将在验证电子邮件hi@pr1nc3的上一个检查中退出因此,我尝试了这段代码,并在“更新”按钮上单击它,在登录.php后确实将我重定向到同一页面
,但它似乎没有更新我的任何表。我现在再要一张支票。你好,学生。非常感谢你的帮助。所以我在
update.inc.php
页面中再次尝试了这段代码,它将我带到了一个新页面,页面上有“error”字样。我再次尝试删除我的第一个电子邮件验证行,看看这是否有帮助,但没有运气。是否有任何简单的方法,我可以找出,特别是什么错误,它造成的?成员id=1的原因是硬编码的,因为我这样做只是为了让我的项目至少有基本的工作(我知道这应该取决于谁登录),但我还没有做到这一点:)@K.Haydock,我已经更新了我的答案。你现在能查一下最新的密码吗。应该可以。我刚刚重试了你的代码,在最后一个if语句块后放置了一个头重定向,效果很好。然而,如果我根本不放任何电子邮件,它就不喜欢它,我想这是我在页面顶部的代码:'(如果您没有放置电子邮件,您在查询之前进行的电子邮件检查将在其他任何事情发生之前退出脚本。您好@pr1nc3,我明白了,那么我是否应该将该代码剪切并粘贴到有关电子邮件的If语句下方?:-)非常感谢大家的帮助和投入!Hi@Studio非常感谢你们的帮助。所以我再次在我的
update.inc.php
页面中尝试了这段代码,它让我进入了一个