Есть форма: <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
возможно условие срабатывает не только на пост-запросе но и на гет-запросе, то есть когда форма еще не была отправлена. тогда в переменную бд не заносится называние таблицы в базе данных и запрос вставки получается битый ровно на пустое имя таблицы.
Привет! Спасибо за ответ! У меня есть подозрения, что проблема в самом запросе. Если я пишу запрос с обратными кавычками (`) "INSERT INTO `$bd` (`type`, `name`, `description`) VALUES ('$type','$name','$description')"; Ошибка следующая: Incorrect table name., то есть я не правильно объявил переменную в SQL запросе? --- Добавлено --- Привет! Если таблицу указываешь явно, то все работает.
@Noname__ я не гадаю, я вижу сообщение от мускула. В нем указывается кусок с которого парсер запроса охреневает. Этот кусок начинается с перечисления полей. А проблема до перечисления полей. До перечисления у тебя инсёрт инту и подстановка названия таблицы. Значит какая-то лабуда с названием таблицы. Далее читаем выше объявление переменной биди. У тебя там присвоение ключа из поста. Значит одна из возможных причин - ошибка новичка связанная с тем что он не проверяет метод запроса а сразу пишет пост-массив. А пост-массив всегда существует. Но при не-пост-запросе в нем не будет ключа с названием таблицы. А значит даже когда ты просто открываешь страницу гетом то выполняется этот вот запрос но из-за неполности он вываливается вот этой вот ошибкой. Вот такая логика. Я не гадаю.
Получается не верно именно $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> Не могу сообразить, как мне переменную, которую пользователь ввел при создании таблицы, скажем так, сохранить до момента редактирования этой таблицы?
оберни это в if('POST' == $_SERVER['REQUEST_METHOD']){} и код будет срабатывать только если форма была отправлена постом.
Привет! Если делаю так: <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.
Обернул 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.
Привет! Ты имеешь в виду обратные кавычки (`) в запросе INSERT!? Если я их ставлю, ошибка: Incorrect table name.
Сейчас, параминут --- Добавлено --- Если имя таблицы задавать явно, то работает без кавычек. --- Добавлено --- Прилагаю код, БД прилагать думаю нет смысла, она же должна создаваться в процессе выполнения. Получилось только в txt загрузить.
До сайта еще далеко. Очень хочется добиться хотя бы того, что бы таблица открывалась на редактирование по запросу пользователя!