HTML表单没有将值传递给MySQL查询

时间:2014-02-19 21:32:52

标签: php html mysql

我有以下代码,我想用它来结合MySQL查询中下拉列表的日期值,所以我可以按日期过滤。

<form action="" method="post">
<label class="custom-select">
<select name="q">
<option value="">Month:</option>
<option value="MONTH(post_date) = 1">Jan</option>
<option value="MONTH(post_date) = 2">Feb</option>
<option value="MONTH(post_date) = 3">Mar</option>
<option value="MONTH(post_date) = 4">Apr</option>
<option value="MONTH(post_date) = 5">May</option>
<option value="MONTH(post_date) = 6">Jun</option>
<option value="MONTH(post_date) = 7">Jul</option>
<option value="MONTH(post_date) = 8">Aug</option>
<option value="MONTH(post_date) = 9">Sep</option>
<option value="MONTH(post_date) = 10">Oct</option>
<option value="MONTH(post_date) = 11">Nov</option>
<option value="MONTH(post_date) = 12">Dez</option>
</select>
</label>
<label class="custom-select">
<select name="q">
<option value="">Year:</option>
<option value="AND YEAR(post_date) = 2013">2013</option>
<option value="AND YEAR(post_date) = 2014">2014</option>
<option value="AND YEAR(post_date) = 2015">2015</option>
</select>
</label>
<input name="submit2" id="submit2" style="margin-left: 15px;" type="submit" value="Pesquisar">
</form>

<?php 
if ($_POST['q'] == '') {
    $q = 'YEAR(post_date) = YEAR(CURDATE())';
}
else {
    $q = $_POST['q'] ;
}

$query=mysql_query("SELECT *, 'Yield'
FROM wp_posts
WHERE p.post_status = 'publish' AND ".$q." 
LIMIT 0, 2500")
?>

这不起作用,我收到错误:你的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'AND YEAR(post_date)= 2014

附近使用正确的语法

有人可以帮忙吗?感谢

3 个答案:

答案 0 :(得分:1)

您的月份和<select>框有name="q",因此只有最后一个(本例中为年份)框传递给您的PHP。

monthyear分别命名为使用$_POST['month']$_POST['year']

访问它们

<强> HTML

<select name="month">
    <option value="01">January</option>
</select>
<select name="year">
    <option value="1952">1952</option>
</select>

<强> PHP

$q = $_POST['month'].'-'.$_POST['year']; // this gives you   01-1952

答案 1 :(得分:1)

这可能无法修复,但如果您将引号更改为此

$query=mysql_query('SELECT *, Yield
FROM wp_posts
WHERE p.post_status = publish AND '.$q.' 
LIMIT 0, 2500');

它可能会奏效。我认为问题可能出在你在声明中使用两种不同类型的引号。

答案 2 :(得分:0)

您的查询中有两个AND,另外您使用别名p而不定义它:

$query=mysql_query("SELECT *, 'Yield'
FROM wp_posts 
WHERE post_status = 'publish' ".$q." 
LIMIT 0, 2500");

我建议更改sql驱动程序以更安全(使用绑定参数来准备语句)