【问题标题】:select option value from database on selected从选定的数据库中选择选项值
【发布时间】:2013-03-01 18:16:42
【问题描述】:

我有一个小问题。我有一个edit.php 页面。此页面列出了可以编辑的产品信息。

我运行一个查询

while($rows=mysql_fetch_assoc($query)){


echo"<form method=\"POST\" action=\"edit.php\">";
echo "<input type ='hidden' name='ID' value = '{$rows['ID']}'>"; 
echo "Product:&nbsp <input type='text' name='product' value = '{$rows['ProductName']}'>"; 

在 while 循环之前,我将详细信息存储在变量中,如下所示:

$hiddenid = $_POST['ID'];   
$productName = $_POST['product'];

这行得通。当我加载 php 表单时,它会显示从数据库中检索到的产品名称(在文本字段中)。但是问题是我想将产品名称存储为用户已经选择的下拉列表框,然后选择它。

所以,基本上我希望做的不是在文本框中显示数据库检索到的选项,而是希望用户选择的选项显示在下拉列表框中。

我希望这是有道理的?为什么我的选项值根本没有显示,其次它们也没有显示 SELECTED 选项(从数据库中检索)。

有什么帮助吗?

【问题讨论】:

  • 你没有结束你的 foreach 循环
  • @ioums 抱歉,我已经结束了。刚刚忘了最后一个 } 现在编辑了:)
  • 可能只是另一个错字,但它应该在 之前关闭
  • 我只是不知道为什么根本没有显示任何选项。我将它们存储在数组中。然后 SELECTED 基于从数据库中检索到的内容。我不明白为什么它没有显示任何选项,更不用说选择的选项了?
  • Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解 prepared statements,并使用 PDOMySQLi - this article 将帮助您决定哪个。

标签: php mysql forms combobox


【解决方案1】:

专注于这一领域,你应该得到一个 PHP 错误,除非它是一个复制错误。请注意以下变化:

while($rows=mysql_fetch_assoc($query)){
?>
    <form method=\"POST\" action=\"edit.php\">
    <input type ='hidden' name='ID' value = '<?php echo $rows['ID'];?>'>
    <select name ="pnames">
        <?php foreach ($arrayproducts as $key => $value) {
        ?>  
            <option value = "<?php echo $key; ?>" 
            <?php
                if ($key == $productName){
                    echo 'selected="selected"';
                } 
            ?> >
            <?php echo $value; ?> 
            </option>
     <?php } //end foreach ?>   
   </select>
<?php }//end while ?>

一开始的 PHP 段中有纯 HTML 代码。

另外,我相信你想要

if ($value == $productName){

【讨论】:

  • 好的,我开始工作了...我决定在 PHP 标签中做所有事情。我的意思是错误是我在回显 echo"&lt;form method = \"POST\" action =\"edit.php\"&gt;"; echo "&lt;input type ='hidden' name='ID' value = '{$rows['ID']}'&gt;"; // echo "Product: &lt;input type='hidden' name='product' value = '{$rows['ProductName']}'&gt;"; echo "Product: &lt;input type='text' name='PName' value = '{$rows['PID']}'&gt;"; echo "&lt;select name =\"pNames\"&gt;"; 后错误地关闭了 >
  • ` foreach ($productsarry as $key => $value) { echo"”; }//foreach 循环结束 echo"";` 好的,至少现在选项显示了。然而,另一个该死的问题:'(基本上页面显示下拉菜单上的第一个选项,即'cholcate',而不是具体用户在数据库中保存的内容。为什么会这样。有什么想法吗?
  • 我回答的最后一行是你的问题吗?
  • 对于选项不显示的问题,我认为是因为我有这样的:` if ($key == $productName){ echo "selected=\"selected\">" ; }; ` 然后我将其更改为:if ($key == $productName){ echo "selected=\"selected\""; }echo"&gt;" 我相信这就是选项未显示的问题。我现在将尝试使用您的额外行修复未显示错误的选项。
  • 已修复!! WOO ...基本上我最终将其更改为 $key==$rows['productid'] !哈哈!!非常感谢您提供的帮助。真的很感激......我还有一件重要的事情我被困住了,但我很难继续问你:$
【解决方案2】:

这可能不是一个好地方,但由于我每天看到大量可怕的代码,我想我会插话。

首先,检查您的输入。永远不要相信来自用户 $_GET、$_POST 等的任何变量。原始代码的松散只是在寻找 SQL 注入攻击。

<?php

这东西看起来像是在期待某种传递的 ID,然后会从数据库中提取 productName ......这真的不清楚。所以我们假设已经定义了变量。需要使用这样的代码:

if(!empty($_GET['id'])&&is_numeric($_GET['id'])){
   $id=$_GET['id'];
} else {
   $id='';
}

//Declare your array
$arrayproducts = array();


while($rows=mysql_fetch_array($query)){

您需要在这里为返回的数组调用一些东西...没有看到 SQL 很难说出您的期望,但是您的标注应该看起来像这样...

//Whatever the name from SQL is for the column
$temp_ID = $rows['id'];

//Whatever the name for the product column is
$temp_Prod = $rows['prod'];

//Load the array
$arrayproducts[$temp_ID]=$temp_Prod;
}

最好为所有内容加载一个 var,然后一次性发布,而不是进出 PHP。代码会更快,您将能够跟踪代码。

$page = "<form method=\"POST\" action=\"edit.php\">";

检查该 ID 是否有效。正则表达式是最好的,但这里一次只做一件事。

if(!empty($id)){
    $page .= "<input type =\"hidden\" name=\"ID\" value = \"$id\">";
} 
$page .= "<select name =\"pnames\">\n";

foreach ($arrayproducts as $key => $value) {

   $page .= "<option value = \"$key\"";

最好使用 mysql 的自动增量字段和内置 ID,这样就不会有重复的 ID 接管现有记录。

      if ($id == $key){
        $page .= ' selected="selected"';
      }
   $page .= ">$value</option>\n";

//close the foreach
}

$page .= "</select>\n"; 

print $page;
?>

【讨论】:

  • 非常感谢您的回复和帮助。我现在已经修好了,这是因为我在回声中关闭了一个小“>”!!!离谱吧?现在的问题是 SELECTED 没有根据用户最初的选择显示:'(
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 2019-09-30
  • 2017-10-21
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
相关资源
最近更新 更多