【问题标题】:Compare html inputted value to value of sql database比较html输入的值和sql数据库的值
【发布时间】:2021-03-23 18:38:45
【问题描述】:

我想在input 中插入一个数字,然后当我单击submit 时,它将显示sql 表的行,其中cardNumber 的值与我在输入中写入的值相同。我用这个代码试过了,但它不起作用,如何修复它?

<form name="input">
      <input type="text" id="number" name="number">
      <input type="submit" id="submit">
  </form>

 $(document).ready(function() {
        $('#submit').click(function(e) {
            e.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'provera.php',
                data: {url: $('#number').val()}
            });
        });
    });
$broj = $_POST['number']; 

$sql = "SELECT cardNumber, holder, address, points, FROM data WHERE cardNumber = '$number'; 

【问题讨论】:

  • 查询时应该使用prepared statement,对sql注入开放。您提交的数据也被命名为“url”,因此 $broj 将 = $_POST['url']。您应该使用检查器来显示您的 JavaScript 发布数据,以便查看您发送和接收的内容。
  • 制作一个 print_r($_POST) 并检查属性。

标签: php jquery ajax


【解决方案1】:

如下实现并尝试理解代码流程。

Ajax 调用:

    $(document).ready(function() {
        $('#submit').click(function(e) {
            e.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'provera.php',
                data: { number : $('#number').val()},
                success: function(ajaxResponse){  
                    $("form").append(ajaxResponse);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) { 
                    alert("Status: " + textStatus); alert("Error: " + errorThrown); 
                }
            });
        });
    });

考虑创建 sql 表并转储测试数据。

CREATE TABLE `card` (
  `id` int(11) NOT NULL,
  `cardNumber` bigint(16) NOT NULL,
  `holder` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `points` float(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `card` (`id`, `cardNumber`, `holder`, `address`, `points`) VALUES
(1, 378282246310005, 'Billy H Pettis', '87A Ellis Road, Crowthorne\",RG45 6PJ', 30.00),
(2, 371449635398431, 'Winny Anderson', 'Apartment 7, 4 Connaught Place, London\",W2 2ET', 75.00),
(3, 378282246310005, 'Billy H Pettis', '5 East Green, Shaftesbury\",SP7 8FS', 50.00);

现在,这是使用 PDO 方法获取数据的服务器端代码。 (更改标记为“#######”的数据库连接详细信息)

provera.php

<?php
if( isset($_POST['number']) && !empty($_POST['number'])) {
    $cardnum = $_POST['number'];
    echo "<table style='border: solid 1px black;'>";
    echo "<tr><th>Card Number</th><th>Holder</th><th>Address</th><th>Points</th></tr>";

    class TableRows extends RecursiveIteratorIterator {
        function __construct($it) {
            parent::__construct($it, self::LEAVES_ONLY);
        }

        function current() {
            return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
        }

        function beginChildren() {
            echo "<tr>";
        }

        function endChildren() {
            echo "</tr>" . "\n";
        }
    }

    $servername = "localhost";
    $username = "##########";
    $password = "##########";
    $dbname = "###########";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("SELECT `cardNumber`, `holder`, `address`, `points` FROM `card` WHERE `cardNumber` =:cardnum");
        $stmt->execute(array('cardnum' => $cardnum ));
        
        // set the resulting array to associative
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

        foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
            echo $v;
        }
    }
    catch(PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
    $conn = null;
    echo "</table>";
}
?>

希望这能帮助你解决它。:)

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多