2014-10-16 108 views
3

学习PHP并遇到一个我无法弄清楚的问题。我读过PHP只有函数的作用域,所以我不确定为什么我的switch语句没有改变变量的值。php:根据下拉列表更改变量的值

目标:根据用户选择的下拉列表更改mysql SELECT语句。

形式:

<form action="contacts_show.php" method="POST"> 
    <select name="grade" id="grade"> 
    <option value="all">All Levels</option> 
    <option value="elementary">Elementary</option> 
    <option value="middle">Middle</option> 
    <option value="senior">Senior</option> 
<input type="submit" name="browse" id="browse" value="Browse" /> 
</form> 

PHP(编辑以缩短代码):

$levelSelected = $_POST['grade']; 

if ($levelSelected == "all") { 
    $querySelect = "SELECT * FROM teachers ORDER BY school ASC"; 
} else { 
    $querySelect = "SELECT * FROM teachers WHERE school LIKE %$levelSelected% ORDER BY school ASC"; 
} 

$query = $querySelect; 
$result = mysqli_query($connection, $query); 
confirm_query($result); 

的confirm_query功能,如果需要的话:

function confirm_query($result_set) { 
    if (!$result_set) { 
     die("Database query failed."); 
    } 
} 

当从 “所有级别” 掇选择向下,代码按预期运行。当选择任何其他选项时,我的confirm_quaery函数声明查询失败。

我不知道为什么变量的值没有切换。

+3

'LIKE%elementary%'=>'LIKE'%elementary%''并且为其他人做同样的事情。你不检查数据库错误。如果这仍然不起作用,那么这也是一个范围问题。 – 2014-10-16 14:28:33

+0

你可以使用'mysqli_error'从mysqli得到确切的错误,或者你可以有mysqli抛出异常。 – jeroen 2014-10-16 14:30:36

+0

你试图解析字符串不是整数,你应该得到一个错误。 请尝试'%all%'而不是%all% – Azarus 2014-10-16 14:34:58

回答

2

要阐述我的意见:

变化LIKE %elementary%到=>LIKE '%elementary%',做了别人不一样。

你需要用引号括模式匹配,并按照手册: '大卫'

的mysql> SELECT LIKE'%D%v%';
mysql> SELECT 10 LIKE'1%';

您还没有检查数据库错误。

添加or die(mysqli_error($connection))mysqli_query()

如果仍然无法正常工作,那么它也是一个范围问题。
传递连接到你的函数,做不是使它成为全球。

相关问题