【问题标题】:query does all rows correct except for row 9查询除了第 9 行之外的所有行都正确
【发布时间】:2014-06-16 16:12:57
【问题描述】:

这是代码。每当我输入数据时,它都可以正常工作。除了第 9 场比赛外,它会正确计算每一行。除了第 9 场比赛之外,每一场比赛都被正确计算。我坐下来向 3 个人寻求帮助。现在我请你帮我弄清楚为什么会这样。

这是代码:

<?php

include ("../conn_inc.php");
include ("../conn_inc_pdo.php");
require_once ('auth.php');

$game_id= $_POST['game_id'];
$resultat= $_POST['namn'];
$lag1=substr($resultat, 0,1);
$lag2=substr($resultat, 2,1);


if ($lag1>$lag2){
    $tips="1";
}
if ($lag1<$lag2){
    $tips="2";
}
if ($lag1==$lag2){
    $tips="x";
}

//echo $tips;

    //------------------FIND ALL ALREADY POSTED GAMES---------------\\

    $sql2 = $pdo->prepare("SELECT game_id FROM vm2014res WHERE :game_id = game_id");
    $sql2->execute(array(':game_id' => $game_id));

    if ($sql2->rowCount() == 0) {

        //------ IRRELEVANT TEST CODE 3 LINES DOWN-----\\
        echo $game_id;
        echo $resultat;
        echo "<br>";


           //----------- INSERT THE VALUE OF THE GAME IF IT DOESNT EXIST -------\\
            $q = "INSERT INTO vm2014res (game_id, resultat, added)  VALUES (:game_id, :resultat, CURRENT_TIMESTAMP)";
            $query = $pdo->prepare($q);
            $query->execute(array(
                ':game_id' => $game_id,
                ':resultat' => $resultat
                ));

                     //------------------CHECK IF YOU SHOULD BE GETTING POINTS FOR A CORRECT GUESSED RESULT---------------\\
            $SQL = $pdo->prepare("SELECT * FROM vm2014 WHERE game_id = :game_id AND resultat = :resultat");
            $SQL->execute(array(':game_id' => $game_id, ':resultat' => $resultat));
            $r = $SQL->fetchAll(PDO::FETCH_ASSOC);
            foreach($r as $row){    


               $bet_id = $row['bet_id'];
               $game_id = $row['game_id'];
               $tips = $row['tips'];
               $resultat = $row['resultat'];
               $namn = $row['namn'];
               $points = $row['points'];

               //-------- ALL ECHOS DOWN HERE ARE IRRELEVANT----------\\
               echo $bet_id;
               echo $game_id;
               echo $tips;
               echo $resultat;
               echo $namn;
               echo $points;
               echo "<br>";
               $points=$points+2;
               echo $points;

    //------------- UPDATE THE POINTS GOTTEN (2 POINTS)---------\\

            $sql2 = $pdo->prepare("UPDATE vm2014 SET points = :points WHERE bet_id = :bet_id");
            $sql2->execute(array(':points' => $points,
            ':bet_id' => $bet_id
            ));

            }

            //------------------CHECK IF YOU SHOULD BE GETTING POINTS FOR RIGHT GUESSED GAME---------------\\
            $SQL = $pdo->prepare("SELECT * FROM vm2014 WHERE game_id = :game_id AND tips = :tips");
            $SQL->execute(array(':game_id' => $game_id, ':tips' => $tips));
            $r = $SQL->fetchAll(PDO::FETCH_ASSOC);
            foreach($r as $row){    


               $bet_id = $row['bet_id'];
               $game_id = $row['game_id'];
               $tips = $row['tips'];
               $resultat = $row['resultat'];
               $namn = $row['namn'];
               $points = $row['points'];

             //-------IRRELEVANT ECHOS DOWN HERE--------\\
               echo $bet_id;
               echo $game_id;
               echo $tips;
               echo $resultat;
               echo $namn;
               echo $points;
               echo "<br>";
               $points=$points+1;
               echo $points;

    //----------------- UPDATE YOUR POINTS IF YOU SHOULD BE GETTING POINTS FOR THE GAME----\\

            $sql2 = $pdo->prepare("UPDATE vm2014 SET points = :points WHERE bet_id = :bet_id");
            $sql2->execute(array(':points' => $points,
            ':bet_id' => $bet_id
            ));

            }

    } else {
        //-----------------POST WHEN THE GAME RESULT WAS ADDED TO THE DB-------\\
            $SQL6 = $pdo->prepare("SELECT * FROM vm2014res WHERE game_id = :game_id");
            $SQL6->execute(array(':game_id' => $game_id));
            $ra = $SQL6->fetchAll(PDO::FETCH_ASSOC);
            foreach($ra as $row){ 

               $game_id = $row['game_id'];
               $resultat = $row['resultat'];
               $added = $row['added'];

        echo "Resultatet är redan registrerat. Det registrerades: <strong>" . $added . "</strong> och det vart <strong>" . $resultat . "</strong> i matchen.";
            }
    }

