如何使用AJAX将用户输入值从PHP页面传递到HTML页面

时间:2014-01-25 12:59:38

标签: php html ajax

我在数据库中有一个课程表,用于存储课程信息(即代码,名称,日期和描述)。管理员可以更新课程信息。假设课程信息已经在我的数据库中,管理员打算更新课程信息。

当他前往更新页面(请参阅managemodule.php)时,我的页面将向他显示一个下拉选项,其中包含数据库中的课程列表。然后,他将从下拉列表中选择一个特定的课程,然后将在不同的 HTML输入字段中显示课程信息(通过'ajax实现)(信息输出通过占位符 attr。)。

我想在这里实现的是,管理员可以直接在输入字段中更新他们想要的任何信息,当他按下“更新”时,这些数据将被发送并在我的更新数据库。

但是我没有这样做。我知道这是managemodule.js中ajax代码的问题。 数据库中的课程表有4列代码,名称,日期和说明

managemodule.php:

<form id="moduleform" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <h2 class="fs-title">Module Info Update</h2>
    <p>Please select a module for more information:</p><br />

    <select id="modulelist" name="module" onchange="showModuleInfo(this.value)">
        <option>-- Select a module --</option>
        <option value="CS2102">Database Systems</option>   ***hard coded here for simplicity*****
    </select>

<?php    ****This php part is not updating my course table********
            if(isset($_POST['update']))
            {   
                mysql_query("UPDATE module SET code = '".$_POST['update_moduleCode']."' ");
            }
?>


    <div id="moduleinfo"><b><-- Module info will be listed here --></b></div>   
</form>

managemodule.js:

function showModuleInfo(str)
{
    if (str == "")
    {
        document.getElementById("moduleinfo").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("moduleinfo").innerHTML = xmlhttp.responseText;
        }
    }

    xmlhttp.open("GET","moduleinfo.php?q="+str,true);
    xmlhttp.send();
}

moduleinfo.php

    session_start();

    $q = $_GET['q'];
    $result = mysql_query("SELECT * FROM module WHERE code = '".$q."'");

    while($row = mysql_fetch_array($result))
    {
        echo '<input type="text" name="update_moduleCode" placeholder="Module Code" value="'.$row['code'].'" required />';
        echo '<input type="text" name="update_moduleTitle" placeholder="Module Name" value="'.$row['name'].'" required />';
        echo '<textarea name="update_moduleDescription" rows="14" placeholder="Module Description" required></textarea><br />';
        echo '<input type="submit" name="update" class="next action-button" value="Update" />'; 

*****I guess this 'Update' button is not passing the user input to my managemodule.php
    }

上面的managemodule.php中的php部分无效(意味着它不会更新我的课程表)。我想这是因为“更新”按钮没有将用户输入传递给managemodule.php。我用 $ _ POST ['update_moduleCode'] 想从moduleinfo.php获取值,但我没有设法得到。

那我该如何将moduleinfo.php的输入传递给managemodule.php

1 个答案:

答案 0 :(得分:3)

看来在moduleinfo.php文件中,单击它时,更新按钮无效。那是因为它不在HTML表单中,并且没有任何绑定到onclick事件。你应该创建一个像showModuleInfo()这样的函数,但是将数据发布到一个单独的PHP文件(将更新数据库)或者在moduleinfo.php中创建一个将数据发送到managemodule.php的HTML表单。

尽管如此,我还是对你的代码有一些考虑:

不推荐使用PHP扩展mysql

根据PHP文档(http://br2.php.net/manual/en/intro.mysql.php),不推荐使用此扩展。你应该使用mysqli或pdo_mysql。

您的代码容易受到SQL注入攻击

请注意,您正在将$ _GET中的信息直接用于MySQL查询。

$q = $_GET['q'];
$result = mysql_query("SELECT * FROM module WHERE code = '".$q."'");

它使您的代码容易受到一种名为SQL注入的攻击。相反,您应该使用mysqli_real_escape_string(http://br2.php.net/manual/en/mysqli.real-escape-string.php)或使用PDO预处理语句(http://br2.php.net/manual/en/pdostatement.execute.php)处理从$ _POST和$ _GET获取的变量。

您正在将业务逻辑与视图(HTML代码)混合

您正在同一个文件中编写业务逻辑代码和视图代码(HTML)。它使您的应用程序很难维护。您应该看看一些设计模式,从MVC(模型 - 视图 - 控制器)开始。

您正在编写纯JavaScript代码

嗯,这不是一件坏事。但是你应该考虑浏览器之间存在不一致,有时候,编写纯javascript代码,你的代码可以在浏览器中工作,但在另一个浏览器中不工作。您应该考虑查看可用的javascript框架(我推荐jQuery),它们会处理这些不一致的问题,并且还有很多现成的功能。