PHP, если Statememt проверить доступные места

0

Я пытаюсь проверить, есть ли доступные места для бронирования деятельности, и я использую инструкцию if для этого. Если инструкция проверяет, если зарезервированныеМатериалы меньше общего количества доступных мест, и если есть доступные места, это должно позволять заказывать и вставлять в clientEvent и обновлять места бронирования в таблице activityEvent. Если нет доступных мест, он должен полностью откликнуться на Fully Booked. Это всегда эхо, что он полностью забронирован. Я не уверен, как вставлять и обновлять в одном quesry.

<?php

session_start();
require("connection.php");

$con=mysqli_connect("$mysql_host","$mysql_user","$mysql_password","$mysql_database");

// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql ="select bookedPlaces, noOfPlaces from activityEvent";
$result = mysqli_query($con,$sql);
$clientID=$_SESSION['clientID'];
$activityEventID =$_SESSION['activityEventID'];

while($row = $result->fetch_assoc())
{
    $booked =$row['bookedPlaces'];
    $noofPlaces = $row['noOfPlaces'];
}

if($booked < $noofPlaces)
{
    echo "You have booked ";
    $sql="Insert into clientEvent(clientID, activityEventID) Values('$clientID','$activityEventID')";

    $sql= "update activityEvent set AvailablePlaces  = ($available -1) where activityEventID = $activityEventID";
    echo "$sql";
}
else
{
    echo "Fully booked ";
}

if (!mysqli_query($con,$sql))
{
    die('Error: ' . mysqli_error($con));
}
?>
  • 0
    Я думаю, что с вашей логикой программы что-то не так. Во-первых, почему вы зацикливаете результаты, если перезаписываете каждый раз, когда $ забронировали? Что вы ожидаете от содержимого переменной $ booked? Затем используйте var_dump и dump $ booked и $ noofPlaces и обновите ваш вопрос результатом.
Теги:

2 ответа

0

Я даю вам вариант: я полагаю, что некоторые строки в файлах reservedPlaces и noOfPlaces имеют значение NULL, поэтому вы должны их сравнить. Вы можете создать функцию счетчика следующим образом:

function counter($row){
$mysqli = new mysqli("localhost", "root", "", "first");
$res = $mysqli->query("SELECT COUNT({$row}) FROM records WHERE {$row} !='' ");  // !=0 or !=[what your no value]
$row = $res->fetch_row();
return $row[0];
}

Теперь вы можете использовать

if(counter('bookedPlaces') < counter('noOfPlacest') {

В этом случае оставьте свой запрос fetch_assoc таким, какой он есть.

  • 0
    Спасибо за помощь, если я делаю это, он не выдает никаких ошибок и делает то, что я хочу, но не вставляет и не обновляет базу данных. Он только проверяет и сообщает, забронирован ли он или нет. Вы знаете, как я мог это исправить? @Nikos
0

Похоже, что весь, если-иначе блок, if($booked < $noofPlaces) находится за пределами вашего в while цикла. Таким образом, оператор if вычисляет неожиданные значения.

Скорректированный код должен выглядеть так.

while ($row = $result->fetch_assoc()) {

    $booked = $row['bookedPlaces'];
    $noofPlaces = $row['noOfPlaces'];

    if ($booked < $noofPlaces) {
        echo "You have booked ";
        $sql = "Insert into clientEvent(clientID, activityEventID) Values('$clientID','$activityEventID')";
        $sql = "update activityEvent set AvailablePlaces  = ($available -1) where activityEventID = $activityEventID";
        echo "$sql";
    }
    else {
        echo "Fully booked ";
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню