【问题标题】:options are not getting printed/echoed?选项没有被打印/回显?
【发布时间】:2012-08-05 04:04:21
【问题描述】:

此页面生成从数据库中提取的选项。另一个页面通过 year_joining 将学生加入的年份带到这里。其余的 mysql 查询工作得很好(经过测试)

<?php
include_once("../Include/connectdb.php");

if($_GET['year_join'])
{
$id=$_GET['year_join'];

$result1 = mysql_query("select distinct sub_id from subject_profile where   batch='$id'        

")or die(mysql_error());

  while($subid = mysql_fetch_assoc($result1)){

 $result2 = mysql_query("SELECT name FROM  `subjects` WHERE  `sub_id` LIKE    

'$subid[sub_id]'");

    $subject=mysql_fetch_assoc($result2);

    if($subject[name]!=""){
  //print "<OPTION value=".$tmp.'">'.$tmp.'</OPTION>';
  //print "<OPTION value='$tmp'>'$tmp'</OPTION>";
  echo "<option value=".$subject['name'] . '">' . $subject['name'] . '</option>';
  //echo '<option value="'.$id.'">'.$data.'</option>';
 //}
 }
}
}
?>

仅供参考:

//print "<OPTION value=".$tmp.'">'.$tmp.'</OPTION>';
//print "<OPTION value='$tmp'>'$tmp'</OPTION>";
echo "<option value=".$subject['name'] . '">' . $subject['name'] . '</option>';
//echo '<option value="'.$id.'">'.$data.'</option>';

这些都不起作用... :(

使用简单的 echo $tmp 就可以了 但是当我把作为

echo "<option value=";

结果是空白页...

当我回显变量时,它的工作非常好

echo $tmp;

给出所有主题的列表..

【问题讨论】:

  • 请不要使用mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。看到 red box 了吗?相反,您应该了解prepared statements 并使用PDOMySQLi。如果你不能决定哪一个,this article 会帮助你。如果你选择 PDO,here is good tutorial.
  • 有什么选择??对于 mysql_*
  • mysql_ 的替代品是mysqli_,或使用PDO
  • 您的 HTML 代码不一致。使用“选项”。小写是要走的路
  • @ShaquinTrifonoff mysqli:: 也有效

标签: php


【解决方案1】:

关于“不显示输出”的问题,我相信你错过了一个包含&lt;option&gt;标签的&lt;select&gt;标签。

作为旁注,在查询中,将其更改如下:

"SELECT name FROM  `subjects` WHERE  `sub_id` LIKE '{$subid[sub_id]}'"

或者,

"SELECT name FROM  `subjects` WHERE  `sub_id` LIKE '" . $subid[sub_id] . "'"

仍然不安全。您应该转义这些值并更好地使用使用 mysqli 或 PDO 的准备好的语句

【讨论】:

  • 你不明白..问题出在 echo 语句上,sql 查询工作得很好......
  • 选项周围有&lt;SELECT&gt; 标签吗?你检查过输出页面的html源吗?
  • @ratankumar - 以下是转义值的方法:mysqli_real_escape_string.
  • 不客气 :) 此外,选项的语法如下:&lt;option value="abc"&gt;abc&lt;/option&gt;。也就是说,value 属性用双引号括起来。因此,您的代码中也存在该错误。检查 Shaquin Trifonoff 对样本的回答。
  • 是的,该功能有助于转义值并防止 sql 注入。但我们都推荐使用mysqliPDO。祝你好运:)
【解决方案2】:

主要问题是根据 Akhilesh B Chandran 的回答,缺少 &lt;select&gt; 标签。

除此之外,$subject['name'] 里面有空格会出现问题。

问题出在这一行:

echo "<option value=".$subject['name'] . '">' . $subject['name'] . '</option>';

应该是这样的:

echo '<option value="'.$subject['name'] . '">' . $subject['name'] . '</option>';

在您当前拥有的内容中,浏览器将结果解释为:

<option value=insert name here">insert name here</option>

可见,value= 之后缺少引号。

【讨论】:

    【解决方案3】:

    您的引号不匹配,这就是 PHP 失败的原因。

    尝试改变:

    echo "<option value=".$subject['name'] . '">' . $subject['name'] . '</option>';
    

    到:

    echo "<option value=".$subject['name'] . ">" . $subject['name'] . "</option>";
    

    基本上,您开始使用",然后在中途切换到使用'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多