HTML <select>给出空选项值

时间:2017-05-01 23:39:15

标签: php html mysql

&LT;选择&GT; &LT; PHP $ connection = mysql_connect('localhost','root',''); mysql_select_db( '雇员'); $ query =“SELECT DISTINCT LEFT(from_date,4)AS date FROM薪水”; $ result = mysql_query($ query); while($ row = mysql_fetch_assoc($ result)){ $ date = $ row ['date']; echo'&lt; option value =“&lt;?php echo $ date?&gt;”&gt;&lt;?php echo $ date?&gt;&lt; / option&gt;'; echo $ date; } mysql_close(); ?&GT; &LT; /选择&GT; 当我使用标签选择选项时,获取空值(不显示任何内容)。当我删除select和/ select时,所有值都出现在屏幕上。为什么会发生这种情况以及我的代码出了什么问题?我希望将每个日期显示为一个选项。

2 个答案:

答案 0 :(得分:6)

你将php标签放在php中

echo '<option value="<?php echo $date ?>"><?php echo $date ?></option>';

应该是

echo '<option value="'.$date.'">'.$date.'</option>';

mysql也已弃用,请考虑更新

答案 1 :(得分:-1)

根据您的编码样式首选项,您可以通过将echo'ed字符串包装在双引号中来避免使用连接。这将允许您将变量直接放在字符串中。性能优势相当微观,但您可能会发现更容易阅读和调试您的工作。我发现如果有一堆连接只是为了回显变量,那么很容易有一个额外的或缺少的单引号并忽略它 - 所以除非编写一个内联条件语句或函数,否则通常会尝试避免它。

您也不需要声明一个新变量来存储$date = $row['date'];,回显像这样的数组元素是完全有效的:$row['date']

在echo'ed数组元素周围使用大括号。 Notepad ++或您正在编写的任何内容应该(或可能)很好地为您的脚本着色,以帮助您识别字符串中的变量。

enter image description here

我会将您的mysql_函数更新为mysqli并以这种方式编写代码:

if(!$db=new mysqli("localhost","root","","employees")){
    echo "Connection Error: ",$db->connect_error;  // do not echo when live
}elseif(!$result=$db->query("SELECT DISTINCT LEFT(from_date,4) AS date FROM salaries")){
    echo "Query Syntax Error: ",$db->error;  // do not echo when live
}elseif(!$result->num_rows){
    echo "Query Logic Error: No dates found in salaries table";  // write your preferred message
}else{
    echo "<select>";
        while($row=$result->fetch_assoc()){
            echo "<option value=\"{$row['date']}\">{$row['date']}</option>";
        }
    echo "</select>";
}

*请注意,双引号回波线内使用的任何双引号必须使用\进行转义/前置。

在PHP手册规范@ http://php.net/manual/en/language.operators.string.php下的评论中,有一些关于字符串连接,大括号和性能速度的讨论点。