php和mysql查询问题

标签 php mysql get

我有一个像这样的简单表格:table 。表单提交数据以检查此表。

    <form action="" method="GET">
    <a href="">From</a>
    <select name="startpoint" id="from">
        <option >Hat Yai Airport</option>
        <option >Pak Bara</option>
        <option >Kohlipe</option>
    </select>
    <a href="">To</a>
    <select name="endpoint" id="to">
        <option >Pak Bara</option>
        <option >Hat Yai Airport</option>
        <option >Kohlipe</option>
    </select>
    <label for="Date">Date</label>
    <input type="text" name="date_up" id="datepicker">
    <h4 style="margin-top: 30px;">Passengers</h4>
    <a href="">Adults</a>
    <select name="adult" id="from">
        <option >1</option>
        <option >2</option>
        <option >3</option>
        <option >4</option>
        <option >5</option>
    </select>

    <a href="">< 12 years</a>
    <select name="juvenile" id="to">
        <option >0</option>
        <option >1</option>
        <option >2</option>
        <option >3</option>
        <option >4</option>
    </select>
        <a href=""> < 7 years</a>
    <select name="kids" id="from">
        <option >0</option>
        <option >1</option>
        <option >2</option>
        <option >3</option>
    </select>
    <a href=""> < 3 years</a>
    <select name="child" id="to">
        <option >0</option>
        <option >1</option>
        <option >2</option>
        <option >3</option>
    </select>
    <input type="submit" value="Search" class="submit" name="submit">

这是我为检查此表所做的初始操作。

     $servername = "localhost";
     $username = "root";
     $password = "";
     $dbname = "hello";


// Create connection
 $conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
 }      

      if (isset($_GET['submit'])) {


            $date = $_GET['date_up'];
            $startPlace = $_GET['startpoint'];
            $endPlace = $_GET['endpoint'];
            $adult = $_GET['adult'];
            $juvenile = $_GET['juvenile'];
            $kids = $_GET['kids'];
            $child = $_GET['child'];

            $totalPassenger = $adult + $juvenile + $kids + $child;




            $query = "SELECT * FROM taxi WHERE date_up = '$date'";


            $result = mysqli_query($conn, $query);


            if (!$result) {
            echo "Could not successfully run query from DB: " . mysqli_error();
                exit;
            }

            if (mysqli_num_rows($result) == 0) {
                $nodate = "No date matches for speedboat";
                echo $nodate;

            } else {
                while ($row = mysqli_fetch_assoc($result)) {
                $start = $row["startpoint"];
                $end = $row["endpoint"];
                $standards= $row["standards"];
                $deluxe= $row["deluxe"];


                //print_r($deluxe);
            } 

            if (($start === $startPlace && $end === $endPlace) && (what can be the right query?????)) {
                $success = "seats are found in taxi. total seat: user choses seat for $totalPassenger people";
                echo $success;
            } 
          }


        }

我们共有10辆出租车(标准5辆,豪华5辆)。一辆出租车可供四个人乘坐。我想检查乘客总数是否超过 4 人但少于 8 人,如果这是真的,我想检查标准列或豪华列是否都有至少两辆出租车(int 2)并返回一些东西。如果乘客总数超过 8 人但少于 12 人,我需要检查这两列是否有至少 3 辆出租车,这将一直持续到我达到 20 人。因为如果总乘客超过 16 人但少于 20 人,我们需要 5 辆出租车,这是我们的限制。如果用户在 20 点之后提供更多乘客,我们可以返回“没有足够的出租车供您查询”。我怎样才能检查这个模式。

我还需要返回至少一列结果。例如,用户搜索 7 位乘客,我检查并发现在豪华列中我有 2 辆出租车,但在标准列中我有 1 辆出租车,所以我需要将豪华列匹配结果返回给用户(或者使查询更多)具有挑战性的是,我们可以退回一辆标准出租车和一辆豪华出租车,对吧?)。我怎样才能实现这个场景。请帮我。

最佳答案

此代码使用ajax来获取数据而不刷新页面。我已经使用了PDO,你可以将其更改为mysqli

