【问题标题】:PHP values going into db on refresh刷新时进入数据库的 PHP 值
【发布时间】:2013-06-24 16:53:33
【问题描述】:

我正在尝试创建一些东西,如果用户选择一场比赛将获胜,并且该比赛获胜,则积分会自动进入 DB。我做得很好,直到积分只进入 DB 一次。我的意思是正确验证,但每次刷新点进入 DB 。请帮忙。

//Ndeshjet e fituara ose jo
echo "<h3>Ndeshjet e vendosura nga <b>$username</b> dhe Rezultatet:</h3><br/>";

$query = $db-> query("SELECT * FROM match_select WHERE user_id='$username'");

while ($row = $query->fetch(PDO::FETCH_ASSOC)){                         
    $match = $db->query("SELECT * FROM `winner` WHERE `user_id` = '$username' AND  `match_id` = '$id' AND `liga`='$liga'");

    $id = $row['match_id'];
    $liga = $row['liga'];
    $koeficent = $row['selected_koef'];     

    if($match->rowCount($match)){       
        echo "";            
    }else{
        if ($row['result'] == $row['final']){
            $hey =  "style='color: green;' ";
            $match = $db -> query("INSERT INTO winner (user_id, match_id, koef, final, liga) VALUES ('$username','$id', '$koeficent', '1', '$liga')");
        }else if ($row['final']== ""){
            $hey =  "style='color: black;' ";
        }else{
            $hey =  "style='color: red;' ";
        }
    }
}

【问题讨论】:

  • 将您的 php 代码与显示代码分开,这样它就不会重新执行。 IE page1 发布到 script.php,它不产生任何输出并将header("Location:page2.php");exit(); 重定向到 page2。然后你可以点击后退,前进,刷新所有你喜欢的,但是script.php只会在表单提交时运行
  • 我不想提交表单。如果他只赢了一次比赛,我想为用户更新数据库。
  • 啊!所以你真的需要检查 $username 是否已经尝试过,通过将它记录在数据库中(不管他们是否获胜)并在执行你的代码之前检查它(即你已经尝试过并且获胜/失败)
  • 这正是我想要做的。用我试过的形式,它工作得很好,但我希望这是另一种选择。如果我能让这个工作,表单将无法使用
  • 您将不得不提供更多信息并将 cmets 添加到您的代码中以解释您尝试做什么

标签: php mysql error-handling


【解决方案1】:

关于提供的代码,据我了解;

  1. 选择该用户名的所有匹配项(遍历所有匹配项)
  2. 验证:检查是否已将其添加到获胜者表中
  3. 如果是则忽略它,否则如果 result = final 相同(不知道这里的上下文)然后存储..

问题是当你选择数据进行验证时,它们是空值,你应该在查询之前声明它们......就像这里

$match = $db->query("SELECT * FROM `winner` WHERE `user_id` = '$username' AND  `match_id` = '$id' AND `liga`='$liga'");

$id = $row['match_id'];
$liga = $row['liga'];
$koeficent = $row['selected_koef'];   

应该是

 $id = $row['match_id'];
 $liga = $row['liga'];
 $koeficent = $row['selected_koef'];       
 $match = $db->query("SELECT * FROM `winner` WHERE `user_id` = '$username' AND  `match_id` = '$id' AND `liga`='$liga'");

这可能是每次引用时找不到任何结果的原因,因此插入....我的建议是将 SQL 放在不同的变量中,出于测试目的,您可以将其转储到屏幕上,例如

$sql = "SELECT * FROM `winner` WHERE `user_id` = '$username' AND  `match_id` = '$id' AND `liga`='$liga'";
echo $sql; //to see whats going on
$match = $db->query($sql);

希望这对伴侣有帮助

【讨论】:

  • 谢谢兄弟.. 从我的角度来看,这是一个愚蠢的错误。甚至没有注意到我正在发送 NULL 值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多