如何在MySQL中更新一行

时间:2013-11-16 13:05:19

标签: php mysql

我有2个PHP文件。第一个update.php包含更新行的用户表单。下一个,update_ac包含执行此更新的编码。问题是我没有得到正确的输出

 <?php
    $host = "localhost"; // Host name 
    $username = "root"; // Mysql username 
    $password = ""; // Mysql password 
    $db_name = "yumyum"; // Database name 
    $tbl_name = "food"; // Table name
    // Connect to server and select database.
    mysql_connect("$host", "$username", "$password") or die("cannot connect");
    mysql_select_db("$db_name") or die("cannot select DB");

    // get value of id that sent from address bar
    //$id=$_GET['id'];

    $id = $_REQUEST['id'];

    // Retrieve data from database 
    $sql = "SELECT * FROM $tbl_name WHERE id='$id'";
    $result = mysql_query($sql);
    $rows = mysql_fetch_array($result);
    ?>

    <table width="400" border="0" cellspacing="1" cellpadding="0">
        <tr>
        <form name="form1" method="post" action="update_ac.php">
            <td>
                <table width="100%" border="0" cellspacing="1" cellpadding="0">

                    <tr>

                        <td align="center"><strong>name</strong></td>
                        <td align="center"><strong>price</strong></td>
                        <td align="center"><strong>Quantity</strong></td>

                    </tr>

                    <td align="center">
                        <input name="name" type="text" id="name" value="<? echo $line['name']; ?>">
                    </td>

                    <td align="center">
                        <input name="price" type="text" id="price" value="<? echo $line['price']; ?>" size="15">
                    </td>

                    <td align="center">
                        <input name="Quantity" type="text" id="Quantity" value="<? echo $line['Quantity']; ?>" size="15">
                    </td>


                    <td>
                        <input name="id" type="hidden" id="id" value="<? echo $line['id']; ?>">
                    </td>
                    <td align="center">
                        <input type="submit" name="Submit" value="Submit">
                    </td>

                    </tr>
                </table>
            </td>
        </form>
    </tr>
    </table>

    <?php
    // close connection 
    mysql_close();
    ?>

    **This is update_ac.php**
        <?php
        $host="localhost"; // Host name 
        $username="root"; // Mysql username 
        $password=""; // Mysql password 
        $db_name="yumyum"; // Database name 
        $tbl_name="food"; // Table name 

        // Connect to server and select database.
        mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
        mysql_select_db("$db_name")or die("cannot select DB");

        // update data in mysql database 
        $sql="UPDATE $tbl_name SET name='$name', price='$price', Quantity='$Quantity' WHERE id='$id'";
        $result=mysql_query($sql);

        // if successfully updated. 
        if($result){
        echo "Successful";
        echo "<BR>";
        echo "<a href='yumhome.php'>View result</a>";
        }

        else {
        echo "ERROR";
        }

        ?>

3 个答案:

答案 0 :(得分:2)

似乎你需要解决不同的问题。

一个接一个......

1)尝试使用所有值正确显示表单。如果$rows无效,请在print_r($rows);之后mysq_fetch_array...告诉我们您的看法。

2)如果表格正确显示,请转到@Machavity的答案

我今天有时间,所以我能够使用PDO创建示例代码,以展示如何完成。将其另存为index.php并用您的字段替换字段名,dbname,用户名和密码。它写得很快,未经测试但应该可以工作。表单的操作是当前的php文件,因此在此示例中没有用于更新内容的单独文件。一切都在一个文件中。

<?php
class db {
    public static function dbFactory($host, $dbase, $user, $pass) {
        $pdo = new PDO("mysql:host=$host;dbname=$dbase", $user, $pass);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);        
        return $pdo;
    }
}


$id = isset($_REQUEST['id'])?intval($_REQUEST['id']):0;
if($id <= 0) {
    echo "Please specify the id!";
    exit;
}

$db = db::dbFactory('localhost','mydbname','myusername','mypassword');

if(isset($_POST['save'])){ // the update stuff
    $field1 = $_POST['field1'];
    $field2 = $_POST['field2'];
    $field3 = $_POST['field3'];    
    $stmt = $db->prepare("UPATE `mytablename` SET `field1` = :field1, `field2` = :field2, `field3` = :field3 WHERE `myid` = :id ");
    $stmt->bindValue(':field1', $field1, PDO::PARAM_STR);
    $stmt->bindValue(':field2', $field2, PDO::PARAM_STR);
    $stmt->bindValue(':field3', $field3, PDO::PARAM_STR);
    $stmt->bindValue(':id', $id, PDO::PARAM_INT);
    $success = $stmt->execute();    

    if($success) {
        echo "Ok, data has been saved.";
    }
}

$stmt = $db->prepare("SELECT * FROM `mytablename` WHERE `myid` = :id");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetch(PDO::FETCH_ASSOC);

?>


<form method="post" action="index.php">
<input type='hidden' name='id' value='<?php echo $id;?>'>
    <table>
        <tr>
            <td>Field1</td>
            <td><input type='text' name='field1' value='<?php echo $data['field1'];?>'></td>
        </tr>
        <tr>
            <td>Field2</td>
            <td><input type='text' name='field2' value='<?php echo $data['field2'];?>'></td>
        </tr>
        <tr>
            <td>Field3</td>
            <td><input type='text' name='field3' value='<?php echo $data['field3'];?>'></td>
        </tr>
    </table>

    <input type='submit' name='save' value='save me'>
</form>

答案 1 :(得分:1)

update_ac.php中你没有使用$_POST超全局。一些旧版本的PHP会为您自动加载这些值,但大多数现代版本都没有。您还需要停止使用mysql功能并切换到mysqli。最后,您需要escape your data。我不会为您修复mysqli,但我会告诉您修复UPDATE的最简单方法。这对于OP来说是简化的。

$name = mysql_real_escape_string($_POST['name']);
$price = mysql_real_escape_string($_POST['price']);
$Quantity = mysql_real_escape_string($_POST['Quantity']);
$id = mysql_real_escape_string($_POST['id']);

$sql = 'UPDATE ' . $tbl_name . ' SET 
        name = "' . $name . '", 
        price = "' . $price . '", 
        Quantity="' . $Quantity . '" 
    WHERE id="' . $id;
$result = mysql_query($sql);

答案 2 :(得分:1)

这不是答案,而是您想要的有用链接。

不推荐使用

mysql_xxx()

由于某些原因,这些功能已被弃用。

  • mysql_connect()
  • mysql_query()
  • mysql_fetch_array()

使用 mysqli PDO

'MySQLi' for Beginners可能会对您有所帮助。只需自己阅读和修改代码。

HTML5和CSS3

我找不到同时使用mysqliHTML5的示例。但This tutorial对于使用PHP的HTML5和CSS3来说非常棒。

我已经看到了您的个人资料和您的问题,我希望这些教程能为您提供帮助。祝你好运。