Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要php mysql更新语句教程的帮助吗_Php_Mysql_Sql Update - Fatal编程技术网

需要php mysql更新语句教程的帮助吗

需要php mysql更新语句教程的帮助吗,php,mysql,sql-update,Php,Mysql,Sql Update,我试图学习一个教程,但在下面的可执行php文件第二段代码的第六行出现了一个数据库错误 <?php mysql_connect("localhost","root","") or die("Error: ".mysql_error()); //add your DB username and password mysql_select_db("beyondmotors");//add your dbname

我试图学习一个教程,但在下面的可执行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行出错。我是数据库新手,所以如果可能,请具体说明。非常感谢。还有,如果有人能给我指一个类似的,实用的教程,那会很有帮助

尝试按照本教程进行操作:

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

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

即使我把post改为$id=$\u post['id'],我也能得到这个结果

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

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

这也排除了所有的错误。但我的数据库没有更新。一切顺利,没有错误,但没有数据被更改

此外,当我尝试删除反勾号时,我还遇到以下错误:

分析错误:语法错误,第12行的C:\wamp\www\test\updateinfo.php中出现意外的T_字符串

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

可能是因为我使用的是本地服务器吗?这应该很简单我不知道我做错了什么。。我是说我把教程里的东西都抄了过来

删除背景标记:

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

首先,也最重要的是,应该警告您的代码完全容易受到攻击。在将POST数据插入数据库之前发布数据是保护数据库的良好开端

此外,学习新系统是无用的,因为它已被弃用。您可以考虑查看接口或扩展。两者都有很多好处,你会收获更多

现在,至于你的错误 确保您正在定义要在数据库中更新的ID。在第二段代码中,您有:

//get the variables we transmitted from the form
$id = $_POST[''];
需要更改为:

$id = $_POST['id'];
您说过即使将post更改为$id=$\u post['id'],也会出现错误,但是如果查看表单,id输入的名称为'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";
编辑: 虽然上面的查询在语法上是正确的,但是由于上面提到的原因,您应该考虑使用MyQuLi或PDO。下面是使用mysqli和PDO的示例

Mysqli

PDO
当然,这是一种易受sql注入攻击的攻击。您数据库的用户实际上是根用户,没有密码吗?如果不是,您需要在脚本的开头插入实际用户名和密码作为mysql\u connect的第二个和第三个参数。它被称为脚本,而不是可执行文件。您设置$id=$\u POST[]有什么原因吗?引号之间的位应该是您希望它从中获取ID的字段的名称,就像您在表单中有对应于fname字段的“fname”一样,依此类推。@所做的只是抑制错误消息,它不会神奇地修复它们。如果您遇到T_字符串错误,您的引号可能已关闭。粘贴您用于$sql=的确切代码。此外,您不必每次回复评论时都更新原始帖子。您也可以通过单击“添加注释”来使用注释。如果可能重复,请不要忘记将过滤器和转义添加到您的值中。我知道是你建议的,但这不在你的计划之内code@Baba更好的是,我刚刚添加了使用mysqli和PDO的示例:]
/* 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();
/* 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;