javascript - 使用AJAX形式更新数据库

标签 javascript php jquery mysql ajax

我有一个文件 form.php,其中有一个小表单,用于按名字和姓氏在数据库中搜索人员。该表单使用 JavaScript 函数通过 AJAX 将变量发送到 search_name.php,并将从 mydatabase 查询的信息作为表单中的值发送。

我希望能够使用搜索结果更新 #result 元素中表单上的信息。

我尝试做一个没有通过 AJAX 返回表单的小示例,它有效,但由于某种原因我无法在我的更大项目中执行此操作。

任何人都可以帮忙吗?我已经查找了示例和信息,但我对 AJAX 和 PHP 很陌生,无法弄清楚为什么会发生这种情况。

form.php

<script language="JavaScript" type="text/javascript">
    function ajax_post(){
        var fn = document.getElementById("first_name").value;
        var ln = document.getElementById("last_name").value;
        var errorMsg ="";
        if (fn==null || fn=="" ){
            errorMsg +="Enter First Name \n";
            document.getElementById("first_name").focus();
        }       
        if (ln==null || ln=="" ){
            errorMsg +="Enter Last Name \n";
            document.getElementById("last_name").focus();
        }       
        if(errorMsg != ""){
            alert(errorMsg);
            document.getElementById("first_name").focus();
            return false;       
        }else{ 
            // Create our XMLHttpRequest object
            var hr = new XMLHttpRequest();
            // Create some variables we need to send to our PHP file
            var url = "search_name.php";        
            var vars = "firstname="+fn+"&lastname="+ln;
            hr.open("POST", url, true);
            // Set content type header information for sending url encoded variables in the request
            hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            // Access the onreadystatechange event for the XMLHttpRequest object
            hr.onreadystatechange = function() {
                if(hr.readyState == 4 && hr.status == 200) {
                    var return_data = hr.responseText;
                    document.getElementById("result").innerHTML = return_data;
                }
            }
            // Send the data to PHP now... and wait for response to update the status div
            hr.send(vars); // Actually execute the request
            document.getElementById("result").innerHTML = "processing...";        
        }
    }
</script>
</head>
<body>
    <div class="left" id="search">
        First Name: <input id="first_name" name="first_name" type="text" /> 
        <br /><br />
        Last Name: <input id="last_name" name="last_name" type="text" />
        <br /><br />
        <input name="myBtn" type="submit" value="Search" onClick="javascript:ajax_post();return">
        <br /><br />
    </div>
    <div id="result"></div>

search_name.php

<?php $form_profile = '<form method="POST" action=""><table width="450px"><tr><td><label for="firstname" >First Name: </label></td><td><input  type="text" id="first_name" name="first_name" maxlength="50" size="30" value="'.$first_name.'"/></td></tr><tr><td><label for="lastname" >Last Name: </label></td><td><input  type="text" id="last_name" name="last_name" maxlength="50" size="30" value="'.$last_name.'"/></td></tr><tr><td><label for="headline">Headline</label></td><td><input  type="text" id= "headline" name="headline" maxlength="50" size="30" value="'.$profile_headline.'"/></td></tr></table><input type="submit" id="submit" name="submit" value="Save and Update"></form>'; ?>

<?php
//check if form has been submitted
if(isset($_POST['submit'])){

    $first_name= $_POST['first_name'];
    $last_name= $_POST['last_name'];
    $headline= $_POST['headline'];
    $summary= $_POST['summary'];


    $title_array= $_POST['title'];
    $company_array= $_POST['company'];
    $start_month_array= $_POST['start_month'];
    $start_year_array= $_POST['start_year'];
    $end_month_array= $_POST['end_month'];
    $end_year_array= $_POST['end_year'];

    if($first_name && $last_name){
        //connect to server
        $link = mysql_connect("localhost", "root", "########");

        if($link){
            mysql_select_db("mydatabase",$link);
        }


        //check if person exists
        $exists = mysql_query("SELECT * FROM profile WHERE firstname = '$first_name' AND lastname = '$last_name'") or die ("The query could not be complete.");
            if(mysql_num_rows($exists) != 0){
                //update
                mysql_query("UPDATE profile SET  headline='$headline' WHERE firstname = '$first_name' AND lastname = '$last_name'") or die("Update could not be applied");
                echo "Success!!";

}else echo "That alumni is not in the database";
}else echo "You must provide a first and last name.";


}

?>

最佳答案

正如 Timmy 提到的,没有发布任何提交值(只有通过表单触发发布时才会自动发生)。另外,当您发送“firstname”时,您会尝试获取 $_POST['first_name'](last_name 与 lastname 也是如此)。

当您使用 JavaScript/AJAX 时,使用某种开发人员工具非常重要。我个人使用 Chrome 开发者工具(在 Chrome 中按 F12 https://developers.google.com/chrome-developer-tools/ )。这将向您显示请求/响应的实际情况,以便您可以找出问题所在。根据您的前端所做的工作,我快速重写了您要发布到的 PHP 脚本:

<?php
//check if form has been submitted
if(isset($_POST['firstname']) || isset($_POST['lastname'])){

    $first_name= $_POST['firstname'];
    $last_name= $_POST['lastname'];

    /*
    $headline= $_POST['headline'];
    $summary= $_POST['summary'];
    $title_array= $_POST['title'];
    $company_array= $_POST['company'];
    $start_month_array= $_POST['start_month'];
    $start_year_array= $_POST['start_year'];
    $end_month_array= $_POST['end_month'];
    $end_year_array= $_POST['end_year'];
     */


    //connect to server
    $link = mysql_connect("localhost", "root", "########");

    if($link){
        mysql_select_db("mydatabase",$link);
    }


    //check if person exists
    $exists = mysql_query("SELECT * FROM profile WHERE firstname  LIKE $first_name.'%' AND lastname  LIKE $last_name.'%'") or die ("The query could not be completed.");
    if(mysql_num_rows($exists) != 0){
        //update
        //mysql_query("UPDATE profile SET  headline='$headline' WHERE firstname = '$first_name' AND lastname = '$last_name'") or die("Update could not be applied");

        echo "Success!!";

    } else {
        echo "That alumni is not in the database";
    }
} else {
    echo "You must provide a first and last name.";
}

?>

我修复了错误的变量名称,并注释掉了目前未发送的变量名称。我还更新了您的 MySQL 查询以使用 LIKE 字符串比较函数,这对于搜索来说要好得多。这样,如果有人不知道姓氏或只知道姓氏的一部分,他们仍然可以完成查找。有关字符串比较函数的更多信息,请参见:http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html 。复制并粘贴代码现在应该可以解决您的问题。

关于javascript - 使用AJAX形式更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21296563/

相关文章:

javascript - 仅注释行的奇怪语法错误

javascript - Twitter Typeahead.js - 在选择时删除数据

javascript - 如何对动态添加的元素执行动态操作?

php - mysql_fetch_array() 期望参数 1 为资源,给定字符串

php - Phalcon 框架 webtools 在创建模型、 View 和 Controller 时不起作用

javascript - 无法在 jqGrid 中加载 XML 数据

javascript - 如何从另一个函数返回一个函数然后调用它?

php - mod_rewrite 显示重写的 URL

javascript - 仅在系统修改时禁用输入

jquery - 如何给jqgrid添加多列排序?