2017-09-17 22 views
2

私は予約システムを作ろうとしており、カラム(id、officename、roomname、resstart、resend、resuser)を含むテーブル予約を作成しました。再起動と再送信はDATATIMEタイプです。私は日付ピッカーを持つフォームを作成し、データベースに正常に挿入されます。ユーザーが既に同じ部屋のための時間が存在すると、新しい予約をしてみましたがあれば、私は、フォームがテーブルに挿入しないようにしたいデータベースへの日付と時刻の挿入を防止する

<?php 
session_start(); 
include('includes/config.php'); 
include('includes/checklogin.php'); 
check_login(); 

$username = $_SESSION['username']; 

//code for add courses 
if($_POST['submit']) 
{ 
    $officename=$_POST['officename']; 
    $roomname=$_POST['roomname']; 
    $startdate=$_POST['startdate']; 
    $enddate=$_POST['enddate']; 


    $query="insert into reservations (officename,roomname,resstart,resend,resuser) values(?,?,?,?,?)"; 
    $stmt = $mysqli->prepare($query); 
    $stmt->bind_param('sssss',$officename,$roomname,$startdate,$enddate,$username); 
    if($stmt->execute()){ 
     echo"<script>alert('Your Reservation Has Been Added Successfully');</script>"; 
    }else{ 
    echo"<script>alert('Warning! You cannot Reserve this appointment');</script>"; 
    } 
} 
?> 
<!doctype html> 
<html lang="en" class="no-js"> 
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <meta name="theme-color" content="#3e454c"> 
    <title>Make New Reservation</title> 
    <link rel="stylesheet" href="css/awesome-bootstrap-checkbox.css"> 
    <link rel="stylesheet" href="css/style.css"> 
<script type="text/javascript" src="js/jquery-1.11.3-jquery.min.js"></script> 
<script type="text/javascript" src="js/validation.min.js"></script> 

    <!--Load Script and Stylesheet --> 
    <script type="text/javascript" src="jquery.simple-dtpicker.js"></script> 
    <link type="text/css" href="jquery.simple-dtpicker.css" rel="stylesheet" /> 
$(document).ready(function() { 
     $("#date").datepicker({ dateFormat: "yy-m-d" }); 
    }); 
</script> 
</head> 
<body> 
    <?php include('includes/header.php');?> 
    <div class="ts-main-content"> 
     <?php include('includes/sidebar.php');?> 
     <div class="content-wrapper"> 
      <div class="container-fluid"> 

       <div class="row"> 
        <div class="col-md-12"> 

         <h2 class="page-title">Make New Reservation</h2> 

         <div class="row"> 
          <div class="col-md-12"> 
           <div class="panel panel-default"> 
            <div class="panel-heading">Make New Reservation</div> 
            <?php echo "<h4>You Logged in As: <span>$username</span></h4>"; 

            ?> 
            <div class="panel-body"> 
            <?php if(isset($_POST['submit'])) 
{ ?> 
<p style="color: red"><?php echo htmlentities($_SESSION['msg']); ?><?php echo htmlentities($_SESSION['msg']=""); ?></p> 
<?php } ?> 
             <form method="post" class="form-horizontal"> 

              <div class="hr-dashed"></div> 

             <div class="form-group"> 
               <label class="col-sm-2 control-label">Select Office </label> 

               <div class="col-sm-8"> 
               <Select name="officename" class="form-control" required> 
               <option value="Select Office">Select Office</option> 
               <?php 

               $sql="select * from offices"; 

               $stmt2 = $mysqli->prepare($sql); 
               //$stmt2->bind_param('i',$roomno); 

               //$stmt->bind_param('i',$aid); 
               $stmt2->execute() ;//ok 
               $res=$stmt2->get_result(); 



               while ($row=$res->fetch_object()) { 
                echo "<option value=". $row->officename .">" . $row->officename . "</option>"; 
               } 



               ?> 


               </Select> 
               </div> 
               </div> 


               <div class="form-group"> 
               <label class="col-sm-2 control-label">Select Room </label> 
               <div class="col-sm-8"> 
               <Select name="roomname" class="form-control" required> 
               <option value="Select Room">Select Room</option> 
               <?php 

               $sql="select * from rooms"; 

               $stmt2 = $mysqli->prepare($sql); 
               //$stmt2->bind_param('i',$roomno); 

               //$stmt->bind_param('i',$aid); 
               $stmt2->execute() ;//ok 
               $res=$stmt2->get_result(); 



               while ($row=$res->fetch_object()) { 
                echo "<option value=". $row->roomname .">" . $row->roomname . "</option>"; 
               } 



               ?> 


               </Select> 
               </div> 
               </div> 



               <div class="form-group"> 
                <label class="col-sm-2 control-label">Start time and date</label> 
                <div class="col-sm-8"> 
                <input type="text" autocomplete="off" name="startdate" value="" required> 
                <script type="text/javascript"> 
                 $(function(){ 
                  $('*[name=startdate]').appendDtpicker(); 
                 }); 
                </script> 
                </div> 
               </div> 

               <div class="form-group"> 
                <label class="col-sm-2 control-label">End time and date</label> 
                <div class="col-sm-8"> 
                <input type="text" autocomplete="off" name="enddate" value="" required> 
                <script type="text/javascript"> 
                 $(function(){ 
                  $('*[name=enddate]').appendDtpicker(); 
                 }); 
                </script> 
                </div> 
               </div> 



              <div class="col-sm-8 col-sm-offset-2"> 
              <input class="btn btn-primary" type="submit" name="submit" value="Make New Reservation"> 
              </div> 
              </div> 

             </form> 

            </div> 
           </div> 


          </div> 




          </div> 
         </div> 

        </div> 
       </div> 


      </div> 
     </div> 
    </div> 

