【发布时间】:2021-01-24 05:28:37
【问题描述】:
我正在尝试从数据库中提取数据并使用设置的变量将其导出为 HTML。它每次都给我未定义的变量。我假设是因为数据丢失?我与主机和数据库建立了良好的连接,因为我已经在它们上运行了测试脚本。无论如何,这是代码:
更新:感谢您的及时回复,遗憾的是仍然没有太多运气。我返回了 $id 分配,将其遗漏是偶然的,我尝试过使用和不使用 while 循环;我还尝试定义默认变量。似乎没有任何效果。我不断收到“缺少呈现此页面的数据,除非我从代码中删除该错误,否则我会收到未定义的变量错误。任何人有任何最终想法吗?我是 SQL 的新手,所以你们可能很愚蠢太聪明了,想都不敢想。
<?php if (isset($_GET['id'])) {
include "storescripts/connect_to_mysql.php"; $id = preg_replace('#[^0-9]#i', '', $_GET['id']); $sql = mysqli_query("SELECT * FROM products WHERE id='$id' LIMIT 1"); $productCount = mysqli_num_rows($sql);
if ($productCount > 0) { while($row = mysqli_fetch_array($sql)){
$product_name = $row["product_name"];
$price = $row["price"];
$details = $row["details"];
$category = $row["category"];
$subcategory = $row["subcategory"];
}
} else { echo "That item does not exist.";
exit(); } } else { echo "Data to render this page is missing."; exit(); } ?>
【问题讨论】:
-
由于您在while循环中定义了变量,因此只有在数据库中有匹配项时才会定义它们。如果没有匹配项,则不会创建变量,如果您仍然尝试使用它们,您将获得
undefined variable: xxx。在 while 循环之前为它们定义默认值,或者在回显它们时检查它们是否已定义,如下所示:echo $product_name ?? 'default-value';。如果定义了$product_name并且不为空,则将回显默认值。 -
使用准备好的语句来避免sql注入。
-
如果
$_GET['id']未设置,@MagnusEriksson 所说的内容也适用。
标签: php html sql variables dynamic