1

医療ウェブサイトのカレンダーを作成しています。カレンダーの機能は、2013-05-01 のような日付をクリックすると、その日付がデータベースに追加され、午前 9 時から午後 6 時までの時間を選択する必要がある次のページに移動することです。たとえば、午前 9 時のような任意の時間を選択すると、コードは、日付が「2013-05-01」で時刻が「09:00:00」のエントリがデータベースに既に存在するかどうかを確認します。 、私は時間ページにリダイレクトされ、この時間はすでにスケジュールされているというメッセージが表示されます。次に、「10:00:00」などの別の時間をクリックすると、データベースにエントリがないかどうかが再度確認されます。日付が「2013-05-01」で時刻が「10:00:00」の場合、このエントリが追加されます....

データベースにすでにエントリがある場合、「この時間はすでにスケジュールされています」という通知が表示され、時間「10:00:00」をクリックすることに成功しましたが、私のSQLコードにいくつかのエラーがありますが、phpmyadminで実行されているコードをチェックしたところ、問題なく動作しています....何が問題なのかわかりません....

これは私が得るエラーです:

qry_check update failed: SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、1 行目の「near '2013-05-01」AND time='10:00:00'' を使用する正しい構文を確認してください。

カレンダー ページ 're_sch_time.php' のコードは次のとおりです。

<?php 
if(isset($_GET['result']))
{
    $result=$_GET['result'];
    if($result=='false')
    {
        echo "<p>Sorry! This time is already selected for appointment</p>";
    }       
    else
    {
        echo "<p>Appointment Reschedualed</p>";     
    }
}
?>      

<?php 
if(isset($_GET['id']))
{
    $id=$_GET['id'];
}
if(isset($_GET['date']))
{
    $dat=$_GET['date'];
}
?>

<a href="re_sch_time_selected.php?time=nine&&id=<?php echo $id; ?>&&date=<?php echo $dat ?>">9</a>
<a href="re_sch_time_selected.php?time=ten&&id=<?php echo $id; ?>&&date=<?php echo $dat ?>">10</a>

これは、時間を選択できるページコード 're_sch_time_selected.php' です。

<?php
if(isset($_GET['time']))
{   
    $time=$_GET['time'];
    if(isset($_GET['id']))
    {
        $id=$_GET['id'];
    }
    if(isset($_GET['date']))
    {
        $dat=$_GET['date'];
    }
    switch($time)
    {
        case "nine":
            $qry_check=mysql_query("SELECT * FROM patient WHERE date='".$dat."' AND time='09:00:00'");
            if(!$qry_check)
            {
                die("qry_check update failed ".mysql_error());
            }
            else
            {       
                    while($time_check=mysql_fetch_array($qry_check))
                    { 
                        echo $time_check['time'];
                        $pos=strpos($time_check['time'],'09:00:00');
                        if($pos===false)
                        {
                            $qry_time=mysql_query("UPDATE patient SET time='09:00:00' WHERE id='".$id."'");
                            if(!$qry_time)
                            {
                                die("qry time update failed:".mysql_error());
                            }
                            else{
                                header("Location: re_sch_time.php?result=true&id='".$id."'&date='".$dat."'");
                            }
                        }
                        else{
                            header("Location: re_sch_time.php?result=false&id='".$id."'&date='".$dat."'");
                        }
                    }// while time check ends here
                }
                break;              
            case "ten":
               $qry_check=mysql_query("SELECT * FROM patient WHERE date='".$dat."' AND time='10:00:00'");
                if(!$qry_check)
                {
                    die("qry_check update failed: ".mysql_error());
                }
                else
                {       
                    while($time_check=mysql_fetch_array($qry_check))
                    { 
                        echo $time_check['time'];
                        $pos=strpos($time_check['time'],'10:00:00');
                        if($pos===false){
                            $qry_time=mysql_query("UPDATE patient SET time='10:00:00' WHERE id='".$id."'");
                            if(!$qry_time){
                                die("qry time update failed:".mysql_error());
                            }else{
                                header("Location: re_sch_time.php?result=true&id='".$id."'&date='".$dat."'");
                            }
                        }
                        else{
                            header("Location: re_sch_time.php?result=false&id='".$id."'&date='".$dat."'");
                        }
                    }// while time check ends here
                }
                break;
            }

注:このコードは、データベースにまだない日付と時刻を選択している場合、つまり、日付が「2013-05-01」で時刻が「09:00:00」のエントリがない場合のように、まったく問題なく実行されます。エラーが発生せず、エントリがテーブルに挿入されます....

4

4 に答える 4

1

PHP の二重引用符は、文字列内の変数を解析するために使用されるため、

"SELECT * FROM patient WHERE date='$dat' AND time='09:00:00'"

完全に問題ありません。それに従ってすべてのクエリを修正すれば、準備完了です。

于 2013-05-03T17:24:43.157 に答える
1

エラーメッセージでかなり明確であるため、どこかでアポストロフィをいじっています。各日付の後に二重のアポストロフィがあるので、よく見てください。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2013-05-01'' AND time='10:00:00''
于 2013-05-03T17:16:43.767 に答える
1

あなたのエラー コードから、2 つの異なるスポストロフィーのセットを確認できます / またはそれらが二重になっています

SQL 構文にエラーがあります。'2013-05-01' -> HERE ' <- AND time='10:00:00' -> HERE ' <-行 1 で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

編集:

あなたの最初のコードで、なぜ「&」を二重にしたのですか?

<a href="re_sch_time_selected.php?time=ten&&id=<?php echo $id; ?>&&date=<?php echo $dat ?>">10</a>

おそらく次の$_GET['id']ような結果が得data&られます。mysqliまたはエスケープシーケンスを使用していないため、SQLクエリが台無しになります。

于 2013-05-03T17:17:44.040 に答える