好吧所以我是php,ajax和mysql的新手,我已经搜索了论坛,尝试了一切,但仍然没有......我知道这是一个简单的错误,但因为它代表我的代码是通过我的表单输入空白信息到数据库但当我直接在查询中输入字符串时,它会出现在数据库中,请帮助我
PS我知道它可能不是最安全的代码,但这不是手头的问题
function message(){
alert("You are about to compose a message");
var stuff=[
'<div id ="compose_window">',
'<div id="new_message">',
'<div id="header"><strong> New Message </strong></div>',
'</div>',
'<form action="" method= "post">',
'<fieldset>',
'<strong>To</strong><br> <input type="text" id ="recipient" name="recipient" class="textfield"> <br>',
'<strong>Subject</strong><br> <input type="text" id="subject" name="subject" class="textfield"> <br><br>',
'<strong>Message</strong><br> <textarea id = "content" name="content" cols="40" rows="5"></textarea> <br>',
'<button id="send" type="button" onclick= loadXMLDoc()> <strong> Send </strong> </button>',
'</fieldset>',
'</form>',
'</div>',
'<div id="Response"></div>',
].join('');
document.getElementById("area").innerHTML= stuff;
}
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("ajaxResponse").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","send.php",true);
xmlhttp.send();
}
这是插入的php
<?php
$con=mysqli_connect("127.9.52.129","boballen","","cheapomail");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO messages (subject, recipient_ids, body)
VALUES
('$_POST[subject]','$_POST[recipient]','$_POST[content]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "Message Sent 1 record added";
mysqli_close($con);
?>
答案 0 :(得分:3)
您的代码容易受到SQL注入攻击,请在查询中使用它们之前使用预处理语句或转义变量。这个原因,为什么你在插入时得到空行,是这样的:
您在查询中使用$ _POST数组,而在Ajax中通过GET请求发送数据:
xmlhttp.open("GET","send.php",true);
使用$ _GET而不是$ _POST:
$sql = "INSERT INTO messages (subject, recipient_ids, body)
VALUES (?,?,?)";
if ($stmt = $mysqli->prepare($sql)) {
/* bind parameters for markers */
$stmt->bind_param("sss", $_GET['subject'],$_GET['recipient'],
$_GET['content']);
/* execute query */
$stmt->execute();
}
您也没有在Ajax请求中发送GET参数。尝试使用以下内容添加它们:
subject = encodeURIComponent(document.getElementById("subject").value);
recipient = encodeURIComponent(document.getElementById("recipient").value);
content = encodeURIComponent(document.getElementById("content").value);
xmlhttp.open("GET","send.php?subject=" + subject + "&recipient="
+ recipient + "&content=" + content,true);
您可以从页面上的相应输入中获取主题,收件人和内容变量。
答案 1 :(得分:0)
在查询中使用复选标记:
if(isset($_POST[subject]) && isset($_POST[recipient]) && isset($_POST[content])) {
$sql="INSERT INTO messages (subject, recipient_ids, body)
VALUES
('$_GET[subject]','$_GET[recipient]','$_GET[content]')";
}
并且您没有在xmlhttp.send();
发送数据以发送数据以获取发布页面上的数据。