我不知道如何通过以下脚本解决变量 $ cat 。
"的文本"从Form到javascript的变量,并传递给php函数为 $ Categories_name ,并且为 $ cat 。
我已经测试了 $ cat 变量,它不是"字符串",它是"对象",我不明白。
但我需要 $ cat 才能成为" String"。
当测试="这是Cat" (3个字),
我通过php str_word_count测试$ cat,输出为1(我需要更正答案3);
我通过php var_dump测试$ cat而没有输出(我需要更正答案" String")。
<p id="CaTable"></p>
<script>
function CaFunction()
{
var text = document.getElementById("CategorySelect").value;
document.getElementById("CaTable").innerHTML = "<?php php_catable('" + text + "'); ?>";
}
</script>
<!-- Generate Table by php and MySQL-->
<?php
function php_catable($Categories_name)
{
$cat = $Categories_name;
.................
.................
$sql = "select * from table where xyz = '" .$cat. "'";
}
?>
答案 0 :(得分:1)
您将服务器端代码和客户端代码混淆。您的PHP代码存在于服务器上,只能在服务器上执行。并且您的javascript在您的客户端浏览器上并且不知道服务器(记住,php生成文本文件,并且只有该文本文件被发送到浏览器)。如果您想使用客户端的php_catable()
功能,则需要进行AJAX调用或重新设计页面以进行表单提交(就像{3}}提议的那样)
答案 1 :(得分:1)
您的第一页:
假设CategorySelect
是一个下拉选择框,为其onChange事件创建一个脚本并创建一个method="post"
帖子表单,其中隐藏的输入转到&#34; generate_table.php&#34;。
<input type="hidden" name="ca_table" id="ca_table" />
你使ca_table成为一个隐藏的输入,这样当这个页面被提交到第二个页面时,php将从中获取值,你可以使用php函数生成你的表。
<script language="javascript" type=text/javascript>
function CaFunction(){
documentGetElementById('ca_table').value = documentGetElementById('CategorySelect').value;
submit();
}
</script>
将此添加到您的选择下拉列表中:
onChange="CaFunction();"
您的接收页面: 所以你的接收页面&#34; generate_table.php&#34;会有
<?php
function php_catable($Categories_name)
{
$cat = $Categories_name;
.................
.................
$sql = "select * from table where xyz = '" .$cat. "'";
}
$category_name = $_POST['ca_table']; // cleaned up at least with suitable preg_replace etc
// and call your catable function
php_catable($category_name);
?>
这样,您的结果将根据@Fluinc的客户端/服务器端评论回发到服务器,并按@litelite回答。为了让它做一些看起来像innerHTML的东西,它改变页面的一部分而不提交整个页面,你将需要AJAX,再次按照@litelite的答案。
可能会因为依赖JavaScript而被标记下来,但主要是为了帮助澄清客户端v服务器。
如果你想避免这个脚本的JavaScript依赖,你可以完全忽略onChange并添加一个提交按钮,然后收集$_POST['CategorySelect'];
,假设它是它的名字 - 确保它有name="CategorySelect"
的php以及它的css / javascript的ID。 Php从项目名称中获取变量。
为了获得类似于AJAX的视觉效果(尽管页面仍然提交),您可以使用表单上的action="<?php echo $_SERVER['PHP_SELF']; ?>"
将页面提交给自己,并将所有代码放在一页上。您可以将生成代码的表放在您希望表出现的div中 - 当然,它需要一个默认状态集。
@litelite关于不在sql查询中直接使用发布数据的评论对于防止攻击也至关重要 - 请确保在使用之前将其清理干净!