проблема с формой php и sql

#php #sql #forms #syntax-error

#php #sql #формы #синтаксическая ошибка

Вопрос:

Хорошо, итак, я новичок в 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)
?>
  

Комментарии:

1. Замените весь бессмысленный код, который вы опубликовали, и опубликуйте необработанный sql-запрос, который передается в mysql, без какого-либо php или HTML-кода.

2. Об этом говорит синтаксическая ошибка: один из ваших SQL-операторов сформирован неправильно. Попробуйте повторить все SQL-инструкции, тогда вы обнаружите SQL-ошибку.

3. Избегайте ваших входных данных! Скрывается SQL-инъекция.

Ответ №1:

Вы вставляете идентификатор в одинарные кавычки:

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

Можете ли вы предоставить структуру таблицы? Идентификатор — это целое число или переменный символ?

Комментарии:

1. Это не может быть проблемой. Mysql автоматически приводит типы.

2. это структура таблицы: 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) сопоставляет latin1_general_ci значение по умолчанию NULL, ПЕРВИЧНЫЙ КЛЮЧ ( idNombre ), KEY Nombre_FKIndex3 ( Comuna_idComuna ), KEY Nombre_FKIndex1 ( Giro_idGiro ) )`

3. Можете ли вы повторить команду sql. Я предполагаю, что что-то не так в значении, которое вы получаете form $_POST .

4. Похоже, что это была бы проблема, решаемая параметризацией.

Ответ №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);
?> 
  

Это помогает при отладке