簡體   English   中英

PHP Mysql使用表格更新表不會更新

[英]PHP Mysql update table using form will not update

好的,所以我嘗試獲取表單來更新表格以編輯聯系人,但是由於某些原因(錯誤為0),它不會更新,而且我也無法弄清楚為什么,因為這一切對我來說都很不錯。

這是編輯聯系人腳本

// Connect to database
$dbc = mysql_connect("localhost", "root");
if (!$dbc) 
    die("Could not connect: " . mysql_error());

// Select database
$db_select = mysql_select_db( "contactmanager", $dbc );
if (!$db_select)
    die("Could not select DB: " . mysql_error());


// Build update function for form
if(isset($_POST['update'])){
    mysql_query("UPDATE contacts SET Name='$_POST[name]', Address='$_POST[address]', Phone='$_POST[phone]', Mobile='$_POST[mobile]', Email='$_POST[email]' WHERE ContactID = $contactID") or trigger_error(mysql_error());

    echo 'Update has been pushed and fucntion has run';


} else {
    echo 'Update has not been pushed.';
}

// initialize form control values
$name = '';
$address = '';
$phone = '';
$mobile = '';
$email = '';

// Get ID of contact selected for editing
$contactID = $_GET['id'];

// build sql select statement
$query = "SELECT * FROM contacts WHERE ContactID = '$contactID'";

// Run sql statement against database
$result = mysql_query($query, $dbc);

if ($result) {

    $row = mysql_fetch_assoc($result);

    $name = $row["Name"];
    $address = $row["Address"];
    $phone = $row["Phone"];
    $mobile = $row["Mobile"];
    $email = $row["Email"];
}
else { 
    // If there is an error display message
    echo '<p><b class="error">Error with $rst: ' . mysql_error($dbc) . '</b></p>';
}

?>


    <form name="editcontact" method="post" action="edit-contact.php" id="editcontact">
        <fieldset>
            <dl>
                <dt><label for="name">Name</label></dt>
                <dd><input name="name" type="text" value="<?php echo $name; ?>" size="33" maxlength="50" tabindex="1" /></dd>
            </dl>   
            <dl>
                <dt><label for="address">Address</label></dt>
                <dd><textarea name="address" cols="33" rows="5" tabindex="2"><?php echo $address; ?></textarea></dd>
            </dl>   
            <dl>
                <dt><label for="phone">Phone</label></dt>
                <dd><input name="phone" value="<?php echo $phone; ?>" type="text" size="33" maxlength="50" tabindex="3" /></dd>
            </dl>   
            <dl>
                <dt><label for="mobile">Mobile</label></dt>
                <dd><input name="mobile" value="<?php echo $mobile; ?>" type="text" size="33" maxlength="50" tabindex="4" /></dd>
            </dl>
            <dl>
                <dt><label for="Email">Email</label></dt>
                <dd><input name="email" value="<?php echo $email; ?>" type="text" size="33" maxlength="50" tabindex="5" /></dd>
            </dl>
            <dl>
                <dt></dt>
                <dd><input type="submit" value="Update" name="update" tabindex="6" style="margin-left:7.3%;" /></dd>
                <dd><a href="list-contacts.php" alt="Contacts List"><p style="margin-left:7.3%;">Back to contacts list</p></a></dd>
            </dl>

        </fieldset>
    </form>

<?php


?>

if(isset($_POST['update'])){...}條件語句之外的所有內容在提交時都會被忽略,這就是您的$contactID = $_GET['id']; 目前位於。

將其放在條件語句中。

<?php
...

if(isset($_POST['update'])){

    // $contactID = $_GET['id']; // original
    $contactID = intval($_GET['id']); // recommended for (INT) type
    $name = mysql_real_escape_string($_POST['name']); // etc.

...

}

旁注:您當前的代碼可以進行SQL注入 使用mysqli_*函數。 (我建議您將其與預處理語句PDO一起使用

您應該更改:

$name = $_POST['name'];

至:

$name = mysql_real_escape_string($_POST['name']);

暫時,其余的都遵循相同的約定。

然后執行SET Name='$name'等,其他操作相同。 在您熟悉准備好的語句或PDO之前,這將為您提供一定的安全性。


mysql_*函數棄用通知:

http://www.php.net/manual/zh/intro.mysql.php

自PHP 5.5.0起不推薦使用該擴展,不建議編寫新代碼,因為將來會刪除該擴展。 相反,應使用mysqliPDO_MySQL擴展名。 另請參見MySQL API概述,以獲取選擇MySQL API時的更多幫助。

這些功能使您可以訪問MySQL數據庫服務器。 有關MySQL的更多信息,請參見» http://www.mysql.com/

可以在» http://dev.mysql.com/doc/中找到MySQL的文檔。

這里有一些關於准備好的語句的教程,您可以研究和嘗試:

以下是有關PDO的一些教程:

id或contactID永遠不會使其通過表單進入代碼的處理部分。 在表單中最后一組<dl>標記之前,您可以添加一個隱藏的輸入,以將ID通過表單傳遞到$ _POST數組中:

<dl>
    <dt></dt>
    <dd><input name="contactID" value="<?php echo $contactID; ?>" type="hidden" /> </dd>
</dl>

然后在處理部分,您可以添加一行以再次獲取值:

if(isset($_POST['update'])){

    $id = mysql_real_escape_string($_POST['contactID']);
    $name = mysql_real_escape_string($_POST['name']);
    $address = mysql_real_escape_string($_POST['address']);
    $phone = mysql_real_escape_string($_POST['phone']);
    $mobile = mysql_real_escape_string($_POST['[mobile']);
    $email = mysql_real_escape_string($_POST['email']);

    mysql_query("UPDATE contacts SET Name='$name', Address='$address', Phone='$phone', Mobile='$mobile', Email='$email' WHERE ContactID = $id") or trigger_error(mysql_error());

    echo 'Update has been pushed and function has run';

} else {//as before...

另外,請認真看一下有關使用@ Fred-ii-中的mysqli的評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM