不知道如何解决(在Php和Javascript之间)

时间:2015-11-16 16:04:09

标签: javascript php html

我不知道如何通过以下脚本解决变量 $ 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. "'";
}
?>

2 个答案:

答案 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查询中直接使用发布数据的评论对于防止攻击也至关重要 - 请确保在使用之前将其清理干净!