Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
评级正确记录PHP SQL_Php_Mysql_Pdo - Fatal编程技术网

评级正确记录PHP SQL

评级正确记录PHP SQL,php,mysql,pdo,Php,Mysql,Pdo,我不知道如何将“正/负”评级设置为正确的记录,我尝试在while循环中执行此操作,该循环显示所有记录,但它只对第一个记录进行评级。如何查阅正确的记录?我是PHP的新手。这是我的密码: if (isset($_GET['najstarsze'])) { $sql = "SELECT * FROM wpisy ORDER BY id"; } else { $sql = "SELECT * FROM wpisy ORDER BY id DESC"; } $stmt

我不知道如何将“正/负”评级设置为正确的记录,我尝试在while循环中执行此操作,该循环显示所有记录,但它只对第一个记录进行评级。如何查阅正确的记录?我是PHP的新手。这是我的密码:

if (isset($_GET['najstarsze']))
{   
    $sql = "SELECT * FROM wpisy ORDER BY id";       
}
else
{
    $sql = "SELECT * FROM wpisy ORDER BY id DESC";
}

$stmt = $db->query($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);

if($stmt->rowCount() > 0){
    while($row = $stmt->fetch()){
        echo "
        <div class='data'>
        ".$row['data']."
        </div><br>
        <div class='daneautora'>
        <b>Ocena: </b>".$row['ocena']."<br>
        <b>Nr: </b>".$row['id']."<br>
        <b>Nick: </b>".$row['nick']."<br>
        <b>E-mail: </b>".$row['email']."<br>
        <b>Wpis: </b><br></div>
        <div class='suchar'>
        <p>
        ".$row['tresc']."
        </p>
        </div>  
        <div class='ocena'>
        <p><a href='index.php?plus=true'>+</a> &nbsp; <a href='index.php?minus=true'>-</a></p>
        </div>
        <hr>                        
        ";
        if (isset($_GET['plus']))
        {
            $sql = "UPDATE wpisy SET ocena = ocena + 1 WHERE id = ".$row['id']."";  
            $stmt = $db->query($sql);
            $stmt->execute();
        }
        else
        {
            if (isset($_GET['minus']))
            {
                $sql = "UPDATE wpisy SET ocena = ocena - 1 WHERE id = ".$row['id']."";  
                $stmt = $db->query($sql);
                $stmt->execute();
            }
        }
    }       
}
if(isset($\u GET['najstarsze']))
{   
$sql=“按id从wpisy订单中选择*”;
}
其他的
{
$sql=“按id描述从wpisy订单中选择*”;
}
$stmt=$db->query($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
如果($stmt->rowCount()>0){
而($row=$stmt->fetch()){
回声“
“$row['data']”

Ocena:“.$行['Ocena']。”
编号:“.$row['id']”,
尼克:“.$row['Nick']”,
电子邮件:“.$row['email']”,
Wpis:
“$row['tresc']”


"; 如果(isset($_GET['plus'])) { $sql=“UPDATE wpisy SET ocena=ocena+1,其中id=“.$row['id']”; $stmt=$db->query($sql); $stmt->execute(); } 其他的 { 如果(isset($_GET['减号])) { $sql=“UPDATE wpisy SET ocena=ocena-1,其中id=“.$row['id']”; $stmt=$db->query($sql); $stmt->execute(); } } } }
  • 您需要将块移动到您正在设置评级的位置(
    if(isset($\u GET['plus']))…
    )外部
  • 在SQL查询字符串中使用而不是右传递变量,以避免SQL注入

  • 您需要更新链接,使其具有要更新的记录的引用。尝试:

    index.php?plus=true&id=' . $row['id']
    
    您可能还希望更新
    isset
    ,以包括此新参数

    if (isset($_GET['plus'], $_GET['id']))
    
    然后,您需要将准备好的语句与参数化查询一起使用,这样您就不会受到SQL注入的影响。下面是一个例子:

    $sql = "UPDATE wpisy SET ocena = ocena + 1 WHERE id = ?";  
    $stmt = $db->prepare($sql);
    $stmt->execute(array($_GET['id']));
    
    另外,当使用
    query()
    时,您不需要
    execute()
    ,它也会执行。
    execute
    是执行一条准备好的语句

    PDOStatement::execute-执行准备好的语句


    -

    很有效,谢谢!