【发布时间】:2019-10-21 08:54:00
【问题描述】:
我有一个问题。它不是让记录插入一次,而是在数据库表中插入两次。我正在使用 Javascript 函数将数据发送到 PHP,现在它将数据保存到数据库,毫无疑问,但不是有一个记录,而是保存了两次。我没有理由解释为什么会这样。
我用来保存数据的 javascript 如下所示:
function submitFormData(){
var xhr = new XMLHttpRequest();
var url = 'submit_request.php';
var fullname = document.getElementById("fullname").value;
var address = document.getElementById("address").value;
var address2 = document.getElementById("address2").value;
var city = document.getElementById("city").value;
var state = document.getElementById("state").value;
var telephone = document.getElementById("telephone").value;
var email = document.getElementById("email").value;
var vehicle_type = document.getElementById("vehicle_type").value;
var vehicleNo = document.getElementById("vehicleNo").value;
var visit_date = document.getElementById("visit_date").value;
var visit_purpose = document.getElementById("visit_purpose").value;
var whom_tosee = document.getElementById("whom_tosee").value;
var login_time = document.getElementById("login_time").value;
var params = 'fullname='+fullname+'&address='+address+'&address2='+address2+'&city='+city+'&state='+state+'&telephone='+telephone+'&email='+email+'&vehicle_type='+vehicle_type+'&vehicleNo='+vehicleNo+'&visit_date='+visit_date+'&visit_date='+visit_date+'&visit_purpose='+visit_purpose+'&whom_tosee='+whom_tosee+'&login_time='+login_time+'';
var txt = 'Please confirm the following Information\n FullName : '+fullname+'\n Address : '+address+'\n Address2 : '+address2+'\n City: '+city+'\n State: '+state+'\n Telephone: '+telephone+'\n Email: '+email+'\n Vehicle Type: '+vehicle_type+'\n Vehicle #: '+vehicleNo+'\n Visit Date: '+visit_date+'\n Visit Purpose : '+visit_purpose+'\n Who To see : '+whom_tosee+'\n Login Time : '+login_time+'';
var response = confirm(txt);
if(response == true){
xhr.open('GET', url, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200) {
// alert('Sending Data');
var finalurl = url +'?'+params;
window.location = finalurl;
}
}
xhr.send(params);
}else{
window.location ='e-vmsreserve.php';
}
}
用于将数据保存到数据库中的 PHP 看起来像这样
<?php
session_start();
if(!isset($_SESSION['userID']))
{
header("location: index.php");
}
?>
<?php
require_once('inc/config.php');
$con = mysqli_connect($host,$user,$pass,$db) or die ('Cannot connect: '.mysqli_error());
$query = "SELECT * FROM evmsdbusers WHERE username = '".$_SESSION['userID']."'";
$result = mysqli_query($con,$query) or die('Bad Query: '.mysqli_error($con));
while($row = mysqli_fetch_array($result)){
$fullname = $row['fullname'];
$username = $row['username'];
$designation = $row['designation'];
}
?>
<?php
require_once('inc/config.php');
$con = mysqli_connect($host, $user, $pass, $db) or die('Cannot connect, Reason:'.mysqli_error());
$fullname = mysqli_real_escape_string($con,$_GET['fullname']);
$address = mysqli_real_escape_string($con,$_GET['address']);
$address2 = mysqli_real_escape_string($con,$_GET['address2']);
$city = mysqli_real_escape_string($con,$_GET['city']);
$state = mysqli_real_escape_string($con,$_GET['state']);
$telephone = mysqli_real_escape_string($con,$_GET['telephone']);
$email = mysqli_real_escape_string($con,$_GET['email']);
$vehicle_type = mysqli_real_escape_string($con,$_GET['vehicle_type']);
$vehicleNo = mysqli_real_escape_string($con,$_GET['vehicleNo']);
$visit_date = mysqli_real_escape_string($con,$_GET['visit_date']);
$visit_purpose = mysqli_real_escape_string($con,$_GET['visit_purpose']);
$whom_tosee = mysqli_real_escape_string($con,$_GET['whom_tosee']);
$login_time = mysqli_real_escape_string($con,$_GET['login_time']);
$invitee_username =$username;
$sql = "insert into new_reservation (fullname,address,address2,city,state,telephone,email,vehicle_type,vehicleNo,visit_date,visit_purpose,whom_tosee,login_time,visitor_username) values ('".$fullname."','".$address."','".$address2."','".$city."','".$state."','".$telephone."','".$email."','".$vehicle_type."','".$vehicleNo."','".$visit_date."','".$visit_purpose."','".$whom_tosee."','".$login_time."','".$invitee_username."')";
mysqli_query($con, $sql) or die ('Bad Query, Reason: '.mysqli_error($con));
$message = "Appointment Reserved!";
echo '<script type="text/javascript">';
echo 'alert("'.$message.'");';
echo '</script>';
?>
现在我似乎不明白为什么我有 2 条记录,虽然不重复但它应该只有一条记录。
【问题讨论】:
-
为什么在post数据的时候使用
$_GET方法,还要使用prepare语句来防止SQL注入 -
GET with insert 是 SQL 注入的公开邀请,其次,由于
$_GET,这将在每次刷新时插入 -
@RobinSingh,$_GET 是重复记录的原因吗?
-
不,这不是原因
标签: javascript php mysql