我包含了整个代码部分,因为我不知道代码的错误部分在哪里。它应该在后面的部分:

//------------------Kolla om du ska få poäng för ditt tips---------------\\

但我看不到问题。

我在第 9 场比赛中输入 2-1。这是数据库的输入:(我不知道如何在这个网站上制作一个表格)

bet_id game_id 提示 resultat name poäng 9 9 1 2-1 球员 1 2 57 9 x 1-1 球员 2 0 105 9 x 1-1 球员 3 0 153 9 1 2-0 球员 4 0 201 9 1 2-1 球员 5 2 249 9 1 3-0 球员 6 0 297 9 x 1-1 球员 7 0 345 9 x 0-0 球员 8 0 393 9 2 0-1 球员 9 1 441 9 1 1-0 球员 10 0 489 9 2 0-3 球员 11 1 537 9 x 0-0 球员 12 0 585 9 x 1-1 球员 13 0 633 9 1 2-0 球员 14 0 681 9 2 1-2 球员 15 1 729 9 2 0-1 球员 16 1 777 9 x 1-1 球员 17 0 825 9 1 3-0 球员 18 0 873 9 2 2-3 球员 19 1 921 9 2 0-1 球员 20 1 969 9 x 2-2 球员 21 0 1017 9 x 2-2 球员 22 0 1065 9 2 2-1 球员 23 3 1113 9 x 0-0 球员 24 0 1161 9 2 1-1 球员 25 1

如您所见,一些玩家因犯错而获得积分。有些人因为正确的结果而得分,但因为猜猜谁赢了比赛而没有得分。

有人可以帮我找出问题所在吗?

【问题讨论】:

  • 首先您必须解释示例输出如何显示正确/错误。我不知道2-22-1 是什么意思。而且我们不会通读一堵基本上完全没有记录的代码来尝试猜测问题出在哪里。
  • 2-1 是结果。 2 对 1。我不知道要添加什么 cmets。不过我可以试试
  • @MarcB ive 添加了尽可能多的 cmets
  • @saknarnamn 你的参数似乎是错误的方式:$sql2 = $pdo-&gt;prepare("SELECT game_id FROM vm2014res WHERE :game_id = game_id"); 应该是WHERE game_id = :game_id");
  • 您实际比较他们的猜测(提示?)正确或错误的部分在哪里?我看到了关于检查他们是否应该得到点的评论,但没有实际的比较......

标签: php mysql sql pdo


【解决方案1】:

首先你计算$tips:

if ($lag1>$lag2){
  $tips="1";
}

然后,用数据库结果覆盖它:

//------------------CHECK IF YOU SHOULD BE GETTING POINTS FOR A CORRECT GUESSED RESULT---------------\\
/* ... */
$tips = $row['tips'];

其中一个变量应该有不同的名称。

还有一些问题:

$resultat= $_POST['namn'];

我假设$resultat 是游戏的结果,而'namn' 是玩家的名字。这不可能是正确的。

$lag1=substr($resultat, 0,1);
$lag2=substr($resultat, 2,1);

如果一支球队在一场比赛中的进球数超过 9 个怎么办?您应该explode'-' 作为分隔符的结果。

【讨论】:

  • 其实在这件事上,namn并不是玩家的名字。我只是在使用我做过的网站的旧部分,并没有费心去修复那个部分。它是结果的字符串。是的,我应该使用爆炸。但是对于这个版本,substr 可以正常工作,因为在一场比赛中获得超过 9 个进球将是惊人的,我从未见过它发生过。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多