#php #mysql
#php #mysql
Вопрос:
Кажется, я не могу передать $ _GET в свой запрос MYSQL. Допустим, у меня есть 2 таблицы в моей БД, example1 и example2. Я хотел бы запросить таблицу, выбранную на предыдущей странице. Если я просто помещу таблицу в запрос, он будет работать нормально. Вот что у меня есть на данный момент…
<html>
<form id="area" name="area" method="GET" action="test.php">
Select:
<select id="area" name="area">
<option value="example1">Example1</option>
<option value="example2">Example2</option>
</select><br><br>
<input type="submit" value="Submit">
</form>
</html>
test.php
include "connect.php";
$area = $_GET['area'];
$sql = "SELECT * FROM '$area' ";
$query = mysqli_query($sql);
if (isset($_POST['searchquery'])) {
$search_term = $_POST['searchquery'];
$result = mysqli_query($con, $sql);
}
?>
<strong>Search</strong>
<p>
<form action="test.php" method="POST">
Search: <input type="text" name="searchquery" />
<input type="submit" name="searchname" value="Search">
</form>
<table class="sortable.js" width="100%" cellpadding="1" cellspace="0">
<tr>
<td><strong>1</strong></td>
<td><strong>2</strong></td>
<td><strong>3</strong></td>
<td><strong>4</strong></td>
</tr>
<?php
while ($row = mysqli_fetch_array($result)) {
?>
<tr>
<td><?php echo $row['1']; ?>
<td><?php echo $row['2']; ?>
<td><?php echo $row['3']; ?>
<td><?php echo $row['4']; ?>
<?php } ?>
</table>
Если я повторю $area, он будет отображаться правильно.
Комментарии:
1. Ваша форма и
<select>
имеют то жеid
самое иname
. Измените значения формы и повторите попытку.2. Вы используете как $ _POST, так и $ _GET
3. Первым параметром
mysqli_query()
при использовании в процедурном стиле должна быть ссылка на соединение, с которой вы подключились к MySQL. Во-вторых, этот SQL тупо уязвим для SQL-инъекций!!!! Кроме того, ваша форма и ваш выбор имеют одинаковое имя, измените их.4. Вы пытались запустить
SELECT * FROM '$area'
запрос с подставленным значением? Как вы думаете, почему это должно работать?5. @andrewsi в этом нет ничего плохого — вполне возможно опубликовать форму в
script.php?foo=bar
Ответ №1:
Имя вашей таблицы заключено в кавычки. Либо удалите кавычку, либо используйте escape-символ, например, tick
$sql = "SELECT * FROM `$area` ";
Комментарии:
1. Хотя вы правы, это только одна из многих причин, по которым этот скрипт не работает.
2. Я удалил кавычки, и я получаю то же самое
3. Вы сказали, что если вы жестко закодируете таблицу, как
$sql = "SELECT * FROM example1";
, она работает нормально. Но когда это происходит$area = 'example1'; $sql = "SELECT * FROM $area";
, происходит сбой?4. Если я установлю $area = ‘example1’; $sql = «SELECT * FROM $area»; Это работает. Кажется, я не могу установить $area = ‘$_GET[‘area’]’;
5. @Fabricator Это работает, поэтому я в замешательстве. $area = $_GET[‘area’]; echo $area; $ sql = «SELECT * FROM $area»; Я вижу переменную с этим кодом, но по какой-то причине не работает в запросе
Ответ №2:
В отличие от mysql_(), функции mysqli_ требуют, чтобы соединение было указано явно. В инструкции $query = mysqli_query($sql);
вы использовали msqli_, но не указали соединение (переменная ресурса ссылки mysqli ), вы должны передать соединение в качестве первого параметра вызова следующим $query = mysqli_query($connection, $sql);
образом . А также не забудьте выбрать базу данных. вы можете выбрать базу данных следующим образом. mysqli_select_db($connection,"database_name");
Не забудьте заменить $connection
на имя переменной вашего соединения.
Ответ №3:
Я обнаружил, что следующее было решением моей проблемы.
Я изменил:
<form action="test.php" method="POST">
Для
<form action="test.php?area=<?php echo $area?>" method="POST">
Спасибо всем за помощь!