js的变量无法传入php进入sql查询
<label>线路类别</label><selectname="cat"id="subject_2"class="small-input"onchange="getval...
<label>线路类别</label>
<select name="cat" id="subject_2" class="small-input" onchange="getval()">
<option>选择类别</option>
<option value="国内">国内</option>
<option value="出境">出境</option>
<option value="周边">周边</option>
<option value="三峡">三峡</option>
</select>
</p>
//这里下拉菜单选完后,下面的js是获取到了,加了弹出菜单,显示也正确;
<script>
function getval(){
var val=document.getElementById("subject_2").value;
alert(val);
}
</script>
//关键在这里,下面的php变量$sel无法获取js变量val的值,自然那个sql里的变量变不能随下拉菜单的值变动而变动,而形成联动菜单
<?php
include("config.php");
$sel = "<script>document.write(val)</script>";
$sql = "select * from en_cat where cat like '"&sel&"' order by id desc";
$resule = mysql_query($sql,$q);
?>
// 这里是动态的联动菜单;
<p>
<label>区域</label>
<select name="article_cat" class="small-input">
<option>选择类别</option>
<?
while($myrow=mysql_fetch_array($resule))
{
?>
<option value="<?= $myrow['area_value'] ?>"><?= $myrow['area'] ?></option>
<?php
}
?>
</select>
</p>
请教各位高手,这个错在哪里,怎么改? 展开
<select name="cat" id="subject_2" class="small-input" onchange="getval()">
<option>选择类别</option>
<option value="国内">国内</option>
<option value="出境">出境</option>
<option value="周边">周边</option>
<option value="三峡">三峡</option>
</select>
</p>
//这里下拉菜单选完后,下面的js是获取到了,加了弹出菜单,显示也正确;
<script>
function getval(){
var val=document.getElementById("subject_2").value;
alert(val);
}
</script>
//关键在这里,下面的php变量$sel无法获取js变量val的值,自然那个sql里的变量变不能随下拉菜单的值变动而变动,而形成联动菜单
<?php
include("config.php");
$sel = "<script>document.write(val)</script>";
$sql = "select * from en_cat where cat like '"&sel&"' order by id desc";
$resule = mysql_query($sql,$q);
?>
// 这里是动态的联动菜单;
<p>
<label>区域</label>
<select name="article_cat" class="small-input">
<option>选择类别</option>
<?
while($myrow=mysql_fetch_array($resule))
{
?>
<option value="<?= $myrow['area_value'] ?>"><?= $myrow['area'] ?></option>
<?php
}
?>
</select>
</p>
请教各位高手,这个错在哪里,怎么改? 展开
1个回答
2014-08-21
展开全部
不是错不错的问题,而是你没有理解清楚javascript和php的差异,以及他们的运行方式!
javascript是客户端语言, 说白了, 就是运行在浏览器之类的软件上
php是服务器端语言,
而恰恰是: 网站的运行过程是: 先服务器端, 也就是php先运行, 完成后, 将结果发送回客户端浏览器, 这个时候浏览器再运行!
说通俗点, 当浏览器运行js的时候,php早就完事了!
那么, 你的js变量怎么就能直接给php呢???
况且, php和js本身就是两种, 就本身而言来说, 根本就没有直接关系, 完全是两码事, 那么, 他们之间的变量怎么能共用呢?
php生成js变量倒是可以!
因为php本身就可以输出任何符合客户端语言语法的信息, 而且php先运行!
要完成你这个要求,只能, js将变量作为参数, 再次请求php执行, 建议使用Ajax
javascript是客户端语言, 说白了, 就是运行在浏览器之类的软件上
php是服务器端语言,
而恰恰是: 网站的运行过程是: 先服务器端, 也就是php先运行, 完成后, 将结果发送回客户端浏览器, 这个时候浏览器再运行!
说通俗点, 当浏览器运行js的时候,php早就完事了!
那么, 你的js变量怎么就能直接给php呢???
况且, php和js本身就是两种, 就本身而言来说, 根本就没有直接关系, 完全是两码事, 那么, 他们之间的变量怎么能共用呢?
php生成js变量倒是可以!
因为php本身就可以输出任何符合客户端语言语法的信息, 而且php先运行!
要完成你这个要求,只能, js将变量作为参数, 再次请求php执行, 建议使用Ajax
更多追问追答
追问
再请问,把下拉菜单的值即时传给下面的sql里,发生联运菜单,这种思路到底正确吗?请问老师$sql = "select * from en_cat where cat like '"&sel&"' order by id desc";这里到底写得对吗,为什么通过echo $sel;能传出值,但变量参与到sql查询中,就像什么没发生过一样
追答
php中, 变量与变量或者变量与字符之间的连接, 应使用点号
你这种语法, 是asp的语法!
同时, 你要注意你的引号的使用, 如果你使用了双引号, 那就不必使用连接符来进行连接, 应php会解析双引号内的变量, 这点特性是php的特殊之处, 与其他比如asp语言是有差别的一点!
当然, php中, 如果不是有必要, 尽量不要用双引号,而是尽可能的使用单引号!
你上面的代码可以修改如下:
$sql = "select * from en_cat where cat like '$sel' order by id desc";
或者
$sql = "select * from en_cat where cat like '{$sel}' order by id desc";
或者
$sql = 'select * from en_cat where cat like \'' . $sel. '\' order by id desc';
或者
$sql = "select * from en_cat where cat like '" . $sel . "' order by id desc";
重复的说一句, js变量是js变量, php变量是php变量, js不能直接作用于php, 但php可以生成符合js语法的代码
比如:
var a = <?php echo 10;?>;
这样是可以的
哦,还有, sql语句中, 既然你使用了like关键词, 那就应该还要有sql语句的通配符, 否则就是画蛇添足
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询