使用$ _POST值更新查询

时间:2014-02-18 19:08:20

标签: php mysql sql post sql-update

我正在尝试使用名为myinfo.php的小型PHP脚本显示用户信息。相关部分如下所示:

    while($return = mysql_fetch_assoc($result)) {
    echo "<form action=UpdateInfo.php method=post>";
    echo "<p id=greeting> Hi ".$return['FirstName'].", below is all of your personal information: </p>";
    echo '<p> First Name: <input type="text" name="firstname" value= "'.$return['FirstName'].'"/></p>';
    echo '<p> Surname: <input type="text" name="surname" value= "'.$return['Surname'].'" /></p>';
    echo '<p> House Number: <input type="number" name="housenumber" value= "'.$return['HouseNumber'].'"/></p>';
    echo '<p> Address Line One: <input type=text name="addressone" value= "'.$return['AddressLineOne'].'" /></p>';
    echo '<p> Address Line Two: <input type=text name="addresstwo" value= "'.$return['AddressLineTwo'].'" /></p>';
    echo '<p> County: <input type=text name="county" value= "'.$return['County'].'" /></p>';
    echo '<p> Phone Number: <input type=number name="phonenumber" value= "' .$return['PhoneNumber'].'" /></p>';
    echo '<p> Email: <input type=email name="email" value= "'.$return['Email'].'" /></p>';
    echo '<p> Username: <input type=text name="username" value= "'.$return['Username'].'" /></p>';
    echo '<p> Password: <input type=password name="password" value= "'.$return['Password'].'" /></p>';
    echo '<p> User Type: <input type="text" name="usertype" value= "'.$return['UserType'].'" /></p>';
    echo '<input id="submit" type="submit" value="Update Info" />';
    echo "</form>";
} 

输入值都预填充了用户自己的信息,因此用户可以编辑输入值,然后单击“更新信息”提交按钮以更新他/她的信息。单击此按钮后,用户将被发送到“updateinfo.php”页面,他们必须确认信息的变化并显示他们将要进行的更改,如下所示:

    echo '<p id="confirmation">Are you sure you wish to make the following changes to your personal information?</p>';
    echo '<form action="CompleteUpdate.php" method="post">';   
    echo "<p>First Name: " . $_POST["firstname"] . "</p>";
    echo "<p>Surname: " . $_POST["surname"] . "</p>";
    echo "<p>House Number: " . $_POST["housenumber"] . "</p>";
    echo "<p>Address Line One: " . $_POST["addressone"] . "</p>";
    echo "<p>Address Line Two: " . $_POST["addresstwo"] . "</p>";
    echo "<p>County: " . $_POST["county"] . "</p>";
    echo "<p>Phone Number: " . $_POST["phonenumber"] . "</p>";
    echo "<p>Email: " . $_POST["email"] . "</p>";
    echo "<p>Username: " . $_POST["username"] . "</p>";
    echo "<p>Password: " . $_POST["password"] . "</p>";
    echo "<p>Usertype: " . $_POST["usertype"] . "</p>";
    echo '<input id="submit" type="submit" value="Update Info" /></form>';
    echo '<form action="CancelUpdate.php"><input id="submit" type="submit" value="Cancel" /></form>';

此处用户现在单击“更新信息”按钮或决定取消更新。如果单击更新信息按钮,则会调用以下PHP脚本:

    $sql=("UPDATE completeinfo SET FirstName='$_POST[firstname]', Surname='$_POST[surname]', AddressLineOne='$_POST[addresslineone]', AddressLineTwo='$_POST[addresslinetwo]', County='$_POST[county]', Email='$_POST[email]', Username='$_POST[username]', Password=SHA1('$_POST[password]'), UserType='$_POST[usertype]' WHERE Username='".$_SESSION['username']."'");

我遇到的问题是更新查询而不是用$ _POST值表示的新值替换旧值,现在它们将它们完全留空。查询确切地知道在我的数据库中编辑的位置,因此我必须假设“where”子句正在工作但由于某种原因$ _POST没有在查询中获取正确的值,即使它在以前的PHP脚本中运行良好。任何想法如何解决这个问题将不胜感激。感谢

2 个答案:

答案 0 :(得分:1)

首先,您应该避免使用 mysql _ 功能(相反,请参阅PDOmysqli
这样,您就可以确保查询安全。

无论如何,您的查询应如下所示:

$sql = "UPDATE completeinfo SET FirstName='".$_POST['firstname']."',
        Surname='".$_POST['surname']."', AddressLineOne='".$_POST['addresslineone']."',
        AddressLineTwo='".$_POST['addresslinetwo']."', County='".$_POST['county']."',
        Email='".$_POST['email']."', Username='".$_POST['username']."',
        Password=SHA1('".$_POST['password']."'), UserType='".$_POST['usertype']."'
        WHERE Username='".$_SESSION['username']."'";

单引号/双引号不要发疯。这只是连接的好方法

此外,在updateinfo.php上,请勿像您一样显示POST数据。而是将它们存储在输入字段中(类型hidden)。这样,数据将被发送到您正在执行sql查询的页面

答案 1 :(得分:1)

在UpdateInfo.php页面上,您只需发送按钮即可创建一个空表单。回显$ _post值到页面是不足以将值传递给下一步,即CompleteUpdate.php。您需要为每个值创建隐藏字段(填充当前值),或者您可以使用填充了当前值的只读文本字段(然后您不必单独回显值)