Javascript 多页面环境下的PHP和JS

Javascript 多页面环境下的PHP和JS,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我为这有点长提前道歉。我一直在试图解决这个问题,但没有成功,所以我想发布我的大部分代码,以便帮助我的那些了不起的人能够更好地了解我在做什么。在我上一篇文章中,有人建议我创建一个新线程 我有一个项目,所有代码都发生在一个页面上,html、php、javascript和一系列SQL查询。我正试图摆脱这种情况,使用单独的页面,并将AJAX合并到其中,这样我就可以在不刷新页面的情况下更新作为页面中心的数据库 我有两个主页-test.php和getuser.php,还有两个较小的页面,update.php

我为这有点长提前道歉。我一直在试图解决这个问题,但没有成功,所以我想发布我的大部分代码,以便帮助我的那些了不起的人能够更好地了解我在做什么。在我上一篇文章中,有人建议我创建一个新线程

我有一个项目,所有代码都发生在一个页面上,html、php、javascript和一系列SQL查询。我正试图摆脱这种情况,使用单独的页面,并将AJAX合并到其中,这样我就可以在不刷新页面的情况下更新作为页面中心的数据库

我有两个主页-test.phpgetuser.php,还有两个较小的页面,update.phpupdate.js

php是我首先加载的页面。它分为两个
部分,顶部的div包含对我的数据库的SQL查询以选择用户,底部的div在从下拉菜单中选择用户后,启动脚本showUser(),并向getuser.php发送AJAX请求以加载下面页面的其余部分

test.php 和 只是为了确保正确加载我的.js文件

如果正常加载页面(test.php),我的页面顶部标题周围会有一个小的红色边框-因此会调用update.js,但不会在加载之后的getuser.php上调用它,因为该页面上的div周围没有小的红色边框。如果我不经过test.php直接加载getuser.php,边界就在那里,一切都正常


当我开始讨论这个问题时,我一定跳过了学习的某些部分,因为我不知道出了什么问题,或者我的一些代码只有在我直接加载页面而不是“内部”时才起作用最大的问题是加载到DOM中的HTML内容无法处理包含的JavaScript文件。因此,您应该使用jQuery的
.load()
来正确加载AJAX调用后面的页面。这将加载包含的JavaScript文件

整个街区:

function showUser(str) {
  if (str !==".PM") {
    if (str=="") {
      document.getElementById("txtHint").innerHTML="";
      return;
    } 
    if (window.XMLHttpRequest) {
      // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
    } else { // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
      }
    }
  }
  xmlhttp.open("GET","getuser.php?q="+str,true);
  xmlhttp.send();
}
变成:

function showUser(str) {
  if (str !==".PM") {
    if (str=="") {
      document.getElementById("txtHint").innerHTML="";
      return;
    } 
  }
  $("#txtHint").load( "getuser.php?q="+str );
}

