我正在尝试使用名为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脚本中运行良好。任何想法如何解决这个问题将不胜感激。感谢
答案 0 :(得分:1)
首先,您应该避免使用 mysql _ 功能(相反,请参阅PDO或mysqli)
这样,您就可以确保查询安全。
无论如何,您的查询应如下所示:
$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。您需要为每个值创建隐藏字段(填充当前值),或者您可以使用填充了当前值的只读文本字段(然后您不必单独回显值)