【问题标题】:undefined index - form not sending value through to php code via javascript未定义的索引 - 表单不通过 javascript 将值发送到 php 代码
【发布时间】:2015-05-04 01:47:28
【问题描述】:

尝试在数据库中添加新记录时收到以下错误消息:

注意:未定义索引:第 13 行 /Applications/XAMPP/xamppfiles/htdocs/insights/ManageCourses_AddSubmit.php 中的 course_title 空值 消息:SQLSTATE[23000]:完整性约束违规:1048 列 'course_title' 不能为空

我有类似的查询更新和删除表中的记录,它们工作正常,所以我不确定为什么会出现问题。

它说 course_title 为 NULL 但是在 javascript 中我序列化了表单信息,所以我不确定它为什么不发送它。

course_details 表有一个自动增量字段,该字段会在添加记录时自动更新。

请问有人能说明一下可能是什么问题吗?

处理点击提交时发生的事情的javascript:

function addCall() {
  var data = $('#addForm').serialize();
  $.post('ManageCourses_AddSubmit.php', data, function(response){

    $("#addForm").html(response);
  }).fail(function(jqXHR, textStatus) {
    alert( "Request failed: " + textStatus );
  });
}

提交表单的模态:

<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="addModalLabel" aria-hidden="true">
                            <div class="modal-dialog">
                                <div class="modal-content">
                                    <div class="modal-header">
                                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                                        <h4 class="modal-title">Add New Record: </h4>
                                    </div>
                                    <div class="modal-body">
                                        <form id="addForm" class="addForm">
                                            <div class="form-group">
                                                <label for="course_code" class="pull-left" class="control-label">Course Code:</label>
                                                <input type="text" class="form-control" id="ourse_code_id" name="code[]" readonly value ="NULL">
                                            </div>
                                            <div class="form-group">
                                                <label for="course_name" class="pull-left" class="control-label">Course Title:</label>
                                                <input type="text" class="form-control" placeholder="Enter Course Title" id="course_name_id" name="title[]">
                                            </div>
                                        </form>
                                    </div>
                                    <div class="modal-footer">
                                        <div class="btn-toolbar">
                                            <button type="button" class="btn btn-primary" id="add_row" name="add_row">Add New Record <span class="glyphicon glyphicon-plus"></button>
                                            <button type="button" class="btn btn-default" class="pull-right" data-dismiss="modal">Close</button>
                                            <button type="button" class="btn btn-success" class="pull-right" onclick="addCall();">Submit <span class="glyphicon glyphicon-saved"></button>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>

最后是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("INSERT INTO `insights`.`course_details` (`course_code`, `course_title`) VALUES (:course_code, :course_title)");

        $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 = "<p class='text-success'> Record Successfully Added <span class='glyphicon glyphicon-ok'/></p>";
    } 
    catch(Exception $e)
    {
        $message = 'Message: ' .$e->getMessage();
    }


die($message);
?>

我注意到当我使用反引号 (:course_title) 时,它会很好地添加记录,但添加的值是:course_title

非常感谢

【问题讨论】:

  • 正如它所说的“列'course_title'不能为空”,所以要么允许course_title也是NULL,或者更新您的代码以不将标题设置为NULL...
  • 我将 course_code 设置为空,因为那是一个自动递增的数字。如果我将 course_title 设置为 null,那么当用户尝试提交无效信息时就会出现问题:/您指的是哪个代码?

标签: javascript php mysql pdo


【解决方案1】:

我认为这是一个命名错误。

在您的表单中,您有以下输入字段:

<label for="course_name" class="pull-left" class="control-label">Course Title:</label>
<input type="text" class="form-control" placeholder="Enter Course Title" id="course_name_id" name="title[]">

你称之为course_name_id。 然后在您的 PHP 脚本中,您尝试获取这些变量:

$course_title = $_POST['course_title'];
$course_code = $_POST['course_code'];

你称之为course_title

我建议您尝试清理所有使用的名称。如果表字段名为course_title,则将此名称用于表单和 PHP 控制器。

或者,一种更优雅的方法,尝试将所有名称外包到一些 XML 配置文件中,这样您的控制器总是基于配置文件执行相同的工作:-)

【讨论】:

  • 感谢您指出这一点。我在尝试做其他事情时一定错过了它!
  • 很高兴为您提供帮助。祝你好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
相关资源
最近更新 更多