HTML表单更改echo'ed变量但不是数据库?

时间:2015-11-29 13:54:54

标签: php html mysql database forms

我有这样的表格:

<div class="col-md-6">
                      <h4>Update Contact Details</h4>
                      <form action="" method="post" name="contact" id="contact">                      
<div class="form-group">
<label>*Address:</label>
<input type="text" class="form-control" id="address_line_1" name="address_line_1" value="<? echo $address_line_1; ?>" placeholder="Address Line 1..." required="required">
<input type="text" class="form-control" id="address_line_2" name="address_line_2" value="<? echo $address_line_2; ?>" placeholder="Address Line 2...">
<label>*Postcode:</label>
<input type="text" class="form-control" id="postcode" name="postcode" value="<? echo $postcode; ?>" placeholder="Postcode" required="required">
</div>
<div class="form-group">
<label>*Phone Number:</label>
<input type="number" class="form-control" id="contact_number" name="contact_number" value="<? echo $contact_number; ?>" placeholder="Phone Number" required="required">
</div>
<div class="form-group">
<input type="hidden" class="form-control" id="userid" name="userid" value="<? echo $userid; ?>">
<button type="submit" id="contact" name="contact" class="btn btn-primary btn-sm">Save Details</button>
</div>
                      </div>

哪个运行到此脚本:

if(isset($_POST['contact'])){
    $address_line_1 = str_replace("'","\\'",$_POST['address_line_1']);
    $address_line_2 = str_replace("'","\\'",$_POST['address_line_2']);
    $postcode = str_replace("'","\\'",$_POST['postcode']);
    $contact_number = $_POST['contact_number'];
    $uid = $_POST['userid'];

    mysqli_query($conn, "UPDATE ap_users SET address_line_1 = '$address_line_1', address_line_2 = '$address_line_2', postcode = '$postcode', $contact_number = '$contact_number' WHERE user_id = '$uid'");
}

非常基本,我知道 - 当我发送表单时,页面上回显的变量(例如echo $address_line_1)都会更改为新结果,但是当我重新加载页面时,它们会返回到旧结果。我发送表单时似乎没有更新MySQL数据库,我不太清楚为什么?

1 个答案:

答案 0 :(得分:1)

根据OP的要求。

die(mysqli_error($conn))添加到mysqli_query()以查看是否有错误。

最好也使用affected_rows()进行更新。

此外,您正在使用if(isset($_POST['contact'])){并且表单和按钮具有2x名称属性。

<form>中移除一个。 <form>上的名称属性仅在使用jQuery / Ajax时才有效。

另外,如果您的表单和PHP / SQL在同一个文件中,请使用标题重定向到同一页面,并确保在标题之前没有*输出。并确保启用短标签。

参考文献:

您目前的代码向SQL injection开放。使用mysqli_* with prepared statementsPDOprepared statements