2

I want to show the selected ID data in the form and EDIT it and UPDATE in the database. I selected the data from the database and put it in the input tag but it doesn't work. Please help!

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

5 回答 5

2

你忘了传递身份证。

<form>在标签之间添加这个。

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

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

于 2012-07-12T10:13:13.673 回答
0

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

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

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

于 2012-07-12T10:21:33.333 回答
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'];

于 2012-07-12T10:22:39.983 回答
0

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

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

于 2012-07-12T12:09:50.587 回答
0

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

<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_*函数,它们不再被维护:使用MySQLiPDO

于 2012-07-12T10:16:41.930 回答