【问题标题】:problem with form php and sql表单 php 和 sql 的问题
【发布时间】:2011-04-17 08:47:53
【问题描述】:

好的,我是 php 和 sql 的新手,我有这个表单,可以将一些名称和城市提交到数据库中。

我设法做到了,但是一旦点击提交按钮,我就会收到错误:

“错误:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的 '1' 附近使用的正确语法”

但是,当我检查 phpmyadmin 时,新记录在那里!!,所以我不确定是什么问题,这就是问题所在。

这是代码:

<?php
   mysql_connect("localhost", "name", "pass") or die(mysql_error());
   echo "Connection to the server was successful!<br/>";

   mysql_select_db("db_name") or die(mysql_error());
   echo "Database was selected!<br/>";



    $resultComuna = mysql_query("SELECT idComuna, nombre FROM comuna ORDER BY nombre ASC");
    $resultGiro = mysql_query("SELECT idGiro, nombre FROM giro ORDER BY nombre ASC");

?>

<html>
<head>
    <title>TEST</title>
</head>
<body>
    <br/><br/>
    <form name="form" method="POST" action="test_action.php">
        <div align="center">

    <!--/////////////////  input nombre ////////////////////////  -->
            NOMBRE CLIENTE:
            <input name="nombreCliente" type="text" maxlength="30" size="40"></>

    <!-- ///////////////////////////////////////////////////////////// -->

    <!-- ////////////////////drop box para giro ///////////////////// -->
            GIRO:
            <select name="giro">
            <?php
            while($row = mysql_fetch_assoc($resultGiro)){
                echo "<option value=\"".$row['idGiro']."\">".$row['nombre']."</option><br/>";
            }
            ?>      
            </select>
    <!-- ///////////////////////////////////////////////////////////// -->

    <!-- ////////////// dropbox para comunas //////////////////////// -->
            COMUNA:
            <select name="comunas">
            <?php
            while($row = mysql_fetch_assoc($resultComuna)){

                echo "<option value=\"".$row['idComuna']."\">".$row['nombre']."</option><br/>";
            }
            ?>      
            </select>
    <!-- ////////////////////////////////////////////////////////////// -->

        <input type="submit" value="Ingresar"> </>

        </div>
    </form>

</body>
</html>

test_action.php 是:

<?php
    $con = mysql_connect("localhost", "name", "pass");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("data_base", $con);


$query = mysql_query("SELECT max(idNombre)+1 as id FROM nombre");
$row = mysql_fetch_array($query);
$idMax = $row['id'];


    $sql = mysql_query("INSERT INTO nombre VALUES ('".$idMax."','".$_POST['comunas']."',".$_POST['giro'].",'".$_POST['nombreCliente']."')");

    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }
    echo "record added";

    mysql_close($con)
?>

【问题讨论】:

  • 替换您发布的所有无意义的代码并发布传递给mysql的raw sql查询,没有任何php或html代码。
  • 语法错误表明:您的一条 SQL 语句的格式不正确。尝试回显所有 SQL 语句,然后您会发现 SQL 错误。
  • 转义你的输入!潜伏着 SQL 注入。

标签: php sql forms syntax-error


【解决方案1】:

您在单引号中插入 ID:

$sql = mysql_query("INSERT INTO nombre VALUES ('".$idMax."','".$_POST['comunas']."',".$_POST['giro'].",'".$_POST['nombreCliente']."')");

你能提供表结构吗? ID是整数还是varchar呢?

【讨论】:

  • 这不是问题。 Mysql 自动转换类型。
  • 这是表结构:CREATE TABLE nombre` (idNombre int(10) unsigned NOT NULL, Comuna_idComuna int(10) unsigned NOT NULL, Giro_idGiro int(10) unsigned NOT NULL, nombre varchar(255) collat​​e latin1_general_ci 默认 NULL, PRIMARY KEY (idNombre), KEY Nombre_FKIndex3 (Comuna_idComuna), KEY Nombre_FKIndex1 (Giro_idGiro))`
  • 你能回显sql命令吗?我猜你从$_POST 得到的值有问题。
  • 听上去应该是通过参数化解决的问题。
【解决方案2】:

尝试将 test_action.php 更改为:

<?php
    $con = mysql_connect("localhost", "name", "pass");
    if (!$con)
        {
        die('Could not connect: ' . mysql_error());
        }

    mysql_select_db("data_base", $con);

    $query = mysql_query("SELECT max(idNombre)+1 as id FROM nombre");
    $row = mysql_fetch_array($query);
    $idMax = $row['id'];

    $query = "INSERT INTO nombre VALUES ('".$idMax."','".$_POST['comunas']."',".$_POST['giro'].",'".$_POST['nombreCliente']."')";
    $sql = mysql_query($query);
    if (!mysql_query($sql,$con))
    {
        die('Error: ' . mysql_error().'<br>query: '.$query);
    }
    echo "record added";

    mysql_close($con);
?> 

有助于调试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多