【问题标题】:Rendered first Javascript before PHP在 PHP 之前渲染第一个 Javascript
【发布时间】:2015-06-09 16:26:57
【问题描述】:

假设PHP 文件中有:

    function printAllRows(){
      for( everyrows in db){
         echo "<tr>";
         echo "<td> $_POST['..'] <td>";
         echo "<td> $_POST['..'] <td>";
         echo "<tr>"; 
      }

     }


function printSpecifRows($keyword){
  .....
 }

//页面第一次加载时

 if ($db->preRow() >0){ // count rows in DB , if there already show them as table 
printAllRows();
}

同时,还有

<input type="text" name="keywoard"  />
<input type="submit" name="find" value="search" />

如果用户输入关键字按下按钮,则只显示匹配关键字的行!

所以:

if( $_POST["find"]){
 ?>

 <script>
 // first clear the current DOM table
  document.getElementById("myTable").innerHTML="";
 </script>

 <?php


 // then print again! according to printSpecifRows($keyword) 
 function printSpecifRows($keyword){
  .....
 }}

但这里的问题是 JSPHP 之前首先呈现,所以 printSpecifRows($keyword) 永远不会到达,任何想法。我真的很感谢你的帮助。谢谢。

【问题讨论】:

  • 危险:此代码是vulnerable to XSS。用户输入在插入 HTML 文档之前需要转义!
  • 您是否重新调整了 PHP 和 JavaScript 不能同时运行?为什么要在新页面加载时直接使用 JavaScirpt 来清除表格?
  • 好的,谢谢,但请帮助我。 :)
  • js 在 PHP 之前没有被“渲染”。 php在服务端执行,js在客户端执行。他们是完全不同的环境。
  • 谢谢你,@epascarello,@MarcB,我刚刚从这个问题中学到了很多新东西。

标签: javascript php


【解决方案1】:

你把事情搞得太复杂了。完全摆脱&lt;script&gt;。这里没有必要也没有涉及JS的意义。

只需更改 PHP,如果您不想在页面上显示数据,它就不会首先输出所有数据。

if ($_POST["find"]){
    printSpecifRows($_POST["find"]);
} else {
    printAllRows();
}

【讨论】:

  • 最好使用if (isset($_POST["find"])){... 来避免未定义索引错误,(或使用filter_input
  • 哦,我该死的性感 gf,我的想法如此深刻以至于我把一切都搞砸了,非常感谢昆汀。关于 XSS 为什么会这样?简单来说,我是菜鸟:) 再次感谢
  • @febri23 关于XSS:stackoverflow.com/questions/15755323/…有明确的例子。
猜你喜欢
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2011-07-15
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多