php - 检查 SQL PHP 上的两列是否匹配
问题描述
我有一个表格,用户必须在其中输入他们的预订 ID 和姓氏。如果这两个值在数据库中匹配,那么我需要从数据库中返回相应的值。
我有两个文件,一个是我使用 ajax 的 html,一个是 php 文件。单击按钮时,没有返回任何内容,我没有看到任何具体错误,并且我确信我输入的值是正确的。
<script>
var ajax = getHTTPObject();
function getHTTPObject()
{
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else if (window.ActiveXObject) {
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} else {
//alert("Your browser does not support XMLHTTP!");
}
return xmlhttp;
}
function updateCityState()
{
if (ajax)
{
var reservation_id = document.getElementById("reservation_id").value;
var guest_last_name = document.getElementById("guest_last_name").value;
if(reservation_id)
{
var param = "?reservation_id=" + reservation_id + "&guest_last_name=" + guest_last_name;
var url = "test04.php";
ajax.open("GET", url + param, true);
ajax.onreadystatechange = handleAjax;
ajax.send(null);
}
}
}
function handleAjax()
{
if (ajax.readyState == 4)
{
var guest_full_name = document.getElementById('guest_full_name');
var unit_number = document.getElementById('unit_number');
var floor = document.getElementById('floor');
var key_sa = document.getElementById('key_sa');
if(!!ajax.responseText) {
var result = JSON.parse(ajax.responseText);
if(!!result){
guest_full_name.innerHTML = (!!result.guest_full_name) ? result.guest_full_name : '';
unit_number.innerHTML = (!!result.unit_number) ? result.unit_number : '';
floor.innerHTML = (!!result.floor) ? result.floor : '';
key_sa.innerHTML = (!!result.key_sa) ? result.key_sa : '';
}
}
}
}
</script>
<p id='employee_name'></p>
<p id='employee_age'></p>
<p id='safe_code'></p>
我的 test04.php
<?php
$conn = mysqli_connect("","","","");
$reservation_id = mysqli_real_escape_string($conn, $_GET['reservation_id']);
$guest_last_name = mysqli_real_escape_string($conn, $_GET['guest_last_name']);
$query = "SELECT reservation_id, guest_full_name, guest_last_name unit_number, floor, key_sa FROM reservations2 INNER JOIN guest ON (reservations2.reservation_id=guest.reservation_idg) INNER JOIN unit USING (unit_id) where reservation_id ='".$reservation_id."'AND guest_last_name ='".$guest_last_name."";
$result = mysqli_query($conn, $query) or die(mysql_error());
$response = array();
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
$response['guest_full_name'] = ($row['guest_full_name'] != '') ? $row['guest_full_name'] : '';
$response['unit_number'] = ($row['unit_number'] != '') ? $row['unit_number'] : '';
$response['floor'] = ($row['floor'] != '') ? $row['floor'] : '';
$response['key_sa'] = ($row['key_sa'] != '') ? $row['key_sa'] : '';
}
}
echo json_encode($response, true);
?>
解决方案
我没有看到任何具体错误
- 你在看哪里?
- 您是否检查了 PHP 脚本的原始响应,或者只是查看浏览器中呈现的内容?
- 您是否确认错误日志记录正常工作并检查您的日志?
您的 PHP 逻辑尚不清楚 - 您的 JSON 数据和 PHP 数组无法处理多条记录,但您处理多条记录。正确实施 REST 会很好。这也应该应用身份验证并使用 CSRF 来确保安全 - 但我假设您出于说明目的而忽略了这些。
您的代码不是为了处理故障或丢失数据而编写的。考虑(注意与您发布的所有差异):
<?php
$conn = mysqli_connect("","","","");
$response = array();
$reservation_id = mysqli_real_escape_string($conn, $_GET['reservation_id']);
$guest_last_name = mysqli_real_escape_string($conn, $_GET['guest_last_name']);
$query = "SELECT reservation_id, guest_full_name
, guest_last_name unit_number, floor, key_sa
FROM reservations2
INNER JOIN guest
ON (reservations2.reservation_id=guest.reservation_idg)
INNER JOIN unit USING (unit_id)
WHERE reservation_id ='".$reservation_id."'
AND guest_last_name ='".$guest_last_name."";
$result = mysqli_query($conn, $query);
if (!$result) {
$response['status']=503
$response['msg']="Error";
trigger_error(mysql_error());
finish($response);
exit;
}
$response['status']=200;
$response['msg']='OK';
$response['guest_full_name'] = htmlentities($_GET['guest_last_name']);
$response['reservations']=array();
while($row = mysqli_fetch_assoc($result)) {
$response['reservations'][]=array(
'unit_number'=>$row['unit_number'],
'floor'=>$row['floor'],
'key_sa'=>$row['floor_sa']);
}
}
finish($response);
exit;
function finish($response)
{
header("HTTP/1.1 $response[status] $response[msg]");
header("Content-type: application/json");
echo json_encode($response, true);
}
推荐阅读
- php - 在终端更新 PHP
- java - CreateFromRessource ChipDrawable :此组件上的样式要求您的应用主题为 Theme.MaterialComponents
- python - Tweepy 不会响应用户名,而只会响应使用的字符串。任何线索我做错了什么?
- php - 如何在下拉列表中显示特定类别 ID 的子类别。在 laravel 内
- amazon-web-services - AWS cli/boto3- 是否可以知道角色或策略是否对资源具有权限?
- go - 是否可以找到我的容器正在运行的节点的区域和区域
- python - FastAPI 列 products.category_id 不存在
- c - 一个常量被分配给另一个常量而没有错误
- bash - sed - 用文件内容替换模式,而文件名是模式本身
- intellij-idea - 如何从 IntelliJ 在 Web 浏览器中打开 Java 文档