首页 > 解决方案 > PHP echo 中的引号有问题

问题描述

我在 PHP 上的报价有问题echo。我不确定是否是因为我使用了错误的引号/将它们放在错误的位置,或者是因为我无法将按钮值设置为我拥有的值(参见代码)。

$sql = "SELECT * FROM calender WHERE userid=?;";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
  header ('Location: ../personalcalender.php?error=sqlerror');
  exit();
}
else {
  mysqli_stmt_bind_param($stmt, "s", $_SESSION['Id']);
  mysqli_stmt_execute($stmt);
  $result = mysqli_stmt_get_result($stmt);
  while ($row = mysqli_fetch_assoc($result)) {
    echo "<center>" . $row['type'] ." ". $row['subject'] ." ". $row['message'] ." ".
      "<button name='changeStatus' value=\". $row['calenderid'] .\">" . $row['mystatus'] . $row['calenderid'] . "</button>";
  }
}

标签: phpstring

解决方案


保持 HTML 和 PHP 的良好分离可以防止此类问题。理想情况下,您应该将它们放在单独的文件中,但至少将您的 PHP 放在文件的顶部,并将 HTML 中的任何内容限制为仅显示。

将您的数据库结果加载到一个数组中,然后在适当的时间循环遍历它们。如果您要输出到 HTML,请始终使用htmlspecialchars(). 请注意替代控制结构语法短回显标记的使用。此外,1999 年打电话,他们想要他们的<center>元素回来 ;)

<?php
$sql = "SELECT * FROM calender WHERE userid = ?";
$stmt = $conn->stmt_init();
if (!$stmt->prepare($sql)) {
    header ('Location: ../personalcalender.php?error=sqlerror');
    exit();
}
$stmt->bind_param("s", $_SESSION['Id']);
$stmt->execute();
$result = $stmt->get_result($stmt);
while ($row = $result->fetch_assoc()) {
    $data[] = array_map('htmlspecialchars', $row);
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>My page</title>
</head>
<body>
<!-- some more HTML goes here -->

<?php foreach ($data as $row):?>
<div style="text-align: center"> 
    <?=$row['type']?> <?=$row['subject']?> <?=$row['message']?>
    <button name="changeStatus" value="<?=$row['calenderid']?>">
        <?=$row['mystatus']?> <?=$row['calenderid']?>
    </button>
</div>
<?php endforeach;?>
<!-- some more HTML goes here -->
</body>
</html>

推荐阅读