更新数据库中的数据

时间:2012-07-12 10:07:15

标签: php mysql database sql-update

我想在表单中显示所选的ID数据,并在数据库中编辑它和UPDATE。我从数据库中选择了数据并将其放在输入标签中,但它不起作用。请帮忙!

<html>
<body>
<?
$db = mysql_connect("localhost", "root","");
mysql_select_db("db_ncs",$db);
$id = $_GET['s_id'];
if($id)
{
    $result=mysql_query("SELECT * FROM tbl_student WHERE s_id=$id");
    $row = mysql_fetch_assoc($result);
}
?>

<form method="post" action="update.php">
    Name:<input type="Text" name="name" value="<?php echo $row['s_name'];?>" /><br>
    Contact:<input type="Text" name="contact" value="<?php echo $row['s_contact'];?>" /><br>
    Address:<input type="Text" name="address" value="<?php echo $row['s_address'];?>" /><br>
    E-mail:<input type="Text" name="email" value="<?php echo $row['s_email'];?>" /><br>
    <input type="submit" name="update" value="Update">
</form>

<?
if(isset($_POST['update']))
    {
    $name = $_POST['s_name'];
    $contact = $_POST['s_contact'];
    $address = $_POST['s_address'];
    $email = $_POST['s_email'];
    $sql = "UPDATE tbl_student
            SET (s_name='$name', s_contact='$contact', s_address='$address', s_email='$email')
            WHERE s_id=$id";
    $res = mysql_query($sql);       
    if($res)
        {
            echo "Upadate Successfull!";
        }
        else
        {
            echo "Sorry!";
        }
    }

?>

</body>
</html>

5 个答案:

答案 0 :(得分:2)

你忘了通过身份证。

<form>代码之间添加此内容。

<input type="hidden" name="s_id" value="<?php echo $id;?>" />

您还需要使方法保持一致。表单通过method="get"提交数据,但您是通过$_POST提出的。您还需要通过在适当的位置添加或删除“s_”来使输入名称与您要求的名称一致。

答案 1 :(得分:0)

在表单中,您有method="get"但在PHP代码中使用$_POST。尝试定义您的表单如下:

<form method="post" action="update.php">

您的SQL查询应该是(添加引号):

$sql = "UPDATE tbl_student
        SET (s_name='$name', s_contact='$contact', s_address='$address', s_email='$email')
        WHERE s_id=$id";

尝试在mysql_query之后添加此内容:

 $result = mysql_query($sql) or die(mysql_error());

不要使用mysql_*个功能,不再维护它们:使用PDOMySQLi

答案 2 :(得分:0)

不是您问题的答案,但我必须在您的代码中指出一些遗漏:

  • 如果设置了$_POST['update'],那并不意味着还设置了其他变量。如果用户没有在字段中输入任何内容,则它们可以为空。您应该使用issetempty检查是否设置了每个$_POST$_GET个变量。

  • 你的代码太不安全了!在查询中使用它之前,您应该转义每个变量。请使用mysql_real_escape_string()。我还建议您使用strip_tags()以及转义。

答案 3 :(得分:0)

他不是必须使用$row = mysql_fetch_assoc($result)来获得结果吗?

// Perform Query
$result = mysql_query($query);

// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    $message .= 'Whole query: ' . $query;
    die($message);
}

// Use result
// Attempting to print $result won't allow access to information in the resource
// One of the mysql result functions must be used
// See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.
while ($row = mysql_fetch_assoc($result)) {
    echo $row['firstname'];
    echo $row['lastname'];
    echo $row['address'];
    echo $row['age'];
}

http://php.net/manual/en/function.mysql-query.php

上面只是一个例子。


更新

$result=mysql_query("SELECT * FROM tbl_student WHERE s_id=$id");

$row = mysql_fetch_assoc($result); //  I think you have to add this line here, don't you?
?>



<form method="post" action="update.php">
    <input type="hidden" name="s_id" value="<?php echo $id;?>" />
    Name:<input type="Text" name="name" value="<?php echo $row['s_name'];?>" /><br>
    Contact:<input type="Text" name="contact" value="<?php echo $row['s_contact'];?>" /><br>
    Address:<input type="Text" name="address" value="<?php echo $row['s_address'];?>" /><br>
    E-mail:<input type="Text" name="email" value="<?php echo $row['s_email'];?>" /><br>
    <input type="submit" name="update" value="Update">
</form>

更新2:

当你要更新时,那里的方法$id = $_GET['s_id'];仍在寻找一个名为's_id'的参数将通过HTTP GET来实现,但事实并非如此!

快速解决方法可能是这样, <form method="post" action="update.php?<?php echo $id;?>">

并且不要忘记添加,

$id= $_POST['s_id'];之后

$email = $_POST['s_email'];


更新3:

嗯,你仍然需要这个<input type="hidden" name="s_id" value="<?php echo $id;?>" />并且不要忘记添加,

$id= $_POST['s_id'];之后

$email = $_POST['s_email'];

答案 4 :(得分:0)

您的表单中包含name="contact"等字段,但是当您尝试获取使用$_POST['s_contact']的值时。这些需要匹配。

您需要表单中隐藏的s_id字段的原因是您将更新已编辑的同一行。您的UPDATE语句包含WHERE s_id=$id,因此您需要以这种方式获取原始ID。它是隐藏的,因为您不希望用户在编辑时能够更改ID。