<?php  
$db = new PDO('mysql:host=localhost; dbname=data','root','');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$results = $db->query('SELECT * FROM taxi');
//this is a function for creating a table
function availableTaxis($results){ ?>
<table>
    <tr>
        <th>ID</th>
        <th>from</th>
        <th>to</th>
        <th>Available On</th>
        <th>standard</th>
        <th>deluxe</th>
    </tr>
    <?php foreach ($results as $value) : ?>
        <tr>
            <td><?php echo $value['taxi_id']; ?></td>
            <td><?php echo $value['startpoint']; ?></td>
            <td><?php echo $value['endpoint']; ?></td>
            <td><?php echo $value['date_up']; ?></td>
            <td><?php echo $value['standards'] .' ('.($value['standards'] * 4).' Passengers)'; ?></td>
            <td><?php echo $value['deluxe'].' ('.($value['deluxe'] * 4).' Passengers)'; ?></td>
        </tr>
    <?php endforeach; ?>
</table>
  <?php } ?> <!-- end of a function -->
  <!-- this is another function for getting taxi routes -->
  <?php function routes(){ ?>
  <br>
   <form>
   <a href="">From</a>
 <select name="startpoint" onchange="available(this.value,to.value)" id="from">
    <option value="Hat Yai Airport">Hat Yai Airport</option>
    <option >Pak Bara</option>
    <option >Kohlipe</option>
</select>
<a href="">To</a>
<select name="endpoint" onchange="available(from.value,this.value)" id="to">
    <option >Pak Bara</option>
    <option >Hat Yai Airport</option>
    <option >Kohlipe</option>
</select>
<p id="availabe_date"></p>
<div id="disable">
    <label for="Date">Date</label>
<input type="date" name="date_up" value="<?php echo date('Y-m-d'); ?>" id="datepicker" onchange="available(from.value,to.value)">
<h4 style="margin-top: 30px;">Passengers</h4>
<a href="">Adults</a>
<select name="adult" id="adult">
    <option >1</option>
    <option >2</option>
    <option >3</option>
    <option >4</option>
    <option >5</option>
</select>

<a href=""> 12 years</a>
<select name="juvenile" id="juvenile">
    <option >0</option>
    <option >1</option>
    <option >2</option>
    <option >3</option>
    <option >4</option>
</select>
    <a href="">  7 years</a>
<select name="kids" id="kids">
    <option >0</option>
    <option >1</option>
    <option >2</option>
    <option >3</option>
</select>
<a href="">  3 years</a>
<select name="child" id="child">
    <option >0</option>
    <option >1</option>
    <option >2</option>
    <option >3</option>
</select>
<br>
<p id="error" style="color:red"></p>
<br>
<input type="button" value="Search" onclick="results(datepicker.value,startpoint.value,endpoint.value,adult.value,juvenile.value,kids.value,child.value)" id="submit" name="submit">
</div>
</form>
<?php } ?><!-- end of a function -->
<!DOCTYPE html>
<html>
 <head>
