在POST请求中使用POST

时间:2015-03-23 12:23:47

标签: php html forms

我希望有一个个人资料页面,我可以在不使用其他页面的情况下查看和编辑信息。

默认情况下会打印此信息:

<table border="0" style="width:35%">
<tr><td>E-mail:</td><td><?php echo $user['email']; ?></td></tr>
<tr><td>About me:</td><td><?php echo $user['about']; ?></td></tr>
</table>
<form action = "" method="post">
<input type = "submit" name="modify" value="Edit My Profile"/>

如果选择了POST ['modify'],请执行以下操作:

<table border="0" style="width:25%">
    <tr><td>E-mail:</td><td><input type="text" name="email" value="<?php echo $user['email']; ?>"/></td></tr>
    <tr><td>About Me:</td></tr>
    </table>
    <textarea name="about" rows="4" cols="64"><?php echo $user['about']; ?></textarea>
<form action = "" method="post">
    <input type = "submit" name="modify2" value="Edit My Profile"/>
    <input type = "submit" name="cancel" value="Cancel"/>
</form>

如果选择了POST ['modify2'],请执行以下操作:

$db = new mysqli('localhost', 'r00t', 'somepass', 'sometable');
$stmt = $db->prepare("UPDATE users SET email= ?, about= ? WHERE username = ?");
$stmt->bind_param('sss', $_POST['email'], $_POST['about'], $_SESSION['username']);
$stmt->execute();
$stmt->close();
redirect("profile.php");

除非我尝试编辑我的个人资料,否则它会按预期工作。我无法覆盖电子邮件或关于部分。我认为它与MySQL查询有关?我知道我得到了我的$ _SESSION ['用户名']。那么$ _POST ['email']或/和$ _POST ['about']是不是设置好了?

我在PhpMyAdmin中使用正确的参数尝试了我的查询,但确实有效。

或者是否无法在单页中使用双重POST请求?

3 个答案:

答案 0 :(得分:1)

<form>标记放在所有输入上方。不要忘记使用htmlspecialchars引用特殊HTML字符:

<table border="0" style="width:25%">
    <form action = "" method="post">
    <tr><td>E-mail:</td>
        <td><input type="text" name="email" value="<?php echo htmlspecialchars($user['email']); ?>"/></td>
    </tr>
    <tr><td>About Me:</td></tr>
    </table>
    <textarea name="about" rows="4" cols="64"><?php echo htmlspecialchars($user['about']); ?></textarea>
    <input type = "submit" name="modify2" value="Edit My Profile"/>
    <input type = "submit" name="cancel" value="Cancel"/>
</form>

MySQL查询似乎没问题。

答案 1 :(得分:1)

你的表格在桌子外面有字段。您要更新的字段应位于表单元素内。

<form action = "" method="post">
<table border="0" style="width:25%">
<tr><td>E-mail:</td><td><input type="text" name="email" value="<?php    echo $user['email']; ?>"/></td></tr>
<tr><td>About Me:</td></tr>
<tr><td> <textarea name="about" rows="4" cols="64"><?php echo    $user['about']; ?></textarea></td></tr></table>

<input type = "submit" name="modify2" value="Edit My Profile"/>
<input type = "submit" name="cancel" value="Cancel"/>
</form> 

答案 2 :(得分:1)

表格上方的用户表单标记,以便所有输入都来自表单,而不是使用$ _POST方法获取表单的值

<table border="0" style="width:25%">
    <tr><td>E-mail:</td><td><input type="text" name="email" value="<?php echo $user['email']; ?>"/></td></tr>
    <tr><td>About Me:</td></tr>
    </table>
    <textarea name="about" rows="4" cols="64"><?php echo $user['about']; ?></textarea>
<form action = "" method="post">
    <input type = "submit" name="modify2" value="Edit My Profile"/>
    <input type = "submit" name="cancel" value="Cancel"/>
</form>