Php 代码插入了三份记录几次,现在定期工作

Php 代码插入了三份记录几次,现在定期工作,php,foreach,Php,Foreach,我有一段代码,当user1批准一篇文章时,它会在points表中插入一行。我编写了代码,这样只有当用户不是帖子的作者时,它才会批准帖子。在任何时候,最多可以选择10个职位进行审批 但是,如果当前用户不是帖子的作者,这将仅批准帖子(并插入点数记录),但它不会仅插入已批准帖子的记录。相反,它将在points表中插入尽可能多的行,就像用户有帖子一样 我想做的是在当前用户批准的帖子中插入点,而帖子作者不是当前用户 我很接近。此代码有效,但如果其他用户发布了多篇文章,而不是当前用户选择批准的一篇文章,则它

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

但是,如果当前用户不是帖子的作者,这将仅批准帖子(并插入点数记录),但它不会仅插入已批准帖子的记录。相反,它将在points表中插入尽可能多的行,就像用户有帖子一样

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

我很接近。此代码有效,但如果其他用户发布了多篇文章,而不是当前用户选择批准的一篇文章,则它将插入所有记录

$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\u ID是同一类型吗

$a!=$如果键入杂耍后$a不等于$b,则b不等于TRUE

一美元==$如果$a不等于$b,或者它们不相同,则b不相同 同样的类型


此代码的目的是什么?它只是将$blurb设置为每个值,然后对结果不做任何处理,除非代码列表之间的大括号没有正确显示。那么它是一个foreach还是一个foreach的内部呢

在任何情况下,都不会像设置$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

你能编辑你的问题吗?如何获得$blurb?首先,如果您使用更好的命名,如果有带有“authors”的“blurb”,请调用包含一个blurb作者名称的变量
$Blurbautor
而不是
blurb
。从你的第二条评论来看,blub是一个作者数组,每个项目一个作者,对吗?我认为在这种情况下,
$blub
永远不会等于$user\u ID,我假设它是一个整数。
result6
user的作用是什么?您的代码是否可以在至少有三个用户登录到完全相同帐户的服务器上运行?@Elin我编辑了我的帖子,以显示从所有用户处获取帖子列表的sql。在第一个foreach循环中,我获取每个blurb的每个作者的ID,然后将其用于下一个foreach循环,这样,只要当前用户不是该帖子的作者,user1就可以批准用户帖子的评分。但是,它有时也会起作用。其他时候,它插入相同的3行而不是1行。其他时候什么都没有。我在编辑后的帖子中更好地阐述了这个问题。我认为这段代码是有效的,除了它会在点中插入尽可能多的行,就像有帖子一样。我只需要它为已批准的帖子插入一行。两个整数的类型相同。他们是。我尝试了这个,代码插入了带有点的行,不管作者是谁。即使文章的作者是当前用户,我也会打印出循环变量和条件测试的值,这样您就可以看到比较中发生了什么。有些东西不是它看起来的样子。也许是你的方法!==表示它们是相同的类型(整数),因此即使用户ID不同,它也会求值为真。至少有!=在我以用户2身份登录之前,它会根据我的需要进行正确评估。我只有两个用户1和2$user_ID为1,我想在$blurb为1时忽略插入。这可能与不满足if子句的情况下没有“else”子句有关吗?感谢您尝试。唯一的问题是,在我的帖子(刚刚添加)中遗漏了一个步骤,即首先将批准的故事帖子添加到故事/帖子表中,然后该帖子的作者将获得分数(插入帖子表)。如果我把foreach放在一起,考虑到$yesupdate更新代码也必须运行,我不确定在哪里/如何运行。但我认为if条件的问题在于您错误地引用了用户ID。我并没有将用户ID作为查询的一部分。这是在代码(Wordpress)的最开头设置的$user_ID=get_current_user_ID();我认为我在评估作者ID和当前用户时没有任何问题。问题在于我的插入代码,以及它如何在点中插入尽可能多的行,就像不是当前用户的作者所做的简介一样。唯一的方法就是在$yesupdate之前($blurbauthor!=$user_ID){执行。不需要第二个循环。第二个循环导致了多次插入。