【问题标题】:PHP: Unable to extract ID from dynamically created URLPHP:无法从动态创建的 URL 中提取 ID
【发布时间】:2016-05-15 01:36:07
【问题描述】:

我网站上的登录页面使用 for 循环显示与该部分(食谱)相关的所有链接。这工作正常。但是我随后需要提取在该 for 循环中生成的 id,以填充正在生成的页面。

我不知道如何提取该 id 值($_REQUEST['id']$_REQUEST['id=?'] 都不是;我怀疑两者肯定是错误的)。是通过操作 URL 字符串还是有其他方法?以下是相关代码:

<?php 
                $id = intval($_REQUEST['id']);

                if ($id) {// user gets here by clicking on link with id
                $query  = "SELECT * FROM recipes WHERE uniqno = $id";
                $result = $conn->query($query);
                $row = mysqli_fetch_all($result, MYSQLI_ASSOC);
                $data = $row // fetch data from database

                ?>
                <p><?php echo $data['ingredcontent']; ?></p>

                <?php }
                else {
                foreach ($reciperow as $recipe) { ?>

                <a href="?id=<?php echo $recipe['uniqno'];?>"><h2><?php echo $recipe['rectitle'];?></h2></a>

                <p class="subhead"><?php echo $recipe['recsummary']; ?></p>

<?php }} ?>

如果有人能建议我应该将什么传递给 $_REQUEST 以确保它提取在 foreach 循环中定义的“id”,我将不胜感激。 (注意:我有意远离 PHP 路由,因为这是一个非常基础的项目)。

【问题讨论】:

  • $reciperow 从何而来?是空的吗? $_GET['id'] 如果你能在 uri 中看到 id 应该没问题

标签: php url dynamic


【解决方案1】:

我尝试修改你的代码如下,请检查这是不是你想要的

<?php 
$conn=new mysqli($hostname, $dbuser, $dbpassword, $dbname);//i assume you have this somewhere

                if (isset($_REQUEST['id'])) {// user gets here by clicking on link with id
                $query  = "SELECT * FROM recipes WHERE uniqno = ".$_REQUEST['id']; //not necessary to convert $_REQUEST to integer
                $result = $conn->query($query);
                $row = mysqli_fetch_all($result, MYSQLI_ASSOC);
                $data = $row // fetch data from database

                ?>
                <p><?php echo $data[0]['ingredcontent']; //you fetch all... need to set index(row) ?></p>

                <?php }
                else {
				//so i assume your $reciperow is fetching all data:
				$query  = "SELECT * FROM recipes"; //not necessary to convert $_REQUEST to integer
                $result = $conn->query($query);
                $reciperow= mysqli_fetch_all($result, MYSQLI_ASSOC);	
				
                foreach ($reciperow as $recipe) { ?>

                <a href="?id=<?php echo $recipe['uniqno'];?>"><h2><?php echo $recipe['rectitle'];?></h2></a>

                <p class="subhead"><?php echo $recipe['recsummary']; ?></p>

<?php }} ?>

【讨论】:

  • 见 Youuu,是的,这行得通 - 也很高兴知道为什么 $id = intval($_REQUEST['id']); if ($id) 行不通?
  • 在使用 intval 之前,您需要先确保 $_REQUEST 存在。所以我改用 isset() 函数。此外,没有必要将其转换为整数,因为您的目的是在 sql 查询中使用 id 作为“字符串”
  • 谢谢 - 还有一个问题:为什么在 $ 前加点? ie.uniqno = ".$_REQUEST['id'] not uniqno = "$_REQUEST['id']
  • PHP 中的点(.) 是一个字符串连接器。您需要使用 dot(.) 来连接字符串和变量。
  • 它直接连接到 $_REQUEST[“id”]
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 2013-09-27
  • 2021-05-28
  • 1970-01-01
  • 2011-12-19
  • 2015-02-18
  • 2018-06-19
  • 1970-01-01
相关资源
最近更新 更多