2016-12-14 2 views
2
  • 短い質問をインクリメントするインクリメント値を比較します。私は(... $ending[0] && $starting[0], $ending[1] && $starting[1]、など)変数($y)がデータベースから間に複数の配列の値であるかどうかを確認しようとしています。 "" $yのいずれかの場合は、echo "statement"です。午後7時から

私は午前9時からダウン30分間隔の低下をインクリメントするforループを使用しています。PHPは、アレイ

これらの時間のいずれかがデータベースに保存されている時間であれば、代わりには利用できません。と表示されます。

今私は、ドロップダウンの時間は、データベース内の開始時刻と終了時刻「の間」と同様にそれらの「利用できない」ようにすることです「場合」を参照してくださいする必要があります。

私は手動でどのアレイキーを比較すればよいのか分かりませんが、私の質問は次のとおりです。アレイのすべての値に対してドロップダウン値をチェックできますか?

例: ドロップダウンの開始:09:00 am 09:30 am 10:00 amまでは07:30 pmまでです。終了ドロップダウン:09:30午前10:00午前10時30分から午後8時まで。アポイントのデータベースに保存されている開始時刻と終了時刻が午前9時(開始)、午前10時(終了)の場合、対応する開始時刻と終了時刻のドロップダウンに「使用不可」が表示されます。予約を取る。私が尋ねるのは、 "between between"値のすべてを識別する方法です... 09:00〜10:00amスロットがすでに予約されている場合は、たとえば09:30です。開始時刻または終了時刻にすることはできません。

$sql_slots = "SELECT * FROM XXXXX WHERE date = '$query_date' ORDER BY XXXXX ASC"; 

    $result_slots = mysqli_query($connection, $sql_slots); 

    $open = strtotime("9:00am"); 

    $close = strtotime("9:30am"); 

    $starting = array(); 
    $ending = array(); 

      while($row_result_slots = mysqli_fetch_assoc($result_slots)){ 

       $starting[] = $row_result_slots['start_time']; 

       $ending[] = $row_result_slots['end_time'];  

       } 

    echo' 
    <select name="start_time">'; 

     for($b = 0; $b <= 20; $b++){ 

      $y = strtotime(($b*30) . " Minutes", $open); 

      $the_time = date("h:ia", $y); 

      // Here, instead of only comparing the first values in the array, I need to match it up against $ending[1] & $starting[1], $ending[2] & $starting[2], etc... 

if(in_array($the_time, $starting) || ($y <= strtotime($ending[0]) && $y >= strtotime($starting[0]))){ 
       echo "<option>Not Available<br></option>"; 
       } else { 
       echo "<option>" . $the_time . "<br></option>"; 
       } 
      } 

     echo'</select>'; 
+0

開始点と終了点のダミーデータで選択内容がどのように見えるのか教えてください。 – nerdlyist

+0

ドロップダウンを開始: 09:00 am 09:30 am 10:00 am など07:30まで。 エンドドロップダウン: 09:30 am 10:00 am 10:30 am などまで08:00 pmまで。 アポイントのデータベースに保存されている開始時刻と終了時刻が午前10時(開始時)、午前10時(終了時)の場合、ドロップダウンに対応する開始時刻と終了時刻の「使用不可」が表示されるため、ユーザー予約を二重に予約することはできません。私が尋ねるのは、 "between between"値のすべてを識別する方法です... 09:00〜10:00amスロットがすでに予約されている場合は、たとえば09:30です。開始時刻または終了時刻にすることはできません。 – Shane

+0

まず、その情報で質問を編集する必要があります。次に、予定の通常の長さは何ですか。最後に、なぜ開始時間は終了時間に関係していますか? – nerdlyist

答えて

0

どうですか?

$sql_slots = "SELECT * FROM XXXXX WHERE date = '$query_date' ORDER BY XXXXX ASC"; 

$result_slots = mysqli_query($connection, $sql_slots); 

$open = strtotime("9:00am"); 

$close = strtotime("9:30am"); 

$reserved = array(); 

     while($row_result_slots = mysqli_fetch_assoc($result_slots)){ 

      $start = $row_result_slots['start_time']; 

      while ($start <= $row_result_slots['end_time']) { 

       $reserved[$start] = true; 

       $start = date("Y/m/d h:i:s", strtotime($start . "+30 minutes")); 
      } 
     } 

echo '<select name="start_time">'; 

    for($b = 0; $b <= 20; $b++){ 

     $y = strtotime(($b*30) . " Minutes", $open); 

     $the_time = date("h:ia", $y); 

     if(isset($reserved[$the_time]){ 
      echo "<option>Not Available<br></option>"; 
      } else { 
      echo "<option>" . $the_time . "<br></option>"; 
      } 
     } 

    echo'</select>'; 
+0

それの背後にある論理は理にかなっています。これについては、ループを連続して実行し、ページを読み込まないようにしています。私はいくつかの行方不明 ")と"; "それを行う前に、それはまだ継続的にループしています。 – Shane

+0

ループに問題があります。あなたのデータセットがありません –

+0

'$ reserved'の日付フォーマットがデータベースのデータフォーマットと一致していることを確認してください。 'while'に' echo' + 'break'を使って配列を生成します。 –

0

以下は私が思いついたものです。これはdo whileループを使用し、reserved配列を作成します。この配列は、アポイントメントに指定されているものの間で常に満たされます。

私は自分のアレイを使用するようにデータを更新しましたが、あなたのmysqliは正しいものを更新しました。そうでない場合は、必要に応じて閲覧するためのテストコードを残しました。私はまた、optionに何らかのテキストを出力すると、disabledattributeを使用しました。

<?php 
$sql_slots = "SELECT * FROM XXXXX WHERE date = '$query_date' ORDER BY XXXXX ASC"; 

$result_slots = mysqli_query($connection, $sql_slots); 

$open = strtotime("9:00am"); 

$close = strtotime("7:00pm"); 

$space = 900; //15min * 60 seconds space between? 
       //This seems more normal for people to see. 

//Simulate these appoinments 
/* 
$query_results = array(
    array( 
     "start_time" => "9:00am", 
     "end_time" => "9:30am" 
    ), 
    array( 
     "start_time" => "10:30am", 
     "end_time" => "11:30am" 
    ), 
    array( 
     "start_time" => "11:45am", 
     "end_time" => "12:30pm" 
    ) 
); 
*/ 
$reserved = array(); 


while($row_result_slots = mysqli_fetch_assoc($result_slots)){ 
    //**NOTE**: Make sure these are times or use strtotime() 
    $next_slot = $reserved[] = strtotime($row_result_slots['start_time']); 
    $end_time = strtotime($row_result_slots['end_time']); 

    while($next_slot < $end_time){ 
     $next_slot += $space; 
     $reserved[] = $next_slot; 
    } 
} 
/* 
foreach($query_results as $appoinment) { 

    $next_slot = $reserved[] = strtotime($appoinment['start_time']); 
    $end_time = strtotime($appoinment['end_time']); 

    while($next_slot < $end_time){ 
     $next_slot += $space; 
     $reserved[] = $next_slot; 
    } 
} 
*/ 
echo'<select name="start_time">'; 
$current = $open; 
do { 
    $disabled = in_array($current, $reserved) ? 'disabled' : ''; 
    echo '<option ' . $disabled . '>' . date("h:ia", $current) . '</option>'; 
    $current += $space; 

} while($current <= $close); 

echo'</select>';