0

これには簡単な答えがあるかもしれませんが、私の人生ではこれを機能させることはできません。

私はPHPとMySQLを使用しており、次のような設定をしています:

    $studentname = mysql_real_escape_string($_POST['sname']);
        $studentnumber = mysql_real_escape_string($_POST['snumber']);
        $course = mysql_real_escape_string($_POST['courseselect']);

        $bike3 = mysql_query("SELECT stoodnumber FROM bikes505 WHERE stoodname='" . $studentname . "'");
        $bikestoods = mysql_fetch_array($bike3);

    while($row = mysql_fetch_array($stoodlistq))
            {
                $stoodentname = $row['stoodname'];
                $stoodentnumber = $row['stoodnumber'];
                //$coursename = $row2['coursename'];
                //$coursecode = $row2['coursecode'];


                if($studentname == $stoodentname && $studentnumber == $stoodentnumber){
                    //$success = 1;
                        //$success = "yupp";
                        //echo "SUCCESS, WE CAN REGISTER YOOOU!";
                        echo "<br>";

                        //echo "INSERT INTO " . $course . "";
                        switch($course){
                            case "Biking Safely":
                                if($studentnumber = $bikestoods[0] or $bikestoods[1]){
                                    echo "Sorry, this student has already registered";
                                } else if($bikecurrent < $bikemax){
                                    mysql_query("INSERT INTO bikes505 VALUES ('" . $stoodentname . "','" . $stoodentnumber . "')");
                                    echo "Yay, successfully registered " . $stoodentname . " - " . $stoodentnumber . " for " . $course;
                                    echo "<br>";
                                } else{
                                    echo "Sorry, class is full!";
                                }
                                break;

...等々。私が抱えている唯一の問題は、同じ名前の生徒が 2 人いる場合、リストの 2 番目の生徒が情報が正しくないとエコーすることです。

たとえば、MySQL テーブルには 'stoodname' と 'stoodnumber' があり、'Jimmy St.James','1010' と 'Jimmy St.James','1090' が両方ともテーブル内のレコードである場合、私だけが登録できます。コースのジミー 1010 であり、ジミー 1090 ではありません。

私は検証方法から離れていますか?それとも、本当に明白な何かが欠けていますか? 最初は、配列の最初の項目しか使用していなかったからだと$bikestoods[0]思っていたので、変更しましたが$bikestoods[0] or $bikestoods[1]、まだ機能しません。

4

3 に答える 3

1

コメントごとに、次のように$stoodlistq定義しました。

$stoodlistq = mysql_query("SELECT * FROM stoodinfo");

後で、次のコード ブロックを使用します。

$studentname = mysql_real_escape_string($_POST['sname']);
$studentnumber = mysql_real_escape_string($_POST['snumber']);
...
while($row = mysql_fetch_array($stoodlistq)) {
    ...
    if($studentname == $stoodentname && $studentnumber == $stoodentnumber){

このコードのwhile()ループはすべてのレコードを反復処理しif-statementますが、POST 変数に対してチェックを行います。POST 変数は、「1 人の学生」に対して 1 つの組み合わせを構成します。したがって、登録できる学生は 1 人だけです。

この問題を解決するには、複数の入力を受け入れるように「学生名」/「学生番号」を送信するフォームを更新するか、学生の名前のみをチェックするようにフォームを更新する必要があります(これif-statementは、より望ましくない状況につながる可能性があります)。 )。

于 2012-08-15T14:41:51.120 に答える
0

を探してクエリを実行していますstoodname。このようなことを行う場合、繰り返し可能な値でこのステートメントを行うのは良くありません。ユーザー名とパスワード、またはあなたが与えたIDでログインしてもらいたいかもしれませんが、ここにいる誰かがより良いアイデアを持っていない限り、名前でそれを行うことはできないと思います.

于 2012-08-15T14:40:48.300 に答える
0
$bikestoods = mysql_fetch_array($bike3);

クエリの最初の結果のみを参照し、bike3[0] と [stoodnumber] no [1] の 2 つの列しかありません。bike3 にあるすべての ID を収集したい場合は、結果を 1 回呪う必要があります。

while($stoodnumbers[] = mysql_fetch_array($bike3)); 
于 2012-08-15T14:41:01.420 に答える