【问题标题】:Retrieve DIV-content inside a Form在表单中检索 DIV 内容
【发布时间】:2015-12-07 13:05:12
【问题描述】:

我一直在寻找各种论坛和类似帖子的帮助,但没有任何进展。 我有三个页面,一个可以让我将有关项目的信息插入到我的数据库中,第二个页面显示数据库中每个项目的图像和名称,第三个页面我想要一个显示图像和名称的功能第二页中选中的项目。

第二页代码(dashboardadmin.php):

<?php

ini_set('display_errors',1);
error_reporting(E_ALL);

$conn = mysqli_connect("localhost","root","","wildfire");

if(mysqli_connect_errno())
{
    echo mysqli_connect_error();
}

$sql= "SELECT pid, project_name, image, image_type FROM project";   

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_array()) {


echo "<form action='omprojekt.php' method='post'>

<div id='comp' name='comp'>
    <img src=pic.php?pid=".$row['pid']." width=100xp height=100xp/>"." ".$row['project_name']."
</div>

    <input type='submit' name='submit' value='Choose' />
   </form>";


}
}

else {
    echo "0 results";
}

mysqli_close($conn);

        ?>

第三页代码(omprojekt.php):

<?php
   /* Tried both of the $val variables but of course only one at a time. This is only to show you what I have tried. */

$val = isset($_POST['comp']) ? $_POST['comp'] : '';
$val = $_POST['comp']; 

if(isset($_POST['submit'])){

echo "$val";
}

?>

在最后的代码中,您可以看到我有两个 $val 变量,但我在代码中一次只使用了其中一个。在这里展示它们的目的是向您展示我已经尝试过它们。

我要做的是让第三页在第二页显示所选项目的图像和名称。如您所见,我尝试使用相同的“名称”从 DIV 中检索内容。问题是第三页(omprojekt.php)根本没有显示任何内容,甚至没有任何错误。

【问题讨论】:

  • 你实际上并没有从第二个东西向第三个东西发送任何数据。我什至不确定您要传递哪些数据。您可以做的是向包含 $row['pid'] 值的表单添加一个隐藏元素,然后定义 img 标记以使用该数据,就像您在第二页中一样。
  • &lt;div id='comp' name='comp'&gt; - div 不带有 name 属性,也不是表单元素。所以$val = isset($_POST['comp']) ? $_POST['comp'] : ''; 不会接受你试图在你的 div 中作为 name 属性传递的值。
  • @Jon Stirling 我想传递按钮包含的图像和名称。有很多按钮,每个按钮都包含一个图像和名称。所以我想将特定/单击按钮的图像和名称传递到第三页。
  • @Fred ii 你有什么建议吗?整整一周我都在努力解决这个问题。
  • 查看下面给出的答案

标签: php html mysql if-statement


【解决方案1】:

您希望 div 像输入一样提交,但它不会,因为它不是输入。所以把它放在一个输入中。

if ($result->num_rows > 0) {
    while($row = $result->fetch_array()) {
        // Don't use and id attribute because you're in a loop and you might have multiple id's with the same value.
        echo "<form action='omprojekt.php' method='post'>
            <div> 
                <img src=pic.php?pid=".$row['pid']." width=100xp height=100xp/>"." ".$row['project_name']."
            </div>
            <input type='hidden' name='pid' value='".$row['pid']."'>
            <input type='hidden' name='project_name' value='".$row['project_name']."'>
            <input type='submit' name='submit' value='Choose' />
       </form>";
    }
}

然后在下一页,

$val = (isset($_POST['pid']) && isset($_POST['project_name'])) ? 
    "<img src=pic.php?pid={$_POST['pid']} width=100xp height=100xp/> {$_POST['project_name']}" : '';

为了完整起见,您的代码还有一些其他问题。

1) iamge 上的 width 和 height 属性应该有引号,并且不接受“px”,它们只是数字。如果要使用“px”,则应改用样式。 &lt;img src='' style='width:20px; height:20px;' /&gt;

2) 你应该是escaping user input before running it through your query

【讨论】:

  • // For display,... 是实际代码的一部分,会引发语法错误。将其作为注释放在该代码下方或上方以进行解释。 OP 可能不这么认为。
  • 然后width=100xp height=100xp 另一个语法错误。如您所见,我不会因为语法错误而对您投反对票。我喜欢先让人们从怀疑中受益 ;-) - 然后你让 OP 对$_POST['project_name']$_POST['pid'] 的 SQL 注入开放。
  • @Fred-ii- 它不会抛出错误,但会回显到页面。已修复,谢谢。
  • 它会有 HTML 源代码 ;-) 不客气。
  • 你需要修复这个width=100xp height=100xp
【解决方案2】:

如果数据存在于&lt;input...&gt; HTML 标记中,数据只会从&lt;form&gt; 发送到action 脚本。你不能从随机&lt;DIV&gt;标签等中挑选数据。

所以你可以通过使用像这样的hidden 输入字段来做到这一点(这只是一种方式)

if ($result->num_rows > 0) {
    while($row = $result->fetch_array()) {


       echo "<form action='omprojekt.php' method='post'>

             <div>
                <img src=pic.php?pid=".$row['pid'] .
                  " style="width:100px;height:100px" /> " .
                  $row['project_name']."
             </div>

             <input type='hidden' name='comp' value='" . $row['pid'] . "' />
             <input type='submit' name='submit' value='Choose' />
             </form>";


    }
}

现在,当您到达 omprojekt.php 时,$_POST['comp'] 变量将存在。

您可以拥有任意数量的隐藏输入字段,因此如果您还想传递项目名称,只需添加另一个隐藏字段。

【讨论】:

  • -1 因为 1) 你离开了结束卷曲,这可能会造成混淆。 2)你不知道这只是输出一个表单,你没有解决多个id的问题。
  • @Pamblam 修复了丢失的}
  • 这是问题所在。他试图以表单形式提交的 div 处于循环中并且有一个 id。如果他的查询返回多于一行,他将有多个 id。
  • @Pamblam 啊,是的。实际上,他的代码正在创建多个小表单,这是一种奇怪但完全合法的做事方式。所以现在我相信我已经解决了你所有的投诉,你能验证一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 2018-07-30
  • 2011-10-30
相关资源
最近更新 更多