不管有什么解决方案,您都应该放下一切,去研究什么是SQL注入攻击。您的代码容易受到许多攻击。这里有一个。考虑一下如果我发布了一个行ID为“代码> 1或1=1 < /代码>会发生什么。这将允许我同时将数据库中的所有记录更改为我想要的任何内容。是的,这是肯定的-当我将其从本地主机上移开时,我将使其不受注入的影响。谢谢你!在它运行的过程中,您必须对代码的工作方式进行大量更改,才能正确地完成这项工作。我的建议是从一开始就安全地编写代码,不要试图在以后添加它。我知道。。这个项目从我开始,我对HTML、SQL、PHP或JavaScript一无所知。。。。据我所知,它生长得很慢。这是我需要回去学习如何正确地做的一件事,然后在我上线之前将其合并。我会建议你,尽管这会很痛苦,不要使用此代码上线。完成它,决定你做了什么不太好,从头开始,以更好的方式重新构建,并从一开始就考虑安全。考虑使用像Laravel这样的框架,因为这是目前大多数生产代码编写的上下文。这种不安全的代码可能会导致您的服务器在您不知情的情况下被接管,在开始使用任何东西之前关闭安全部分是一件非常重要的事情。谢谢:)嗯。。。在进行更改之后,当我从下拉列表中选择一个名称时,现在什么也不会发生。我添加了
console.log(“showUser successful”),它出现在控制台中,所以我们开始使用函数,但是getuser.php?q=John%20Doe没有加载到我的div中#txtHintSo我将其更改为
$(“#txtHint”).load(“getuser.php?q=“+str,function(){console.log(“加载成功,字符串-”+str);})
和console.log正在打印出来,所以现在我更不明白为什么getuser.php没有加载到此div中。我将div文本更改为
新文本将转到此处
,选择名称后,文本
新文本将转到此处
被删除,所以它正在做一些事情……所以我已经为此工作了几个小时,阅读了我在网上找到的关于.load函数的所有信息。如果我将行修改为
$(“#txtHint”).load(“getuser.php?q=”)
并取出
+str
页面本身加载到DIV中。只有当我尝试在它后面添加额外的字符串时(你知道,使它工作的部分…lol),它才会出现故障。这可能很有用,但在我的控制台中,如果我将
+str
部分保留在那里,它将显示
XHR完成加载:GET“http://localhost/getuser.php?q=John". 而不是
q=johndoe
John%20Doe
。但它没有加载任何内容,还有其他想法吗?
$(function() {

    // Get the form.
    var form = $('#updateChanges');

    // Set up an event listener for the contact form.
    form.submit(function(event) {

    // Stop the browser from submitting the form.
    event.preventDefault();

    // Serialize the form data.
    var formData = form.serialize();

    // Submit the form using AJAX.
    $.ajax({
        type: 'POST',
        url: form.attr('action'),
        data: formData
    });
});
});
<?php

include('./db.php');

$data       = array();    //array to pass back the sum of PM Comments, PM Recs, Outcomes... etc....

for ($n = 0, $t = count($_POST['PMComments']); $n < $t; $n++) {
    $UpdateValue             = $_POST['Update'][$n];
    $PMCommentsValue         = $_POST['PMComments'][$n];
    $PMMRecommendationsValue = $_POST['PMMRecommendations'][$n];
    $OutcomeValue            = $_POST['Outcome'][$n];
    $NewGPPercentValue       = $_POST['NewGPPercent'][$n];
    $AdditionalGPValue       = $_POST['AdditionalGP'][$n];
    $LineID                  = $_POST['LineID'][$n];

    $sqlUPDATE = "UPDATE report SET PMComments = '$PMCommentsValue' , PMMRecommendations = '$PMMRecommendationsValue' , Outcome = '$OutcomeValue' , NewGPPercent = '$NewGPPercentValue', AdditionalGP = '$AdditionalGPValue'  WHERE LineID = $LineID ;";
?>
<div id="alerts">
<?php    
    echo $sqlUPDATE . "<br>";  //this echos back the entire SQL entry that will be made
?>
</div>
<?php    
    $doUPDATE = mysqli_query($con, $sqlUPDATE);
    if (!$doUPDATE) {
        die('Could not update data: ' . mysqli_error($con));
    }

    if ($OutcomeValue <> 'null') {                  

      $sqlMOVE  = "INSERT INTO results SELECT * FROM report WHERE LineID = $LineID ;" ;
      $sqlDELETE = "DELETE FROM report where LineID = $LineID ;" ;
      $doMOVE = mysqli_query($con, $sqlMOVE);
      if (!$doMOVE) 
        {
          die('Could not MOVE data: ' . mysqli_error($con));
        }
      $doDELETE = mysqli_query($con, $sqlDELETE);
      if (!$doDELETE) 
        {
          die('Could not DELETE data: ' . mysqli_error($con));
        } 
    }
}  

mysqli_close($con);
?>
$(document).ready(function(){ 

    $("div").css("border", "3px solid red");
  console.log("update.js loaded successfully");

});
function showUser(str) {
  if (str !==".PM") {
    if (str=="") {
      document.getElementById("txtHint").innerHTML="";
      return;
    } 
    if (window.XMLHttpRequest) {
      // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
    } else { // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
      }
    }
  }
  xmlhttp.open("GET","getuser.php?q="+str,true);
  xmlhttp.send();
}
function showUser(str) {
  if (str !==".PM") {
    if (str=="") {
      document.getElementById("txtHint").innerHTML="";
      return;
    } 
  }
  $("#txtHint").load( "getuser.php?q="+str );
}