【问题标题】:Update MySQL using HTML Form and PHP使用 HTML 表单和 PHP 更新 MySQL
【发布时间】:2013-09-30 10:58:24
【问题描述】:

我已经在这里查看了几十个关于这个问题的帖子,但还没有找到解决方案。

我创建了一个表单,应该在输入框中显示数据库表格内容,当输入框的内容发生更改并提交时,数据库应该更新。

<html>
<head>
</head>
<body>

<?php

$dbhost = '****';
$dbuser = '****';
$dbpass = '****';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db('****');

$query = "SELECT * FROM anstalld";
$result = mysql_query($query) or die(mysql_error());

?>


<form method="post" action="<?php $_PHP_SELF ?>">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>

<?php 

while($row = mysql_fetch_array($result))
            {

$namn = $row['namn'];
$mandag = $row['mandag'];
$tisdag = $row['tisdag'];
$onsdag = $row['onsdag'];
$torsdag = $row['torsdag'];
$fredag = $row['fredag'];
?>


<td width="100"></td>
<td><?=$namn?></td>
</tr>
<tr>
<td width="100">Mandag</td>
<td><input name="mandagid" type="text" value="<?=$mandag?>"></td>
</tr>
<tr>
<td width="100">Tisdag</td>
<td><input name="tisdagid" type="text" value="<?=$tisdag?>"></td>
</tr>
<tr>
<td width="100">Onsdag</td>
<td><input name="onsdagid" type="text" value="<?=$onsdag?>"></td>
</tr>
<tr>
<td width="100">Torsdag</td>
<td><input name="torsdagid" type="text" value="<?=$torsdag?>"></td>
</tr>
<tr>
<td width="100">Fredag</td>
<td><input name="fredagid" type="text" value="<?=$fredag?>"></td>
</tr>
<?php } ?>
<tr>
<td width="100"> </td>
<td> </td>
</tr>
<tr>
<td width="100"> </td>
<td>
<input name="update" type="submit" id="update" value="Update">
</td>
</tr>
</table>
</form>



<?php

if(isset($_POST['update']))
{

$namn = $_POST['namnid'];
$mandag = $_POST['mandagid'];
$tisdag = $_POST['tisdagid'];
$onsdag = $_POST['onsdagid'];
$torsdag = $_POST['torsdagid'];
$fredag = $_POST['fredagid'];

$sql = mysql_query("UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'");

$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";

}


?>
</body>
</html>

表单可以正常显示数据库的内容,但更新后我收到以下消息:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近第 1 行的“1”

感谢我在这方面能得到的任何帮助。

【问题讨论】:

  • mysql_* 函数不再维护,不应在任何新代码库中使用。它正在逐步淘汰,以支持更新的 API。相反,您应该将prepared statementsPDOMySQLi 一起使用。
  • 这不能这样工作,因为你有多个表单,输入字段总是相同的names。您也缺少将namn 放在至少隐藏的字段中。你错过了很多结束}
  • @djot 感谢您指出多表单问题!我如何在不使用静态名称的情况下将 UPDATE 查询指向输入框?
  • @user2052849 您可以使用数组代替:例如name="fredagid[]"。然后,您可以循环访问$_POST,并且会有几个“星期五”(希望与行一样多)。 var_dump($_POST) 然后看看我的意思。希望,您的 SQL 将像“anstalld”一样安全 - 目前它容易受到 SQL 注入的攻击。

标签: php html mysql forms sql-update


【解决方案1】:

用mysqli代替mysql,需要传递数据库名或者schema:

之前:

$conn = mysql_connect($dbhost, $dbuser, $dbpass);

之后:

$conn = mysql_connect($dbhost, $dbuser, $dbpass, $myDBname);

【讨论】:

  • 谢谢。然而,它并没有解决我遇到的问题。
  • 尝试关闭到代码末尾的连接,输入:mysql_close($conn);
  • 每次打开连接,使用后需要关闭连接
  • 谢谢,这似乎没有任何区别:/
  • mysql的用户检查是否有权限执行UPDATE
