PHP回声中的报价出现问题

时间:2019-05-24 17:49:05

标签: php string

我在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>";
  }
}

1 个答案:

答案 0 :(得分:1)

妥善保存HTML和PHP可以避免此类问题。理想情况下,将它们放在单独的文件中,但至少要将PHP放在文件的顶部,并将HTML中的任何内容限制为仅显示。

将数据库结果加载到数组中,然后在适当的时间遍历它们。如果要输出为HTML,请使用htmlspecialchars() 始终转义数据。请注意alternative control structure syntaxshort echo tags的使用。同样,在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>