【发布时间】: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是文本,而不是数字。