【问题标题】:How to send information (return) from php to javascript如何将信息(返回)从 php 发送到 javascript
【发布时间】:2019-11-20 01:22:18
【问题描述】:

我目前正在尝试为课程编写一个愚蠢的网站。我正在尝试访问我的 PHP 文件以检查该名称是否存在于数据库中。当它这样做时,它需要将 1 或 0 返回到 javascript 部分。有没有真正的方法可以做到这一点?

返回的原因是如果名称确实存在,它只会向用户发送警报,嘿,名称存在,继续前进。

请注意,我正在使用 w3school.com 的教程,以防我的代码看起来像一些业余水平的 sh*t。

javascript:

function checking(){
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.open("GET", "checker.php?firstname=" + firstname + "&lastname=" + lastname, true);
                xmlhttp.send(); 
                alert (queue);
            }

php:

<?php
    session_start();

    $firstname = $_GET['firstname'];
    $lastname  = $_GET['lastname'];
    $yes = 1;
    $no = 0;
    //Information needed in order to access database
    $dbname = "**********************";
    $servername = "localhost";
    $username = "************************";
    $password = "************";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    $sql_query = "SELECT firstname, lastname FROM queue_1 WHERE firstname='".$firstname."' and lastname='".$lastname."'";

    $result = mysqli_query($conn,$sql_query);
    $row = mysqli_num_rows($result);

    if($row == 1){
        echo ($yes);
    }
    else
    {
        echo ($no);
    }
?>

【问题讨论】:

  • 为了让 PHP 与 JavaScript 通信,您需要将 echo 信息从 PHP 输出到页面上(可能在隐藏的 &lt;div&gt; 中),然后在 JavaScript 中使用 getElementById() 之类的东西检索它。 但是,如果您是从 JavaScript 本身进行初始调用,您可以简单地使用 AJAX(如 XMLHttpRequest)并检查 response

标签: javascript php sql


【解决方案1】:

我在这里看到了一些问题,您的 JS 代码正试图访问一个未定义的变量(至少在您发布的函数的上下文中)queue

在您的 PHP 代码之外,确保 JS 正在处理来自 PHP 的 响应,通过将事件侦听器附加到您的请求来做到这一点。 当您的 PHP 脚本完成时将触发 load 事件,如果您的代码比警报更复杂,您可以将其指向一个命名函数。

更多信息在这里MDN Docs

function checking(){ 
    var xmlhttp = new XMLHttpRequest() ;
    xmlhttp.addEventListener("load", function () {
        alert(this.responseText);
    });
    xmlhttp.open("GET", "checker.php?firstname=" + firstname + "&lastname=" + lastname, true);
    xmlhttp.send();
 }

这是假设您尝试将响应文本显示为警报消息。

另外,请注意将未经过滤的用户输入传递到 SQL 查询中,这可能会导致注入攻击,我建议您更改 PHP 代码以使用 mysqli 库中的准备好的语句。

$conn = new mysqli($servername, $username, $password, $dbname);
$sql_query = "SELECT firstname, lastname FROM queue_1 WHERE firstname=? AND lastname =?";
$stmt = $conn->prepare($sql_query) ;

$stmt->bind_param('s', $firstname);
$stmt->bind_param('s', $lastname);
$stmt->execute();

$stmt->store_result();
echo $stmt->num_rows === 1 ? $yes : $no;
$stmt->free_result() ;
$stmt->close() ;

如果其中一些令人困惑mysqli documentation

,可以在此处找到有关 mysqli 的更多信息

最后一点,在您的 sql 中,如果您只寻找记录的存在,则执行 SELECT 1 FROM table WHERE fieldname=? LIMIT 1 往往会更快,因为您没有为此使用结果集。

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    相关资源
    最近更新 更多