【解决方案2】:

更新查询可能有一些问题

$query = "UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn' ";
echo $query;

请确保,您的变量没有带有 qoutes ( ' ) 的值,可能是查询在某处中断。

回显查询并尝试在 phpmyadmin 本身中执行。然后你可以找到问题。

【讨论】:

    【解决方案3】:

    您已经在此处执行了查询

    $sql = mysql_query("UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'");
    

    所以这条线有问题

    $retval = mysql_query( $sql, $conn ); //$sql is not a query its a result set here
    

    试试这样的:

    $sql = "UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'";    
    $retval = mysql_query( $sql, $conn ); //execute your query
    

    附带说明:不推荐使用 MySQL_* 扩展,使用 MySQLi_* 或 PDO 而是。

    【讨论】:

    • 谢谢!这修复了“您的 SQL 语法有错误”消息,但是,我的数据库仍未使用新添加的内容进行更新。
    • 您的数据库未更新,因为您正在循环中生成输入框,这将创建许多具有相同名称的输入元素。您可以尝试将输入字段的名称更改为类似&lt;input name="mandagid[]" type="text" value="&lt;?=$mandag?&gt;"&gt; 的数组。您需要对每个输入元素执行此操作并相应地进行处理。
    【解决方案4】:

    你的 sql 不正确。

    $sql = mysql_query("UPDATE anstalld....
    

    只有

    $sql = "UPDATE anstalld...
    

    【讨论】:

      【解决方案5】:

      你的 sql 语法有错误。

      请使用此查询和结帐。

      $query = mysql_query("UPDATE `anstalld` SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn' ");
      

      【讨论】:

        【解决方案6】:

        试试这个方法。将表名放在引号 (``) 中。 旁边放变量 '".$xyz."'.

        所以你的 sql 查询会是这样的:

        $sql = mysql_query("UPDATE `anstalld` SET mandag = "'.$mandag.'" WHERE namn =".$name)or die(mysql_error());
        

        【讨论】:

        • 是的。我只使用此代码。还是怎么样?你能指出错误吗?我可以改进
        • 你的引号有问题,第一个字符串是“UPDATE anstalldSET mandag =”下一个是'.$mandag.',你会得到一个解析错误,因为没有.它们之间。如果您改正了所有错误,您的代码将与以下 0 分答案之一相同
        • 你能帮我写下整个查询吗?其实我没听懂你在说什么。 @Naktibalda
        【解决方案7】:

        首先使用 mysqli_connect($dbhost,$dbuser,$dbpass,$dbname)

        第二 - 将mysqli_ 放在任何地方而不是mysql_

        第三 - 使用这个 $sql = "UPDATE anstalld SET mandag = '.$mandag.', tisdag = '.$tisdag.', onsdag = '.$onsdag.', torsdag = '.$torsdag.', fredag = '.$fredag.' WHERE namn = '.$namn.'";
        $retval = mysqli_query( $conn, $sql ); //execute your query

        如果您的数据正在您的数据库中更新,但没有在您的表中更新,因为当您单击更新按钮时,会向同一个文件发出请求。 它首先从数据库中选择数据,当它没有更新时,将其打印到表中,然后根据流程对其进行更新。如果您必须在单击更新按钮时对其进行更新,请放置此部分

        <?php
        if(isset($_POST['update']))
        {
        
        $namn = $_POST['namnid'];
        $mandag = $_POST['mandagid'];
        $tisdag = $_POST['tisdagid'];
        $onsdag = $_POST['onsdagid'];
        $torsdag = $_POST['torsdagid'];
        $fredag = $_POST['fredagid'];
        
        $sql = mysql_query("UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'");
        
        $retval = mysql_query( $sql, $conn );
        if(! $retval )
        {
        die('Could not update data: ' . mysql_error());
        }
        echo "Updated data successfully\n";
        
        }
        
        
        ?>`
        

        连接数据库后。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-01
          • 1970-01-01
          • 2014-02-28
          • 2014-05-08
          相关资源
          最近更新 更多