代码插入一式三份的记录几次,现在定期工作


Code inserted triplicate records a few times and now works periodically

我有一段代码,当用户1批准帖子时,它会在积分表中插入一行。我编写了代码,这样只有当用户不是帖子的作者时,它才会批准帖子。任何时候最多可以有10个职位可供选择以供批准。

然而,虽然这只会在当前用户不是帖子作者的情况下批准帖子(并以点数插入记录),但它不会只插入已批准帖子的记录。相反,它会在积分表中插入和用户帖子一样多的行。

我想做的是为当前用户批准的帖子插入点,其中帖子作者不是当前用户。

我非常接近。此代码有效,只是如果存在其他用户的多个帖子,而不是当前用户选择批准的一个帖子,它将插入所有记录。

$results2 = $dbh->prepare("select 
wp_users.ID,
wp_users.display_name,
stories.ID AS ID1,
stories.SID,
writing.ID AS ID2,
writing.WID,
writing.text
FROM writing
LEFT JOIN stories on writing.SID = stories.SID
LEFT JOIN wp_users ON writing.ID = wp_users.ID
WHERE (stories.SID = $the_SID)
order by writing.WID asc limit 10
");
$results2->bindParam(':wp_users.ID', $user_ID, PDO::PARAM_INT); 
$results2->bindParam(':display_name', $display_name, PDO::PARAM_STR); 
$results2->bindParam(':stories.ID', $ID1, PDO::PARAM_INT); 
$results2->bindParam(':stories.SID', $the_SID, PDO::PARAM_STR);
$results2->bindParam(':writing.WID', $WID, PDO::PARAM_STR);  
$results2->bindParam(':writing.ID', $ID2, PDO::PARAM_INT); 
$results2->bindParam(':text', $text, PDO::PARAM_STR); 
$results2->execute();
$row2 = $results2->fetchAll(PDO::FETCH_ASSOC);
foreach ($row2 as $result5) {
     $blurb = $result5['ID2'];
     settype($blurb, "integer");
}


//PA APPROVE INSERT CONTROL
if(isset($_POST ['yes'])){
// Get values from form 
$yes_WID = $_POST['yes'];
$yesupdate = "UPDATE writing SET approved = :approved, position = :position   
WHERE WID = :WID";
$stmt2 = $dbh->prepare($yesupdate);
$stmt2->bindParam(':WID', $yes_WID, PDO::PARAM_INT);        
$stmt2->bindParam(':approved', $e = Y, PDO::PARAM_STR);   
$stmt2->bindParam(':position', $row2[0]['position'], PDO::PARAM_INT);                                        
$stmt2->execute();


$yes_WID = $_POST['yes'];
//trying to give points as long as user is not the author
$contpoint = 3;
foreach($row2 as $result5){
     if($blurb !== $user_ID){
          $yesupdate2 = "INSERT INTO points(ID, 
          SID,
          WID,
          PID) VALUES(
          :ID,
          :SID,
          :WID,
          :PID)";
          $stmt9 = $dbh->prepare($yesupdate2);
          $stmt9->bindParam(':ID', $blurb, PDO::PARAM_INT);      
          $stmt9->bindParam(':SID', $the_SID, PDO::PARAM_INT);        
          $stmt9->bindParam(':WID', $yes_WID, PDO::PARAM_INT);        
          $stmt9->bindParam(':PID', $contpoint, PDO::PARAM_INT);     
          $stmt9->execute();
     }
}

您的if条件似乎没有得到正确评估。$blurb和$user_ID是同一类型吗?

发件人http://php.net/manual/en/language.operators.comparison.php

$a!=$b如果类型杂耍后$a不等于$b,则不等于TRUE。

$a==$b如果$a不等于$b,或者它们不是相同类型。

此代码的用途是什么?它只是为每个值设置$blurb,然后不处理结果,除非代码列表之间的大括号没有正确显示。那么它是前臂内侧的前臂吗?

在任何情况下,似乎都不会像对$blurb那样将$user_ID设置为整数。

foreach ($row2 as $result5) {
$blurb = $result5['ID2'];
settype($blurb, "integer");
}

取消第一个foreach循环,并将其与第二个循环组合,如下所示:

foreach($row2 as $result5){
    $blurb = $result5['ID2'];
    $userID = $result5['user_ID'];
    settype($blurb, "integer");
    settype($userID, "integer");
if($blurb !== $userID){
   ...etc