Запрос MySQL не работает с PHP из $ _GET

#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">
  

Спасибо всем за помощь!