需要php-mysqlUPDATE语句教程的帮助


Need assistance with a php mysql UPDATE statement tutorial please

试图遵循教程,但我在可执行php文件(下面的第二段代码)的第六行遇到数据库错误

    <?php
    mysql_connect("localhost","root","") or die("Error: ".mysql_error()); //add your DB                          username and password
    mysql_select_db("beyondmotors");//add your dbname
    $sql = "select * from `TestTable` where ID = 1";
    $query = mysql_query($sql);
    while ($row = mysql_fetch_array($query)){
        $id = $row['ID'];
        $fname = $row['FName'];
        $lname = $row['LName'];
        $phone = $row['PHON'];
        //we will echo these into the proper fields
    }
    mysql_free_result($query);
    ?>
    <html>
    <head>
    <title>Edit User Info</title>
    </head>
    <body>
    <form action="updateinfo.php" method="post">
    userid:<br/>
    <input type="text" value="<?php echo $id;?>" name="id" disabled/>
    <br/>
    Last Name:<br/>
    <input type="text" value="<?php echo $fname;?>" name="fname"/>
    <br/>
    Last Name:<br/>
    <input type="text" value="<?php echo $lname;?>" name="lname"/>
    <br/>
    Phone Number:<br/>
    <input type="text" value="<?php echo $phone;?>" name="phon"/>
    </br>
    <input type="submit" value="submit changes"/>
    </form>
    </body>
    </html>

这是可执行的

    <?php
    mysql_connect("localhost","root","") or die("Error: ".mysql_error()); //add your DB                 username and password
    mysql_se lect_db("beyondmotors");//add your dbname
    //get the variables we transmitted from the form
    $id = $_POST[''];
    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $phon = $_POST['phon'];
    //replace TestTable with the name of your table
    $sql = "UPDATE `TestTable` SET `FName` = '$fname',`LName` = '$lname',
        `PHON` = '$phon' WHERE `TestTable`.`ID` = '$id' LIMIT 1";
    mysql_query($sql) or die ("Error: ".mysql_error());
    echo "Database updated. <a href='editinfo.php'>Return to edit info</a>";
    ?>

一切都很好,直到我点击提交更改;比我在第6行出错还要多。我是数据库的新手,所以如果可能的话,请具体说明。非常感谢。如果有人能给我指一个类似的"工作"教程,这将有助于ALOT!

尝试遵循本教程:http://teamtutorials.com/web-development-tutorials/editing-mysql-data-using-php

我使用的是wamp服务器,所以数据库登录是正确的。我的意思是它显示数据,只是不编辑它。。我得到的错误是:

注意:第6行上C:''wamp''www''test''updateinfo.php中的未定义索引:ID

即使我把帖子改成$id=$_post[id],我也能得到;

好的,我更改了$_POST[''];到$_POST['id'],仍然有同样的错误。

我在网上读到在前面加了一个@,所以现在看起来是这样的:@$_POST['id'];

这也消除了所有的错误。但不是我的数据库没有更新。一切顺利,没有错误,但没有更改任何数据??

同样,当我试图删除backticks时,我得到了这个错误:

分析错误:语法错误,第12行C:''wamp''www''test''updateinfo.php中出现意外T_STRING

所以我离开了他们原来的样子。。。

可能是因为我使用的是本地服务器吗?这应该很简单——不确定我在这里做错了什么。。我的意思是,我把教程里的所有内容都抄了下来。

首先,应该警告您的代码完全容易受到sql注入的攻击。在将POST数据插入数据库之前对其进行转义是保护数据库的良好开端。

此外,学习mysql扩展对于新系统来说是无用的,因为它已被弃用。您可能会考虑查看PDO接口或mysqli扩展。两者都有许多初学者教程,您将获得更多。

现在,至于你的错误

请确保您正在定义要在数据库中更新的ID。在你的第二块代码中,你有:

//get the variables we transmitted from the form
$id = $_POST[''];

需要更改为:

$id = $_POST['id'];

您说过,即使您将post更改为$id = $_POST['ID'],也会出现错误,但如果您查看表单,则id输入为name = 'id',PHP区分大小写。

现在,在您的sql查询中,所有这些反勾号都是不必要的。此外,指定哪个表ID也没有意义,因为这一切都是在一个表TestTable中完成的。

//replace TestTable with the name of your table
$sql = "UPDATE TestTable SET FName = '$fname',LName = '$lname', 
        PHON = '$phon' WHERE ID = '$id' LIMIT 1";

编辑:尽管上面的查询在语法上是正确的,但由于上述原因,您应该考虑使用mysqli或PDO。下面是使用mysqli和PDO的示例。

Mysqli

mysqli手动

/* connect to the database */
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
/* build prepared statement */
$stmt = $mysqli->prepare("UPDATE TestTable SET FName=?, LName=?, PHON=? WHERE ID=?)");
/* bind your parameters */
$stmt->bind_param('sssi', $fname, $lname, $phon, $id);
/* execute prepared statement */
$stmt->execute();
/* close connection */
$stmt->close();

PDO

PDO手动

/* connect to the database */
$dbh = new PDO('mysql:host=localhost;dbname=database', $user, $pass);
/* build prepared statement */
$stmt = $dbh->prepare("UPDATE TestTable SET FName = :fname, LName = :lname, PHON = :phon WHERE ID = :id");
/* bind your parameters */
$stmt->bindParam(':fname', $fname);
$stmt->bindParam(':lname', $lname);
$stmt->bindParam(':phon', $phon);
$stmt->bindParam(':id', $id);
/* update one row */
$fname = 'John'; # or use your $_POST data
$lname = 'Doe';
$phon  = '123-456-7890';
$id    = 1;
/* execute prepared statement */
$stmt->execute();
/* use it again!1! */
$fname = 'Jane';
$lname = 'Doe';
$phon  = '123-456-7890';
$id    = 2;
/* execute prepared statement */
$stmt->execute();
/* close connection */
$dbh = null;

删除回溯:

UPDATE TestTable SET FName = '$fname',LName = '$lname',PHON ='$phon' 
WHERE TestTable.ID = '$id' LIMIT 1";