繁体   English   中英

PHP表单> JS OnUpdate> AJAX>应该返回MySQLi数据,但是我不理解代码

[英]PHP form > JS OnUpdate > AJAX > should return MySQLi data, but I don't understand the code

我不相信JS或AJAX代码,但我听不懂。 (谢谢Alon Alexander )我没有AJAX知识, 而宁愿使用没有JQuery的PHP / JS ,但是我不知道如何使它工作。

我有一个使用OnUpdate触发JS代码的表单,然后使用AJAX执行JSi查询,该查询应返回搜索数据。

问题是即使我使用数据我也应该返回true(文件已经存在),但是返回总是一样的,但是始终在“通知”段落中返回“ New Entry”

此外,如果找到记录,我将使用JS用记录数据更新表单字段。 但这是下一步的工作。 首先需要这个工作。

即“记录已存在”,并使用该记录信息或“新条目”填充表格,并且表格保持空白。

index.php //简化为所需的信息

<?php include("process.php"); ?>

<!doctype html>
<html>

<head>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/phone.js"></script>
    <script type="text/javascript" src="js/entrynum.js"></script>
</head>

<body>

    <?php 
    if (isset($_POST['reg-submit'])) {
        echo "<p id='notice' style='padding: .5em; border: 2px solid red;'>Entry $entrynum Saved!<br>$timenow on $datenow</p>";
    } else {
        echo "<p id='notice' style='display: none; padding: .5em; border: 2px solid red;'></p>";
    }
    ?>

    <main>
        <div class="Container">
            <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
                <fieldset>
                    <legend><h1>Registration</h1></legend>
                    <label for="entrynum">Entry Number</label>
                    <input type="number" pattern="\d*" name="entrynum" id="entrynum" value="" required="true" placeholder="" autofocus onchange="entry_check()" />

                    <label for="fname">First Name</label>
                    <input type="text" name="fname" id="fname" value="" required="true" placeholder="" list="" style="text-transform:capitalize" onkeyup="javascript:this.value=this.value.charAt(0).toUpperCase() + this.value.substr(1);" />

                    <label for="lname">Last Name</label>
                    <input type="text" name="lname" id="lname" value="" required="true" placeholder="" list="" style="text-transform:capitalize" onkeyup="javascript:this.value=this.value.charAt(0).toUpperCase() + this.value.substr(1);" />

                    <input type="submit" name="reg-submit" id="reg-submit" value="Submit" />
                </fieldset> <!-- Registration Form-->
            </form>
        </div>
    </main>
</body>
</html>

entrynum.js

function entry_check() {

var entrynum = $("#entrynum").val();

// Send the AJAX call
$.post(
    'entrysearch.php', // TO search.php page
    {entrynum: entrynum}, // the DATA sent with the request
    function(data) { // a CALLBACK function
        if (data == 'none') { // no rows were found or an error occurred
            document.getElementById("notice").innerHTML = "New Entry!";
            document.getElementById("notice").style.display = "block";
            return;
        } else {
            document.getElementById("notice").innerHTML = "Already Exists!";
            document.getElementById("notice").style.display = "block";
        }
    }
);

}

entrysearch.php

<?php
include("includes/connect.php");

if (!isset($_POST['entrynum'])) {
    echo 'none';
    die();
}
$sql = $db->prepare("SELECT * FROM HeatWaveData WHERE entrynum=%d", $_POST['entrynum']);
$results = $db->query($sql);
$result = $results[0];
if (!$result) {
    echo 'none';
    die();
}
echo json_encode($result);
?>

我建议您使用$ .ajax函数而不是post。

您可以尝试通过添加id="myform"id="myform"添加到表单,然后按如下所示更改entrynum.js:

    // Change onSubmit behaviour for the form
    $("#myform").on("submit", function(e) {
        // Prevent page reload
        e.preventDefault();
        $.ajax({
            // Get form action or uses current page.
            url : $(this).attr('action') || window.location.pathname,
            type: "POST",
            // Get all input to submit and serialize on array (this will become $_POST)
            data: $(this).serialize(),
            success: function (data) {
                //Here you have server response
            },
            error: function (jXHR, textStatus, errorThrown) {
                // If error thrown jXHR contains XMLHttpRequest stuff like status
                console.log(jXHR);
                // You will see on an alert the real error thrown
                alert(errorThrown);
            }
        });
    });

最后! 看来SQL需要一个var($ entry)而不是使用$ _POST ['entrynum'] ...不知道为什么。

然后,如果未找到任何记录,则ajax将不返回任何内容(甚至不返回NULL)。 因此,我不得不添加一些if语句,如果找不到记录,则返回“ 0”。

此外,它有助于添加数据类型“ json”,因此可以解析对象。

Javascript:

function entry_check() {
    var entrynum = $("#entrynum").val();
    $.post(
        'entrysearch.php',
        {entrynum: entrynum},
        function(data) {
            if (!data) {
                document.getElementById("notice").innerHTML = "New Entry!";
                document.getElementById("notice").style.display = "block";

            } else {
                document.getElementById("notice").innerHTML = "Already Exists!";
                document.getElementById("notice").style.display = "block";
            }
        }, "json"
    );
}

entrysearch.php

<?php
if (isset($_POST['entrynum'])) {
    $entry = $_POST['entrynum'];
    include("connect.php");
    $sql = ("SELECT * FROM HeatWaveData WHERE entrynum = $entry");
    if ($results=mysqli_query($db,$sql)) {
        if ($rowcount=mysqli_num_rows($results)) {
            $result = $results->fetch_object();
            echo json_encode($result);
        } else {
            echo $rowcount;
        }
    }
}
?>

有用! 整夜花了我的时间阅读示例和文档。

暂无
暂无

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

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