</body> 

</html> 

は、ここに私のPHPファイルです。ルーム1は1:00〜2:00に予約されているので、次のユーザーは1:10〜2:00にルーム1を登録することはできませんが、同時にルーム2を登録することができます。

ありがとうございます。

+0

FYI、私たちはそれだけで気が散るだ、巨大なHTMLダンプが質問を理解することは必要ありません。 – deceze

答えて

0

重複を防ぐ最もよい方法は、データベースに一意のキーを作成することです。

ALTER TABLE reservations ADD CONSTRAINT constr_reservations UNIQUE (roomname,resstart,resend,resuser) 

この場合、コードを変更しないでください。 すでに挿入失敗

if($stmt->execute()){ 
     echo"<script>alert('Your Reservation Has Been Added Successfully');</script>"; 
    }else{ 

     //ROOM DUPLICATE CASE!!! 

     echo"<script>alert('Warning! You cannot Reserve this appointment');</script>"; 
    } 
+1

しかし、それはresstarと再送の間の範囲を妨げません、私はresstarと再送信の間の範囲を防ぎたいです。また、ルーム名については、同時に予約されていた場合には防止する必要がありましたが、データベースにすでに予約されていない場合は問題なく登録できます。 – Ahmed

+0

あなたは必要なcoluonsを選択することができますが、基本コンセプトは、あなたのデータベースではなく、あなたのコードに制約を重複して追加するのを防ぎます。 –

+0

私は私が返答に厳密に記述したことを正確に行うことができますか? – Ahmed

1

が要求roomnumber、新たな予約時間を持つテーブルの予約からのカウントを取り、そしてレコードがresstart間のテーブルに存在するかどうかを確認し、時間を再送信をキャッチしているため。

enter image description here

私が正しくあなたの質問を理解している場合、下記の2つのクエリのいずれかが動作するはずです。

select count(1) from reservations where roomname = 'XYZ' and '17-SEP-17' between resstart and resend; 

または

select count(1) from reservations where roomname = 'XYZ' and to_date('17-SEP-17') between resstart and resend; 
+0

私が欲しいのは、データベース内の同じ部屋の同じ日付の重複を防ぐことです例えば、私は複数の部屋を持っており、私は部屋の予約をすることができるシステムを作っていますが、私は1つの部屋を同時に2度予約することは望ましくありません。 – Ahmed

+0

はい@Ahmed、このクエリを実行する必要があります部屋が部屋番号のために予約されているかどうかをチェックし、フロントエンドで選択した部屋を再スタートさせます。カウントが0より大きい場合、指定された開始日に予約された部屋が既に存在します。したがって、ifステートメントを使用することにより、挿入コードを実行することはできません。 この場合、再開日時が使用できないため、再送信の基準を確認する必要はありません。 –

+0

はい、私はあなたの考えをyouuuに感謝しました。しかし、これらの値をどのように変数に割り当てることができ、クエリを実行するのに最適な場所を教えていただけますか? – Ahmed

関連する問題