我的INSERT PDO语句出现问题:
在同一个PHP页面中,我有第一个INSERT:
//Creation d'un entrainement
if (isset($_POST) && isset($_POST['intitule_ent']) && isset($_POST['start_ent'])) {
if(get_magic_quotes_gpc()){
$_POST['intitule_ent'] = stripslashes(trim($_POST['intitule_ent']));
}
$intitule = $_POST['intitule_ent'];
if($i = $bdd->prepare("INSERT INTO entrainements (intitule_entrainement,id_membre) VALUES (:intitule_entrainement,:id_membre)")){
$i->bindParam(':intitule_entrainement', $intitule);
$i->bindParam(':id_membre', $user_id);
$i->execute();
echo '<span class="label label-success">Entrainement créé avec succès!</span>';
$entrainement_commence = true;
}
else {
echo '<span class="label label-danger">Erreur lors de la création de l\'entraînement.</span>';
}
}
此INSERT效果很好!
但问题是这个INSERT不起作用:
//Verifications d'usage du formulaire et securite
if (isset($_POST['exm']) && isset($_POST['series']) && isset($_POST['repetitions']) && isset($_POST['valider'])) {
//On securise les chaines de caracteres pour eviter les injections
if(get_magic_quotes_gpc()){
$_POST['repetitions'] = stripslashes(trim($_POST['repetitions']));
$_POST['poids'] = stripslashes(trim($_POST['poids']));
$_POST['temps'] = stripslashes(trim($_POST['temps']));
$_POST['force'] = stripslashes(trim($_POST['force']));
$_POST['vitesse'] = stripslashes(trim($_POST['vitesse']));
}
$id_exom = $_POST['exm'];
$s = $_POST['series'];
$r = $_POST['repetitions'];
$p = $_POST['poids'];
$t = $_POST['temps'];
$f = $_POST['force'];
$v = $_POST['vitesse'];
if($i = $bdd->prepare("
INSERT INTO exercices (id_entrainement,id_exercice_muscle,membre,series,reps,poids,temps,force_exo,vitesse)
VALUES (:id_entrainement,:id_exercice_muscle,:membre,:series,:reps,:poids,:temps,:force_exo,:vitesse)")
){
$i->bindParam(':id_entrainement', $id_ent_en_cours);
$i->bindParam(':id_exercice_muscle', $id_exom);
$i->bindParam(':membre', $user_id);
$i->bindParam(':series', $s);
$i->bindParam(':reps', $r);
$i->bindParam(':poids', $p);
$i->bindParam(':temps', $t);
$i->bindParam(':force_exo', $f);
$i->bindParam(':vitesse', $v);
$i->execute();
$envoi_succes = '<span class="label label-success">Enregistrement réalisé avec succès !</span>';
}
else {
$envoi_erreur = '<span class="label label-warning">Erreur lors de l\'enregistrement de l\'exercice.</span>';
}
根据我的表架构,我真的不知道为什么它不起作用:
这是我的DB:
我在这里给你的表格,但我觉得它不是很有用......:
<form name="envoi_exo" action="send.php" method="post">
<input type="text" name="exm" disabled value="">
<input type="text" name="series" disabled value="">
<input type="text" name="repetitions" disabled value="">
<input type="text" name="poids" disabled value="">
<input type="text" name="temps" disabled value="">
<input type="text" name="force" disabled value="">
<input type="text" name="vitesse" disabled value="">
<button type="submit" name="valider" class="btn btn-success">Enregistrer l\'exercice</button>
</form>
最后,我在StackOverflow上找到了关于PDO中INSERT问题的一些主题,我试图找到一个带有try catch(不推荐)的解决方案并打开我的MYSQL日志文件..这是最新的日志:
2015-03-13 21:36:01 6916 [Warning] InnoDB: Cannot open table phpmyadmin/pma_usergroups from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2015-03-13 21:52:57 6916 [Warning] InnoDB: Cannot open table phpmyadmin/pma_usergroups from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
2015-03-13 21:52:57 6916 [Warning] InnoDB: Cannot open table phpmyadmin/pma_usergroups from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
我真的需要帮助来纠正这个问题,因为我一次又一次地搜索解决方案,我发现没有什么真正有用的......
当我点击发送表单的按钮时,会出现注释,页面只会重新加载(我认为它是动作属性),而且我看不到数据库中的插入内容。
答案 0 :(得分:1)
您禁用了Web表单中的大多数输入字段,当您单击“提交”按钮时,脚本将尝试在数据库中插入空值。
但是,您的某些字段设置为NOT NULL
(例如id_entrainement
),您的插入语句将无法执行。
开头的isset()检查也应该失败:
if (isset($_POST['exm']) && isset($_POST['series']) && isset($_POST['repetitions']) && isset($_POST['valider'])) {