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;

...等等。我遇到的唯一问题是,如果我有两个同名的学生,列表中的第二个学生会回显信息不正确。

例如,MySQL 表有 'stoodname' 和 'stoodnumber',如果 'Jimmy St.James','1010' 和 'Jimmy St.James','1090' 都是表中的记录,它只会让我注册课程中的 Jimmy 1010 而不是 Jimmy 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 变量构成“一个学生”的单一组合 - 因此,您只会得到一个可以注册的学生。

要解决此问题,您需要更新提交“学生姓名”/“学生编号”的表单以接受多个输入 -更新if-statement以仅检查学生姓名(这可能会导致更不受欢迎的情况)。

于 2012-08-15T14:41:51.120 回答
0

您正在查询寻找stoodname. 当你在做这样的事情时,通过一个可以重复的值来做这个语句是不好的。也许您希望他们使用用户名和密码登录,或者使用您提供给他们的 id 登录,但除非这里有人有更好的主意,否则我认为您无法通过名称来登录。

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

仅指bike3查询的第一个结果,并且只有 2 个列:[0] 和 [stoodnumber] 没有 [1]。如果你想收集bike3中的所有id,你必须诅咒一次结果。

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