За последние 24 часа нас посетили 74230 программистов и 10147 роботов. Сейчас ищет 2601 программист ...

Просьба помочь разобраться с ошибкой при вставке данных в табдицу.

Тема в разделе "PHP для новичков", создана пользователем Noname__, 7 янв 2018.

  1. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Есть форма:
    <form method="POST" action="selectbd2.php">
    Имя БД: <input name="namebd" type="text" />
    <input type="submit" value="OK"/>
    </form>

    в файле selectbd2.php
    прописываю $bd = $_POST['namebd'];
    выполняю запрос:
    $query = "SELECT id, type, name, description FROM $bd ORDER BY name";
    $result = mysql_query($query) or die(mysql_error()); - запрос выполняется.

    А при запросе:
    $query = "INSERT INTO $bd (type, name, description) VALUES ('$type','$name','$description')";
    mysql_query($query) or die("Cannot insert: " . mysql_error());

    ошибка: Cannot insert: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(type, name, description) VALUES ('45','asdf','asdf')' at line 1

    использую PHP 5.3.13, MySQL 5.1
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    возможно условие срабатывает не только на пост-запросе но и на гет-запросе, то есть когда форма еще не была отправлена. тогда в переменную бд не заносится называние таблицы в базе данных и запрос вставки получается битый ровно на пустое имя таблицы.
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    а на прямую вставляет?
     
  4. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Привет! Спасибо за ответ! У меня есть подозрения, что проблема в самом запросе. Если я пишу запрос с обратными кавычками (`) "INSERT INTO `$bd` (`type`, `name`, `description`) VALUES ('$type','$name','$description')";
    Ошибка следующая: Incorrect table name., то есть я не правильно объявил переменную в SQL запросе?
    --- Добавлено ---
    Привет! Если таблицу указываешь явно, то все работает.
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    @Noname__ я не гадаю, я вижу сообщение от мускула. В нем указывается кусок с которого парсер запроса охреневает. Этот кусок начинается с перечисления полей. А проблема до перечисления полей. До перечисления у тебя инсёрт инту и подстановка названия таблицы. Значит какая-то лабуда с названием таблицы. Далее читаем выше объявление переменной биди. У тебя там присвоение ключа из поста. Значит одна из возможных причин - ошибка новичка связанная с тем что он не проверяет метод запроса а сразу пишет пост-массив. А пост-массив всегда существует. Но при не-пост-запросе в нем не будет ключа с названием таблицы. А значит даже когда ты просто открываешь страницу гетом то выполняется этот вот запрос но из-за неполности он вываливается вот этой вот ошибкой. Вот такая логика. Я не гадаю.
     
  6. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Получается не верно именно $bd = $_POST['namebd'];

    Что я пытаюсь сделать:

    1. По форме :
    <form method="POST" action="test1.php">
    Имя БД: <input name="namebd" type="text" />
    <input type="submit" value="Создать"/>
    </form>
    задаю имя таблицы.
    2. Скрипт создания БД в mysql:
    <?php

    include 'library/connection.php';
    // Переменная с формы
    $namebd = $_POST['namebd'];

    $query = "CREATE TABLE `$namebd` (`field1` VARCHAR(20), `field2` VARCHAR(20), `field3` VARCHAR(20), `field4` VARCHAR(20), `field5` VARCHAR(20), `field6` VARCHAR(20), `field7` VARCHAR(20), `field8` VARCHAR(20), `field9` VARCHAR(20), `field10` VARCHAR(20), `field11` VARCHAR(20))";
    mysql_query($query) or die("Не могу создать: " . mysql_error());

    if ($query) {
    //Если таблица создана успешно, перейти на странице добавления, удаления, редактирования записей
    echo "<form method='POST' action='test13.php'>";
    echo "Создана БД: <input name='edit' type='text' value='$namebd'/>";
    echo "<input type='submit' value='Перейти'/>";
    echo "</form>";

    } else { exit;}

    ?>
    3. Собственно редактирование таблицы:
    <table class=box>
    <tr>
    <th>field1</th>
    <th>field2</th>
    <th>field3....</th>
    </tr>
    <?php

    include 'library/connection.php';
    $bd = $_POST['edit'];


    if (isset($_GET['INSERT'])) {
    $field1 = $_GET['input_field1'];
    $field2 = $_GET['input_field2'];
    $field3 = $_GET['input_field3'];
    $field4 = $_GET['input_field4'];
    $field5 = $_GET['input_field5'];
    $field6 = $_GET['input_field6'];
    $field7 = $_GET['input_field7'];
    $field8 = $_GET['input_field8'];
    $field9 = $_GET['input_field9'];
    $field10 = $_GET['input_field10'];
    $field11 = $_GET['input_field11'];


    $query = "INSERT INTO $bd (field1, field2, field3, field4,field5, field6, field7, field8, field9, field10, field11) VALUES ('$field1','$field2','$field3','$field4', 'field5, '$field6', '$field7', '$field8', '$field9', '$field10','$field11')";
    mysql_query($query) or die("Cannot insert: " . mysql_error());
    }

    $query = "SELECT `field1`, `field2`, `field3`, `field4`, `field5`, `field6`, `field7`, `field8`, `field9`, `field10`, `field11` FROM `$bd`";
    $result = mysql_query($query) or die(mysql_error());

    while (list($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field8, $field10, $field11) = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "<td>$field1</td>\n";
    echo "<td>$field2</td>\n";
    echo "<td>$field3</td>\n";
    echo "<td>$field4</td>\n";
    echo "<td>$field5</td>\n";
    echo "<td>$field6</td>\n";
    echo "<td>$field7</td>\n";
    echo "<td>$field8</td>\n";
    echo "<td>$field9</td>\n";
    echo "<td>$field10</td>\n";
    echo "<td>$field11</td>\n";
    }

    ?>
    <form>
    <tr>
    <td><input name=input_field1></td>
    <td><input name=input_field2></td>
    <td><input name=input_field3></td>
    <td><input name=input_field4></td>
    <td><input name=input_field5></td>
    <td><input name=input_field6></td>
    <td><input name=input_field7></td>
    <td><input name=input_field8></td>
    <td><input name=input_field9></td>
    <td><input name=input_field10></td>
    <td><input name=input_field11></td>
    </tr>
    <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td><input type=submit name=INSERT value=Добавить></td>
    </tr>
    </form>

    Не могу сообразить, как мне переменную, которую пользователь ввел при создании таблицы, скажем так, сохранить до момента редактирования этой таблицы?
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    оберни это в if('POST' == $_SERVER['REQUEST_METHOD']){} и код будет срабатывать только если форма была отправлена постом.
     
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.178
    Симпатии:
    161
    Адрес:
    GABRIEL
    или
    PHP:
    1. if(!empty($_POST))
     
  9. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Привет! Если делаю так:

    <table class=box>
    <tr>
    <th>field1</th>
    <th>field2</th>
    <th>field3....</th>
    </tr>
    <?php

    include 'library/connection.php';

    if(!empty($_POST)) {
    $bd = $_POST['edit'];


    if (isset($_GET['INSERT'])) {
    $field1 = $_GET['input_field1'];
    $field2 = $_GET['input_field2'];
    $field3 = $_GET['input_field3'];
    $field4 = $_GET['input_field4'];
    $field5 = $_GET['input_field5'];
    $field6 = $_GET['input_field6'];
    $field7 = $_GET['input_field7'];
    $field8 = $_GET['input_field8'];
    $field9 = $_GET['input_field9'];
    $field10 = $_GET['input_field10'];
    $field11 = $_GET['input_field11'];


    $query = "INSERT INTO $bd (field1, field2, field3, field4,field5, field6, field7, field8, field9, field10, field11) VALUES ('$field1','$field2','$field3','$field4', 'field5, '$field6', '$field7', '$field8', '$field9', '$field10','$field11')";
    mysql_query($query) or die("Cannot insert: " . mysql_error());
    }

    $query = "SELECT `field1`, `field2`, `field3`, `field4`, `field5`, `field6`, `field7`, `field8`, `field9`, `field10`, `field11` FROM `$bd`";
    $result = mysql_query($query) or die(mysql_error());

    while (list($field1, $field2, $field3, $field4, $field5, $field6, $field7, $field8, $field8, $field10, $field11) = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "<td>$field1</td>\n";
    echo "<td>$field2</td>\n";
    echo "<td>$field3</td>\n";
    echo "<td>$field4</td>\n";
    echo "<td>$field5</td>\n";
    echo "<td>$field6</td>\n";
    echo "<td>$field7</td>\n";
    echo "<td>$field8</td>\n";
    echo "<td>$field9</td>\n";
    echo "<td>$field10</td>\n";
    echo "<td>$field11</td>\n";
    }}

    ?>
    <form>
    <tr>
    <td><input name=input_field1></td>
    <td><input name=input_field2></td>
    <td><input name=input_field3></td>
    <td><input name=input_field4></td>
    <td><input name=input_field5></td>
    <td><input name=input_field6></td>
    <td><input name=input_field7></td>
    <td><input name=input_field8></td>
    <td><input name=input_field9></td>
    <td><input name=input_field10></td>
    <td><input name=input_field11></td>
    </tr>
    <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td><input type=submit name=INSERT value=Добавить></td>
    </tr>
    </form>

    То ошибок нет, но не работает не SELECT, не INSERT.
     
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    не вижу кавычек
     
  11. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Обернул

    if('POST' == $_SERVER['REQUEST_METHOD']){
    if (isset($_GET['INSERT'])) {
    $field1 = $_GET['input_field1'];
    $field2 = $_GET['input_field2'];
    $field3 = $_GET['input_field3'];
    $field4 = $_GET['input_field4'];
    $field5 = $_GET['input_field5'];
    $field6 = $_GET['input_field6'];
    $field7 = $_GET['input_field7'];
    $field8 = $_GET['input_field8'];
    $field9 = $_GET['input_field9'];
    $field10 = $_GET['input_field10'];
    $field11 = $_GET['input_field11'];


    $query = "INSERT INTO $bd (field1, field2, field3, field4,field5, field6, field7, field8, field9, field10, field11) VALUES ('$field1','$field2','$field3','$field4', 'field5, '$field6', '$field7', '$field8', '$field9', '$field10','$field11')";
    mysql_query($query) or die("Cannot insert: " . mysql_error());
    }}

    При ввыполнении ошибка: Incorrect table name.
     
  12. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    дай весь код с базой
     
  13. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Привет! Ты имеешь в виду обратные кавычки (`) в запросе INSERT!? Если я их ставлю, ошибка: Incorrect table name.
     
  14. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    @Noname__
    PHP:
    1. <td><input name=input_field1></td>
     
  15. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    Сейчас, параминут
    --- Добавлено ---
    Если имя таблицы задавать явно, то работает без кавычек.
    --- Добавлено ---
    Прилагаю код, БД прилагать думаю нет смысла, она же должна создаваться в процессе выполнения. Получилось только в txt загрузить.
     

    Вложения:

    • test14.txt
      Размер файла:
      288 байт
      Просмотров:
      1
    • test15.txt
      Размер файла:
      767 байт
      Просмотров:
      1
    • test16.txt
      Размер файла:
      2,1 КБ
      Просмотров:
      2
  16. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    183
    @Noname__ если я это запущу, то сайт не заработает
     
  17. Noname__

    Noname__ Новичок

    С нами с:
    7 янв 2018
    Сообщения:
    10
    Симпатии:
    0
    До сайта еще далеко. Очень хочется добиться хотя бы того, что бы таблица открывалась на редактирование по запросу пользователя!