【问题标题】:Javascript is posting variables but all my data is not input into databaseJavascript 正在发布变量,但我的所有数据都没有输入数据库
【发布时间】:2013-08-03 19:58:06
【问题描述】:

我有一个 MySQL 数据库,我正在使用 AJAX 通过表单向其中添加记录。控制台告诉我,我的所有数据都已发布到 php 页面,并且我没有收到任何错误。但是,并非所有数据都显示在数据库中。

PHP:

    //set values sent from javascript
        $evaluator = $_SESSION['id'];
        $feedback = $_POST['feedback'];
        $student_work = $_POST['student_work'];
        $student = $_POST['student'];
        $assessment = $_POST['assessment'];
        $classwork = $_POST['classwork'];
        $best = $_POST['best'];
        $subject = $_POST['subject'];
        $binder = $_POST['binder'];
        $teacherid = $_POST['teacher'];
        $formid = $_POST['form'];
        $draft_flag = $_POST['s'];
        //set draft time to use for saving/updating drafts
        $draft_time = date("Y-m-d H:i:s");
        //flag that decided what we're saving, ie draft, submit, update.
        $flag =   $_POST['draft'];
        //Querys the database to get the form name
        $fquery = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT form_name FROM forms WHERE id_form='$formid' LIMIT 1");
        $row = mysqli_fetch_assoc($fquery);
        $form_name  = $row['form_name'];
        //query's the database to get the teacher's school for this evaluation
        $tquery = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT id_school FROM teachers WHERE teacher_id='$teacherid' LIMIT 1");
        $trow = mysqli_fetch_assoc($tquery);
        $id_school = $trow['id_school'];

        include_once 'functions/functions.php';

if ($draft_flag == "submit"){

//inserts collected data and sets status as submitted in the evaluations table
$query = "INSERT INTO evaluations SET 
        id_user = '$evaluator',
        time_submitted = LOCALTIME(),
        date_submitted = NOW(),
        feedback = '$feedback', 
        student_work_org = '$student_work',
        best_works_port = '$best',
        binder = '$binder',
        assesment_folders = '$assessment',
        classwork_organization = '$classwork',
        student_desks = '$student',
        subject_specific_rubric = '$subject',
        id_teacher = '$teacherid',
        id_school = '$id_school',
        id_form = '$formid',
        status = 'Submitted'";

mysqli_query($GLOBALS["___mysqli_ston"], $query); 
?>

在所有变量中,这些都没有发布:

$feedback = $_POST['feedback'];
$student_work = $_POST['student_work'];
$student = $_POST['student'];
$assessment = $_POST['assessment'];
$classwork = $_POST['classwork'];
$best = $_POST['best']; 
$subject = $_POST['subject'];
$binder = $_POST['binder'];

12 人中有 8 人未发帖。

编辑:这是 js 发送的内容:

ajax.send(
            "classwork=" + classwork
            + "&student_work=" + student_work
            + "&feedback=" + feedback
            + "&assessment=" + assessment
            + "&best=" + best
            + "&student=" + student
            + "&subject=" + subject
            + "&binder=" + binder
            + "&teacher=" + teacher
            + "&form=" + form
            + "&draft=" + draft
            + "&s=" + s
            );

我还有其他几种类似这样的表格都可以正常工作。提前感谢您的帮助!

编辑:

请不要告诉我我的语法不正确,除非你要告诉我我漏掉了一个逗号什么的。 (我检查过,所以我怀疑这是问题所在:))我知道这可能不是你插入的方式,但根据http://dev.mysql.com/doc/refman/5.7/en/insert.html 是正确的

刚刚试了一下,结果是一样的。

$query = "INSERT INTO evaluations (
        id_user, 
        time_submitted, 
        date_submitted, 
        feedback,  
        student_work_org, 
        best_works_port, 
        binder, '$binder',
        assesment_folders, 
        classwork_organization, 
        student_desks, 
        subject_specific_rubric, 
        id_teacher, 
        id_school, 
        id_form, 
        status) 
VALUES (
        '$evaluator',
        LOCALTIME(),
        NOW(),
        '$feedback',
        '$student_work',
        '$best',
        '$assessment',
        '$subject',
        '$classwork',
        '$student',
        '$teacherid',
        '$id_school',
        '$formid',
        'Submitted'
) ";

【问题讨论】:

  • “并非所有数据都显示在数据库中”是什么意思?有时插入行,有时不插入?或者,该行插入了一些具有错误值的列?还是它们的默认值(或 NULL?)而不是预期值?
  • 该行总是被插入,但是应该被发布的 12 个变量中有 8 个是 Null。
  • 我不认为探针与插入代码有关。可能是数据,尽管我希望它会返回错误。发布的值看起来是数字,失败的是文本,是否可能是编码问题,然后您使用的 MySQL 扩展正在抑制错误-(我从不使用 PHP,所以不熟悉您的确切结构)重新使用,它是否可能实际处理 INSERT IGNORE 查询?)或者,它是数据库结构问题吗?
  • 据我所知,问题似乎很有可能不是在 SQL 级别。请您print_r($_POST) 以检查各种帖子参数是否按预期设置...
  • @Sylvain leroux 我会尝试print_r 并回复您,谢谢! @Jamie Hartnoll 说得好,虽然 status 是文本,而不是数字。

标签: php mysql mysql-5.7


【解决方案1】:

您的INSERT syntax 错误。这是正确的形式:

INSERT INTO <table name> (
    <field name foo>
    <field name bar>
    .
    .
    .
)
VALUES (
    <value for foo>,
    <value for bar>,
    .
    .
    .
)

【讨论】:

  • 感谢您的回答,但我使用的语法是 MySQL 扩展语法,它在我正在使用的其他 30 个表单提交中工作正常,并且它提交此表单的一部分就好了也是。
猜你喜欢
  • 2019-05-26
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多