<title></title>
<style type="text/css">
table,th,td{
    border: 1px solid #000;
}
th{
    width: 120px;
    background-color: #000;
    color: #fff;
    text-transform: capitalize;
}
table {
border-collapse: collapse;
}
</style>
<script type="text/javascript">
//creating ajax 
function available(from,to){
 var query = "from="+from+"&"+"to="+to;
var data = new XMLHttpRequest();
data.open("POST","answer.php");

data.onreadystatechange = function(){
  if(data.readyState === 4 && data.status === 200){
    document.getElementById('availabe_date').innerHTML = data.responseText;
    if(data.responseText.indexOf('is not avalaible') > -1){
      document.getElementById('disable').style.display = 'none';
    }else{
        document.getElementById('disable').style.display = 'inline';
        if(data.responseText.indexOf(datepicker.value) == -1){
             document.getElementById('error').style.display = 'inline';
            document.getElementById('error').innerHTML = 'There\'s no taxi on : '+datepicker.value +', from <span style="font-style:italic;text-decoration:underline">'+from+'</span> to <span style="font-style:italic;text-decoration:underline">'+to+'</span>';
            document.getElementById('submit').style.display = 'none';
            document.getElementById('res').style.display = 'none';
        }else{
            document.getElementById('error').style.display = 'none';
            document.getElementById('submit').style.display = 'inline';
            document.getElementById('res').style.display = 'inline';
            //document.getElementById('error').innerHTML = 'There\'s no taxi on : '+datepicker.value; 
        }
    }
  }
}
data.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
data.send(query);
 }
  function results(date_up,startpoint,endpoint,adult,juvenile,kids,child){
 var query = 'date_up='+date_up+'&'+'startpoint='+startpoint+'&'+'endpoint='+endpoint+'&'+'adult='+adult+'&'+'juvenile='+juvenile+'&'+'kids='+kids+'&'+'child='+child;
var data = new XMLHttpRequest();
data.open("POST","results.php");

data.onreadystatechange = function(){
  if(data.readyState === 4 && data.status === 200){
    document.getElementById('res').innerHTML = data.responseText;

  }
}
data.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
data.send(query);
 }
   </script>
</head>
<body>
 <?php availableTaxis($results); 

  routes();
 ?>
 <div id="res">
 </div>
 </body>
 </html>

answer.php 文件

<?php 
 $from = $_POST['from'];
 $to = $_POST['to'];
 $db = new PDO('mysql:host=localhost; dbname=data','root','');
 $results = $db->prepare('SELECT * FROM `taxi` WHERE `startpoint` = ? AND `endpoint` = ?');
 $results->execute(array($from,$to));
 $rows = $results->fetchAll(PDO::FETCH_ASSOC);
 $avalaible = "Avalaible on: <br>";
 for ($i=0; $i < count($rows) ; $i++) { 
    $avalaible = $avalaible. $rows[$i]['date_up'].'<br>';
 }
 if(count($rows) > 0){
   echo "$avalaible ";
 }else{
echo "Taxi from <span style='font-style:italic;text-decoration:underline'>$from</span> to <span style='font-style:italic;text-decoration:underline'>$to</span> is not avalaible";
}
?>

结果.php

<?php 
        $db = new PDO('mysql:host=localhost; dbname=data','root','');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $date = $_POST['date_up'];
        $startPlace = $_POST['startpoint'];
        $endPlace = $_POST['endpoint'];
        $adult = $_POST['adult'];
        $juvenile = $_POST['juvenile'];
        $kids = $_POST['kids'];
        $child = $_POST['child'];

        $totalPassenger = $adult + $juvenile + $kids + $child;
        $taxis = ceil($totalPassenger/4);
        $results = $db->prepare('SELECT * FROM taxi where (startpoint = ? AND endpoint = ?) AND (date_up = ?) AND (standards >= ? OR deluxe >= ?)');
        try {
            $results->execute(array($startPlace,$endPlace,$date,$taxis,$taxis));
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
        $rows = $results->fetchAll(PDO::FETCH_ASSOC);
        $seats = ($rows[0]['standards']+$rows[0]['deluxe']) * 4;
        $taxis = $rows[0]['standards']+$rows[0]['deluxe'];
        echo 'Found '.$seats." seats, in $taxis taxis:<br>".($rows[0]['standards']*4).' Standards seats.<br>'.($rows[0]['deluxe']*4).' Deluxe seats.<br>For '.$totalPassenger.' passengers';
?>

关于php和mysql查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651144/

相关文章:

php 和 rails 在同一台服务器上 linux 托管

php - 根据 WooCommerce 中的用户类型启用不同的产品变体价格

mysql - sql在数据库中插入错误的值

ruby-on-rails - button =作为elasticsearch搜索表单的最后一个参数附加

php - mysql A队总进球数

php - 显示 2 个日期之间的行数

php - 如何有效地使用 laravel 5.5 eloquent 进行复杂的连接和分组

php - 使用 PHP 在 MySQL 中保存意外时间格式的最安全方法

python - 使用 Python 访问 Azure API

image - Go Code 在 go test 和 go run 中的行为不同