2014-03-25 160 views
0

好吧,所以我想让我的表单更新我的表来编辑联系人,但出于某种原因与0错误它只是不会更新,我只是不明白为什么因为它对我来说都很好。PHP使用表格的Mysql更新表不会更新

这里是编辑接触脚本

// 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 


?> 
+1

['可爱()'](http://stackoverflow.com/q/60174/) –

+1

您在'$ DBC =的mysql_connect省掉了一个参数( “localhost”,“root”);'应该读为'$ dbc = mysql_connect(“localhost”,“root”,“password_xxx”);'--- * Plus,* if(isset $ _POST ['update'])){...}条件语句在提交时将被忽略,这是$ contactID = $ _GET ['id'];'所在的位置;等等。 –

+0

你错过了$ _POSTs中的符号,例如$ _POST [name]应该是$ _POST ['name'] –

回答

2

一切都将在提交被忽略,这是你的0123在哪里目前位于。

将它置于条件语句中。

<?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 injection。使用mysqli_*函数。 (我建议你使用和prepared statements,或者PDO

你应该改变:

$name = $_POST['name']; 

到:

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

的是时间,并为他人做休息,遵循相同的惯例。

然后做SET Name='$name'等,并为其他人做同样的事情。这会给你一些安全性,直到你熟悉准备好的语句或PDO。


mysql_*功能已取消通知:

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

这个扩展不赞成PHP 5.5.0,并且不建议用于编写新的代码,因为它会在将来被移除。应该使用mysqliPDO_MySQL扩展名。请参阅MySQL API Overview以获取进一步帮助,同时选择MySQL API。

这些功能允许您访问MySQL数据库服务器。有关MySQL的更多信息,请参阅»http://www.mysql.com/

为MySQL

文档可以在»http://dev.mysql.com/doc/找到。

这里是准备语句的一些教程,你可以学习和尝试:

这里有几个教程上PDO:

+1

谢谢,我完全忘了逃避字符串。我会重新编码它:) – RiCHiE

+0

不客气,很高兴我能提供帮助。 @RiCHiE干杯 –

1

ID或使用ContactID从不使它通过表单并进入码的处理部分。就在最后一组中的形式<dl>标记之前,您可以添加一个隐藏的输入通过表单和到$ _POST数组传递ID:

<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... 

另外,还要在评论一个很好的认真审视如何使用的mysqli从@的if(isset($_POST['update'])){...}条件语句之外弗雷德-II-