условия множественного выбора в php mysqli

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

у меня есть таблица, подобная приведенной выше

Я хочу выбирать и отображать стоимость, когда пикап и размещение совпадают с выбранными пользователем из выпадающего списка с указанными выше параметрами.

 $result = mysqli_query($conn,"SELECT * FROM location
WHERE Pickup='". $pick. "' ");

while($row = mysqli_fetch_array($result))
{
    echo "You have to pay " . $row['Cost'];
    echo "<br>";
}
 

приведенный выше код даст мне 4 варианта, поскольку я не проверял равенство dropLocation .

 SELECT * FROM location
WHERE Pickup='". $pick. "' AND DropLocation='". $drop. "'  "
 

Это не работает.
Как обрабатывать несколько условий?

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

1. Можете ли вы объяснить, что вы имеете в виду It is not working ?

2. я думаю, что $ drop пуст или что-то нулевое

3. Этот второй запрос выглядит корректным и разумным с технической точки зрения, проблема не в этом. Но это пахнет уязвимостью атаки sql, если вы объединяете ввод на стороне пользователя в строку запроса подобным образом…

4. Покажите нам, откуда $drop пришли, и проверьте, пусто ли. Также это не то, как вы используете mysqli_* .

5. myPick и myDrop являются атрибутами имен моего выпадающего списка $pick = isset($_POST[‘myPick’]) ? $ _POST[‘myPick’]: «; $ drop = isset($ _POST[‘myDrop’]) ? $ _POST[‘myDrop’]: «;

Ответ №1:

Попробуйте это

похоже, что в вашем коде есть уязвимость для атаки sql, попробуйте использовать подготовленную инструкцию mysqli.

             <?php

            $stmt = $conn->prepare("SELECT * FROM location WHERE Pickup=? AND DropLocation=?");

            $stmt->bind_param('ss',$pick,$drop);

            //The argument may be one of four types:

            //i - integer
            //d - double
            //s - string
            //b - BLOB
            //change it by respectively 

            $stmt->execute();

            $get_result =$stmt->get_result();

            $row_count= $get_result->num_rows;

            if($row_count>0)
            {
                    while($row = mysqli_fetch_array($get_result))
                    {
                        echo "You have to pay " . $row['Cost'];
                        echo "<br>";
                    }


            }
             else
             {
                 echo "result set empty";
             }



             $stmt->close();
             $conn->close();

            ?>
 

Ответ №2:

Попробуйте это:

 if(isset($_POST['myPick']) amp;amp; !isset($_POST['myDrop'])){
$result = mysqli_query($conn,"SELECT * FROM location
WHERE Pickup='". $pick. "' ");
}else if(!isset($_POST['myDrop']) amp;amp; isset($_POST['myPick'])){
$result = mysqli_query($conn,"SELECT * FROM location
WHERE DropLocation='". $drop. "' ");
}else if(isset($_POST['myDrop']) amp;amp; isset($_POST['myPick'])){
$result = mysqli_query($conn,"SELECT * FROM location
WHERE Pickup='". $pick. "' AND DropLocation='". $drop. "' ");
}

while($row = mysqli_fetch_array($result))
{
    echo "You have to pay " . $row['Cost'];
    echo "<br>";
}