我在数据库中有一个课程表,用于存储课程信息(即代码,名称,日期和描述)。管理员可以更新课程信息。假设课程信息已经在我的数据库中,管理员打算更新课程信息。
当他前往更新页面(请参阅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
答案 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),它们会处理这些不一致的问题,并且还有很多现成的功能。