PHP не выполняет функции с SQL правильно - PullRequest
0 голосов
/ 03 ноября 2019

Я поставлю свой код ниже. Я в основном проверяю значение в базе данных, и если оно равно 1 или 0, я хочу изменить его на противоположное (поэтому, если 1 изменить его на 0, если 0 изменить на 1). Если я выполняю одну инструкцию SQL без использования функции (но тогда она работает только один раз), она работает. Но если я хочу выполнить определенную функцию с ним в зависимости от того, какое значение в данный момент находится, это, кажется, не работает. Вы знаете, что я здесь делаю не так?

<?php 
$date_id = $_POST['dateID'];
$con = mysqli_connect("localhost","root","","secret_name");
$sql = "SELECT * FROM date_list WHERE date_id = ".$dateID;
$result = mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($result)){
    $occupied = $row['occupied'];
    if($occupied == 1){
        decross_entry();
    } elseif( $occupied == 0){
        cross_entry();
    }else{
        echo "Error"
    }
}

function decross_entry(){
    $dateID = $_POST['dateID'];
    $con_2 = mysqli_connect("localhost","root","","secret_name");
    $sql_edit = "UPDATE date_list SET occupied= '0' WHERE date_id = ".$dateID;
    if($con_2 -> connect_errno){
        echo "Failed to connect to database!" . $con_2->connect_error;
    }
    if ($con_2 -> query($sql_edit) === TRUE)
    {
        echo "saved!";
    } else {
        echo "error: " .$sql_edit."<br>".$con_2->error;
    }
}

function cross_entry(){
    $dateID = $_POST['dateID'];
    $con_2 = mysqli_connect("localhost","root","","secret_name");
    $sql_edit = "UPDATE date_list SET occupied= '1' WHERE date_id = ".$dateID;
    if($con_2 -> connect_errno){
        echo "Failed to connect to database!" . $con_2->connect_error;
    }
    if ($con_2 -> query($sql_edit) === TRUE)
    {
        echo "saved!";
    } else {
        echo "error: " .$sql_edit."<br>".$con_2->error;
    }
}
?>

1 Ответ

0 голосов
/ 03 ноября 2019

Если единственными возможными значениями occupied являются 0 и 1, то вы можете делать то, что хотите, в одном запросе без необходимости сначала искать значение occupied:

UPDATE date_list
SET occupied = 1 - occupied 
WHERE date_id = ?

В PHP, используя подготовленный запрос, чтобы избежать SQL-инъекция :

$date_id = $_POST['dateID'];
$con = mysqli_connect("localhost","root","","secret_name");
$sql = "UPDATE date_list SET occupied = 1 - occupied WHERE date_id = ?";
$stmt = $con->prepare($sql);
$stmt->bind_param('i', $date_id); // use 's' if $date_id is not an integer
$stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...