即使没有错误,也会收到未定义的索引php错误

时间:2015-03-02 13:57:17

标签: php jquery mysql ajax

我终于设法使用ajax将数据发布到php文件但是我一直遇到以下错误:

"注意:未定义的索引:第26行的/Applications/XAMPP/xamppfiles/htdocs/insights/ManageCourses_UpdateSubmit.php中的course_title

注意:未定义的索引:第27行的/Applications/XAMPP/xamppfiles/htdocs/insights/ManageCourses_UpdateSubmit.php中的course_code 空值 空值 记录已更新"

我觉得很奇怪,因为当我检查mysql表时它会更新记录,当我刷新页面时会显示更新的值。

单击按钮时触发的ajax脚本是:

    <script>
function myCall() {
    var request = $.ajax({
        url: "ManageCourses_UpdateSubmit.php",
        type: "GET",            
        dataType: "html"
    });

    var data = $('#updateForm').serialize();
    $.post('ManageCourses_UpdateSubmit.php', data);

    request.done(function(msg) {
        $("#updateForm").html(msg);         
    });

    request.fail(function(jqXHR, textStatus) {
        alert( "Request failed: " + textStatus );
    });
}
</script>

我注意到当我从AJAX代码中删除它时,我没有收到错误消息,但是一旦值更新,我需要刷新页面。

  request.done(function(msg) {
        $("#updateForm").html(msg);         
    });

    request.fail(function(jqXHR, textStatus) {
        alert( "Request failed: " + textStatus );
    });

抱歉忘了提交主文件

ManageCourses_UpdateSubmit.php文件是:

    <?php

 include "db_conx.php";

try
{
    $db_conx = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname",    $mysql_username, $mysql_password);

    $db_conx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = $db_conx->prepare("UPDATE course_details SET course_title = :course_title 
    WHERE course_code = :course_code");

$course_title = $_POST['course_title'];
$course_code = $_POST['course_code'];
echo var_dump($course_title)."<br>";
echo var_dump($course_code)."<br>";

$sql->bindParam(':course_title', $course_title, PDO::PARAM_STR);
$sql->bindParam(':course_code', $course_code, PDO::PARAM_STR);


/*** execute the prepared statement ***/
$sql->execute();

/*** success message ***/
$message ='record updated';
} 
catch(Exception $e)
{
    $message = 'Message: ' .$e->getMessage();
}


 ?>
<html>
<head>
<title>Update Course</title>
</head>
<body>
 <p><?php echo $message; ?>
 </body>
 </html>

任何想法?

1 个答案:

答案 0 :(得分:1)

您正在提出2个请求。第一个是GET请求,因此没有设置POST变量。不需要此请求,post请求也会返回响应,因此您可以使用:

function myCall() {

    var data = $('#updateForm').serialize();
    $.post('ManageCourses_UpdateSubmit.php', data, function(response){
        //display message
        $("#updateForm").html(response);
        //'soft'reload parent page, after a delay to show message
        setTimeout(function(){
            window.location = window.location;
        },1000);


    }).fail(function(jqXHR, textStatus) {
        alert( "Request failed: " + textStatus );
    });
}

另请注意,您不希望响应包含<head><body>标记,因为它已添加到现有页面中,因此ManageCourses_UpdateSubmit.php应如下所示:

catch(Exception $e)
{
    $message = 'Message: ' .$e->getMessage();
}

die($message);
//nothing else after this