PHP表单拒绝提交,错误原因未知

时间:2017-07-16 05:51:27

标签: php mysql mysqli

TLDR;我重新调整了PHP注册/登录脚本以满足我的需求。现在,我有错误。我最初的目的是创建一个家庭作业日志,是的,但回想起来,这对我来说也是一种学习经验,改进了我的PHP,因为我对它的了解相当差。我知道这篇文章可能看起来含糊不清,但我自己找不到解决方案,所以我来这里寻求帮助。

  

错误是表单根本不会提交,它会显示错误   在编码中配置的消息给我。我尝试删除此错误,   并以其他方式搞乱它,但没有任何效果。在我看来,是什么   尊重某事,因为编码器应该设置错误,不是吗?

所以,我正在尝试创建一个可以通过表单更新的作业日志。我对PHP不是很熟悉,但我对编码的知识至少足以承担这个项目。由于我缺乏PHP编码技能,我找到了一个PHP注册/登录表单,然后我根据自己的需要重新定位。我觉得好像我已经完成了所有事情,似乎无法找到错误,所以我来到这里。我已多次阅读代码,并尝试了许多解决方案,但无济于事。

这是最初的PHP代码:

<?php
include_once 'dbconnect.php';
$error = false;

if ( isset($_POST['btn-signup']) ) {

    // clean user inputs to prevent sql injections
    $course_name = trim($_POST['course_name']);
    $course_name = strip_tags($course_name);
    $course_name = htmlspecialchars($course_name);

    $period = trim($_POST['period']);
    $period = strip_tags($period);
    $period = htmlspecialchars($period);

    $teacher = trim($_POST['teacher']);
    $teacher = strip_tags($teacher);
    $teacher = htmlspecialchars($teacher);

    $date_assigned = trim($_POST['date_assigned']);
    $date_assigned = strip_tags($date_assigned);
    $date_assigned = htmlspecialchars($date_assigned);

    $date_due = trim($_POST['date_due']);
    $date_due = strip_tags($date_due);
    $date_due = htmlspecialchars($date_due);

    $description = trim($_POST['description']);
    $description = strip_tags($description);
    $description = htmlspecialchars($description);
    // if there's no error, continue to signup
    if( !$error ) {

        $query = "INSERT INTO homework_assignments(course_name, 
                                                   period, 
                                                   teacher, 
                                                   date_assigned, 
                                                   date_due, 
                                                   description) 

                                                   VALUES(
                                                   '$course_name', 
                                                   '$period', 
                                                   '$teacher', 
                                                   '$date_assigned', 
                                                   '$date_due', 
                                                   '$description', )";
        $res = mysqli_query($dbcon, $query);

        if ($res) {
            $errTyp = "success";
            $errMSG = "Successfully registered, you may login now";
            unset($course_name);
            unset($period);
            unset($teacher);
            unset($date_assigned);
            unset($date_due);
            unset($description);
        } else {
            $errTyp = "danger";
            $errMSG = "Something went wrong, try again later...";   
        }   

    }


}
?>

在这个问题出现之前,我之前有一个与MySQL_Query停止相关的错误,我显然能够找到解决方案,但我不相信这是正确的,因为它只会造成新的错误。< / p>

这是代码行:

    $res = mysqli_query($conn, $query);

dbconnect.php也有类似的错误,但我也“修复”了这些错误,但仍然想知道我是否犯了错误。

这是dbconnect.php文件:

     <?php

    // this will avoid mysql_connect() deprecation error.
    error_reporting( ~E_DEPRECATED & ~E_NOTICE );
    // but I strongly suggest you to use PDO or MySQLi.

    define('DBHOST', 'localhost');
    define('DBUSER', 'root');
    define('DBPASS', '');
    define('DBNAME', 'school');

    $conn = mysqli_connect(DBHOST,DBUSER,DBPASS);
    $dbcon = mysqli_select_db($conn, DBNAME);

    if ( !$conn ) {
        die("Connection failed : " . mysqli_error());
    }

    if ( !$dbcon ) {
        die("Database Connection failed : " . mysqli_error());
    }

顶部的警告消息来自原始开发人员,但是,由于我的知识有限,我实际上并不了解如何将其完全转换为此,或者我已经这样做了。我试图参考手册,但它只是一本手册,而不是一本指南,这就是为什么我来这里寻求体验界的帮助。

编辑1:在修复了一些愚蠢的拼写错误,并将原始代码复习回我的后,我成功地设法停止了错误。该系统现已全面运作。

3 个答案:

答案 0 :(得分:1)

你的sql insert语句中有一个错误(值括号末尾有一个额外的逗号):

'$date_assigned', 
'$date_due', 
 '$description', )";

如果您对数据库连接有任何其他问题,可以回显函数mysqli_connect_error()以了解它是什么。它会打印整个错误消息。

是的,正如对该问题的一条评论所说,在ini_set('display_errors', 1);之后也添加error_reporting,所以你也可以看到常见的php错误消息。另一种方法是使用error_log()函数在php控制台上编写调试消息。

答案 1 :(得分:0)

1)将$dbcon替换为$conn行中的mysqli_query。所以,它一定是:

$res = mysqli_query($conn, $query);

否则您收到错误:

  

警告:mysqli_query()期望参数1为mysqli,boolean   给定

2)在sql语句中,您必须删除最后一个逗号。必须是:

... '$description' )";

答案 2 :(得分:0)

以下答案,以及我最初错过但我自己找到的一些额外代码,帮助我解决了这个问题。

  

你的sql insert语句中有一个错误(一个额外的逗号   值末尾括号):

'$date_assigned', 
'$date_due', 
'$description', )"; 
     

如果您对数据库连接有任何其他问题,可以回复函数mysqli_connect_error()以了解   那是什么。它会打印整个错误消息。

  

添加   ini_set('display_errors', 1);在error_reporting之后

  

1)将$dbcon替换为mysqli_query行中的$conn