【问题标题】:Don't know how to solve (Between Php and Javascript)不知道怎么解决(Php和Javascript之间)
【发布时间】:2015-11-17 19:09:54
【问题描述】:

我不知道如何通过以下脚本解决变量$cat

"text" 变量从 Form 到 javascript 并传递给 php 函数为 $Categories_name$cat

$cat变量我已经测试过了,它不是“String”,是“object”,我不明白。

但我需要 $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. "'";
}
?>

【问题讨论】:

  • 尝试 document.getElementById("CategorySelect").text
  • PHP 在服务器端运行。因此,一旦页面到达浏览器 php 就不会运行。你的代码正在做的是运行函数 php_catable 参数 " + text + " 因为 javascript 只在浏览器中运行。
  • 具体怎么解决?我使用 .innerHTML 是因为当 Form 中的选项更改时,html 显示会立即更改
  • 你不能在Js中调用php函数(至少在这种情况下不是),它们不在同一个范围内,PHP代码在浏览器执行JS代码之前是由服务器方式执行的。
  • 在另一张纸条上。您有 SQL 注入风险"select * from table where xyz='" .$cat ."'"; 非常危险,尤其是因为您试图将用户输入直接放入查询中read this 以获取更多信息。

标签: javascript php html


【解决方案1】:

您混淆了服务器端代码和客户端代码。您的 php 代码位于服务器上,只能在服务器上执行。并且您的 javascript 在您的客户端浏览器上并且不知道服务器(请记住,php 生成一个文本文件,并且只有该文本文件被发送到浏览器)。如果您想使用客户端的php_catable() 函数,您需要调用AJAX 或重新设计您的页面以进行表单提交(就像Steve 提议的那样)。

【讨论】:

    【解决方案2】:

    您的第一页: 假设 CategorySelect 是一个下拉选择框,为其 onChange 事件创建一个脚本,并创建一个带有隐藏输入的 method="post"post 表单,该表单将转到“generate_table.php”。

     <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();"
    

    您的接收页面: 所以你的接收页面“generate_table.php”会有

     <?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 根据有关客户端/服务器端的 cmets 发布回服务器,并由 @litelite 回答。要让它执行看起来像 innerHTML 的操作,它会更改页面的一部分而不提交整个页面,您将需要 AJAX,再次按照@litelite 的回答。

    可能会因为依赖 JavaScript 而被标记,但主要是为了帮助澄清客户端和服务器。

    如果你想避免这个脚本的 JavaScript 依赖,你可以完全省略 onChange 并添加一个提交按钮,然后收集 $_POST['CategorySelect']; 假设这是它的名字 - 确保它有 name="CategorySelect" 用于 php 以及它的您的 css/javascript 的 ID。 Php 从项目名称中获取其变量。

    要在视觉上获得有点像 AJAX 的效果(尽管页面仍然提交),您可以在表单上使用 action="&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;" 将页面提交给自身,并将所有代码放在一个页面上。您可以将表格生成代码放在您希望表格出现的 div 中 - 当然,它需要一个默认状态集。

    @litelite关于不在 sql 查询中直接使用已发布数据的评论对于防止攻击也很重要 - 请确保在使用前清理它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-15
      • 2020-01-29
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多