在echo中使用php代码

时间:2014-07-02 04:33:36

标签: php mysql pdo

我的问题是如何将下面的代码整整到echo?我有echo使用while所需要的多个这些,我已经玩弄了它但还没弄明白要做什么。我看到的答案,我已经尝试过,但他们只是没有处理我的代码。我需要将所有这些代码放在一堆,但是我在插入" like按钮"部分。问题始于

$likes = (empty($_POST['like'])) ? : $_POST['like'] ;

这里是完整的代码

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
  echo ' 
<div class="wrapper">
<div class="submissions">
<div class="logo-logo"><h2>Questions.</h2>
<div class="checkboxes">'.$row['formtype'].'
</div>

</div>
<div class="top-submit">
&#8220'. $row["actual_quote"] . '&#8221;
</div>
<div class="poster">- '. $row["poster"].'
 <div class = "like">- '.
  $likes = (empty($_POST['like'])) ? : $_POST['like'] ;
  $dislikes = (empty($_POST['dislike'])) ? : $_POST['dislike'] ;
  $ip = $_SERVER['REMOTE_ADDR'];

  if(isset($_POST['like'])){
    $likes1 = $likes+1;
    $voted1 = $voted+1;
    $query2 = $db->prepare("INSERT INTO voters (voted, ip) VALUES ( :voted, :ip)");
    $query2->bindParam(':voted', $voted1, PDO::PARAM_STR);
    $query2->bindParam(':ip', $ip, PDO::PARAM_STR);  
    $query2->execute();
    header("Location: like.php?");
    $update1 = $db->prepare("INSERT INTO votes (likes) VALUES ( :likes)");
    $update1->bindParam(':likes', $likes1, PDO::PARAM_STR);
    $update1->execute();
  }

  if(isset($_POST['dislike'])){
    $dislikes1 = $dislikes+1;
    $voted1 = $voted+1;
    $query2 = $db->prepare("INSERT INTO voters (voted, ip) VALUES ( :voted, :ip)");
    $query2->bindParam(':voted', $voted1, PDO::PARAM_STR);
    $query2->bindParam(':ip', $ip, PDO::PARAM_STR);  
    $query2->execute();
    header("Location: like.php?");
    $update1 = $db->prepare("INSERT INTO votes (dislikes) VALUES ( :dislikes)");
    $update1->bindParam(':dislikes', $dislikes1, PDO::PARAM_STR);
    $update1->execute();
  }
  $stmt = $db->query("SELECT * FROM voters");
  $stmt->setFetchMode(PDO::FETCH_ASSOC);
  $row3 = $stmt->fetch();

  echo "Likes: $likes <br /> Dislikes: $dislikes<br />";

  if(isset($row3['voted'])){
    if(isset($row3['ip'])){
      echo "You have already voted for this.";
    }
  } else {

    echo "<form action = '' method = 'post'> <input type = 'submit' name = 'like' value  = 'like'> <input type = 'submit' name = 'dislike' value = 'dislike'></form>";

  }'
</div>
<!-- use select to get the items to stay on the page-->

</div>
</div>
</div>
';
}

可能有一个非常简单的解决方案,但我到处寻找它。我最后尝试使用.,但它并不是那样的。有什么建议吗?

编辑我更改了一部分,整个代码从$likes开始,在else{}之后结束,因此:

  <div class = "like">';
  include("like.php");
  echo'</div>

3 个答案:

答案 0 :(得分:1)

你不是。你停止你的回声,做你的其他代码,并再次开始回声。

echo 'foo';
bar();
echo 'baz';

答案 1 :(得分:0)

你不应该以这种方式使用echo。

尝试将HTML保持在变量中,并在检查所有必要条件后使用点连接所有需要的其他HTML。

$output = '<div>blahblah</div>';
if ($somedatafromDB == true) {
  $output .= '<p>true!!</p>';
} else {
  $output .= '<p>false :/</p>';
}

// and finally
echo $output;

答案 2 :(得分:0)

问题也可能是三元运营商:

您的代码目前正在

$likes = (empty($_POST['like'])) ? : $_POST['like'] ;

尝试将其更改为

$likes = (empty($_POST['like'])) ? 0 : $_POST['like'];

如果$_POST['like']为空,您需要指定要返回的内容。

如果x?y:z为真,则三元运算符(y)返回x,否则返回z。在您的情况下,y丢失,可能会在执行期间导致错误。

在脚本开头的一个好习惯是ini_set("display_errors", "on");,用于调试目的。