繁体   English   中英

(可能)POST方法的未知问题

[英]Unknown problem with (probably) POST method

这个任务很简单,但我似乎无法让它工作。 下图解释了结果应该是什么。 我想 php 中的 POST 存在某种问题,但我不确定。 您是否看到导致此操作不起作用的问题是什么?

问题:应该有结果时没有显示结果。

图片

<?php
$conn = mysqli_connect("localhost", "root", "", "podaci");
 
if($conn === false){
    die("Konekcija nije uspešna. " . mysqli_connect_error());
}

$number = $_POST['number']; 
$result_array = array();

/* SQL query to get results from database */
$sql = "SELECT brojKartice, imeVlasnika, prezimeVlasnika, adresaVlasnika, 
ostvareniBodovi, ostvareniPopust FROM podatak WHERE brojKartice = '".$number."' "; 

$result = $conn->query($sql);

/* If there are results from database push to result array */
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        array_push($result_array, $row);
    }
}
/* send a JSON encded array to client */
echo json_encode($result_array);

$conn->close();
?>
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="style.css">
  <meta charset="UTF-8">
</head>
<body>
  <div class = "container" > 
       <strong>Unesite broj kartice: </strong><input id="number" name="number" required/>
    <input type="button" id="getusers" value="Provera"/> <br><br>
    <div id="records"></div>  
    </div> 

<script src="http://code.jquery.com/jquery-3.1.1.min.js"></script>
<script type="text/javascript"> 

$(function() {
    $('#getusers').click(function(e) {
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: 'provera.php',
            data: {
                number: $('#number').val()
            }
        });
    });
});

    $(function(){ 
      $("#getusers").on('click', function(){ 
      $.ajax({ 
        method: "GET",   
        url: "provera.php",
      }).done(function( data ) { 
        var result= $.parseJSON(data); 

          var string='<table width="100%"><tr><th>#</th><th>Korisnik</th><th>Adresa</th><th>Bodovi</th><th>Popust</th><tr>';
 
 /* from result create a string of data and append to the div */
  $.each( result, function( key, value ) { 
    string += "<tr> <td>"+value['brojKartice'] + "</td><td>"+value['imeVlasnika']+' '+value['prezimeVlasnika']
      + "</td><td>"+value['adresaVlasnika']+ "</td><td>"+value['ostvareniBodovi']+ "</td><td>"
        +value['ostvareniPopust']+"</td> </tr>"; 
        }); 
       string += '</table>'; 
    $("#records").html(string);
       }); 
    }); 
});

</script> 
</body>
</html>
CREATE DATABASE podaci;

CREATE TABLE podatak (
brojKartice VARCHAR(10) NOT NULL,
imeVlasnika VARCHAR(20) NOT NULL,
prezimeVlasnika VARCHAR(30) NOT NULL,
adresaVlasnika VARCHAR(50),
ostvareniBodovi VARCHAR(10) NOT NULL,
ostvareniPopust VARCHAR(10) NOT NULL,
rokVazenja DATE NOT NULL
);

INSERT INTO podatak VALUES
('0123456','Đorđe','Anđelković',NULL,'15','150','2021-1-9'),
('6543210','Snežana','Bojović',NULL,'20','200','2021-5-3'),
('9876543','Goran','Stojadinović',NULL,'10','100','2021-9-7'),
('3456789','Bojana','Marković',NULL,'25','250','2021-12-15');

欢迎。 这里有一些提示可以帮助您确定问题的根源:

  1. 您的浏览器是否发出您期望的 HTTP 请求? 通过查看您的 Javascript,您会期望 POST 和 GET。 如果您使用的是 Google Chrome,请查看 开发工具 - 网络
  2. 服务器收到什么 HTTP 请求? 您可以按照官方调试文档并阅读其注释来调试您的 PHP 代码。 尤其:
<?php print_r($_POST); ?>
  1. 服务器是否在回答您期望的数据? 检查用于获取数字的 HTTP 动词(GET 或 POST)(提示:代码的第 8 行)。 现在检查您放置 Javascript 回调以处理服务器响应的 HTTP 调用(GET 或 POST)。

答:您的 PHP 代码从 POST 请求中读取数字,但您的 Javascript 代码仅支持来自 GET 请求的响应。

通过将回调(作为.done()方法的参数传递的function块)从 GET 请求移动到 POST 请求来简化您的 Javascript。 然后删除处理GET请求的Javascript代码。

或者,将 $_POST 替换为 $_GET 并删除 POST 调用。

首先,您有两个用于#getusers按钮的事件处理程序。 这首先没有意义。 每当您在 html 元素上分配多个事件处理程序时,只有最后一个会触发。 在这种情况下,它只是使用GET方法的 ajax 调用。 在你的服务器端(php),这个变量$number = $_POST['number']; 不会有值,因为方法是GET

所以要解决这个问题,你有两个我能想到的选择:

#1。 将您拥有的第一个 ajax 调用移动到您有POST请求的位置,然后将其放置在您使用GET方法的 ajax 调用的位置。 简而言之,将GET替换为POST事件。

#2。 将您的 php 代码更改为使用$_GET并更新您的 ajax 调用以使GET遵守 PHP 更改。

您可以删除按钮的任一事件处理程序,只绑定一个。

以下是有关 javascript 事件处理程序和 addEventListeners 的快速参考:https://gist.github.com/belmer/5e4132ceaabb0cafab2

此致,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM