Неверная отправка данных формы

#php #mysql

#php #mysql

Вопрос:

Итак, я создал простую форму, которая должна отправлять введенные данные в таблицу. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда количество символов в поле «содержимое» превышает определенное число, я нажимаю «Отправить», и все поля пусты, и ни одна из данных не отправляется в таблицу. После отправки я должен получить сообщение «сообщение успешно опубликовано», но этого не происходит по вышеуказанной причине, и я понятия не имею, почему.

Затем я должен перейти на localhost и отредактировать поле там. Вот мой код:

 <?php
include("includes/connect.php");

if(isset($_POST['submit'])) {

    $post_title = $_POST['title'];
    $post_date = date('Y-m-d');
    $post_author = $_POST['author'];
    $post_keywords = $_POST['keywords'];
    $post_content = $_POST['content'];
    $post_image = $_FILES['image']['name'];
    $image_tmp = $_FILES['image']['tmp_name'];


    if($post_title == '' or $post_keywords == '' or $post_content == ''
    or $post_author == '') {

        echo "<script>alert('Please fill the empty fields!')</script>";

        exit();
    }
    else {

        move_uploaded_file($image_tmp, "../images/$post_image");

        $insert_query = "INSERT INTO `posts` 
        (post_title, post_date, post_author, post_image, 
        post_keywords, post_content) 
        values ('$post_title', '$post_date', '$post_author', '$post_image', 
        '$post_keywords', '$post_content')";

        if(mysqli_query($connect, $insert_query)) {

            echo "<center><h1>Post Published Successfully!</h1></center>";
        }
    }

}
?>

<body>

    <form method = "post" action = "insert_post.php" enctype = "multipart/form-data">

        <table width = "600" align = "center">
            <tr>
                <td align="center" colspan = "6"><h1 style = "font-family: 'Fjalla One'; color: #575757;">Insert new post here</h1></td>
            </tr>

            <tr><!--TITLE-->
                <td align = "right" size = "30px" style = "font-family: 'Fjalla One'; color: #575757; font-size: 20px;">Post Title:</td>
                <td><input type = "text" name = "title"></td>
            </tr>

            <tr><!--AUTHOR-->
                <td align = "right" size = "30px" style = "font-family: 'Fjalla One'; color: #575757; font-size: 20px;">Post Author:</td>
                <td><input type = "text" name = "author"></td>
            </tr>

            <tr><!--KEYWORDS-->
                <td align = "right" size = "30px" style = "font-family: 'Fjalla One'; color: #575757; font-size: 20px;">Post Keywords:</td>
                <td><input type = "text" name = "keywords"></td>
            </tr>

            <tr><!--IMAGE-->
                <td align = "right" style = "font-family: 'Fjalla One'; color: #575757; font-size: 20px;">Post Image:</td>
                <td><input type = "file" name = "image"></td>
            </tr>

            <tr><!--CONTENT-->
                <td align = "right" style = "font-family: 'Fjalla One'; color: #575757; font-size: 20px;">Post Content</td>
                <td><textarea name = "content" cols = "40" rows = "20"></textarea></td>
            </tr>

            <tr>
                <td align = "center" colspan = "6"><input type = "submit" name = "submit" value = "Publish" ></td>
            </tr>

    </form>
  

Комментарии:

1. Каков ваш лимит POST для сервера localhost?

2. примечание: вы должны использовать параметризованные запросы. в своем текущем состоянии ваш код подвержен SQL-инъекциям. просто представьте, что кто-то публикует что-то вроде '; DROP TABLE posts; --

3. какой тип столбца для post_image столбца? и что вы хотите здесь сделать, использовать «имя» файла или само изображение?

4. Я достаточно долго размышлял над этим вопросом и обычно больше этим не занимаюсь. Если приведенный ниже ответ решил вопрос, подумайте о том, чтобы принять его, чтобы пометить как решенный.

5. @Fred-ii- используйте имя файла

Ответ №1:

Попробуйте включить некоторую обработку ошибок MySQL, чтобы получить лучшее представление о проблеме — что-то вроде этого:

 <?php
include("includes/connect.php");

if(isset($_POST['submit'])) {

    $post_title = $_POST['title'];
    $post_date = date('Y-m-d');
    $post_author = $_POST['author'];
    $post_keywords = $_POST['keywords'];
    $post_content = $_POST['content'];
    $post_image = $_FILES['image']['name'];
    $image_tmp = $_FILES['image']['tmp_name'];


    if($post_title == '' or $post_keywords == '' or $post_content == ''
    or $post_author == '') {

        echo "<script>alert('Please fill the empty fields!')</script>";

        exit();
    }
    else {

        move_uploaded_file($image_tmp, "../images/$post_image");

        $insert_query = "INSERT INTO `posts` 
        (post_title, post_date, post_author, post_image, 
        post_keywords, post_content) 
        values ('$post_title', '$post_date', '$post_author', '$post_image', 
        '$post_keywords', '$post_content')";

        if(mysqli_query($connect, $insert_query)) {

            echo "<center><h1>Post Published Successfully!</h1></center>";
        } else echo  "MySQL Error description: " . mysqli_error($connect);
    }

}
?>
  

Не используйте это в производственной среде, поскольку вы не должны отображать сообщения о технических ошибках конечным пользователям — тем более, что вы не экранируете свой необработанный ввод, что делает вас очень склонным к SQL-инъекции.


Редактировать:

Op вставил сообщение об ошибке, показывающее, что это был ' символ в отправленной строке, вызывающий ошибку MySQL — решение состоит в том, чтобы передавать каждую отправленную переменную через mysqli_real_escape_string($connect, $variable); .

Комментарии:

1. Спасибо. Я попробую это сейчас

2. Описание ошибки MySQL: У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования, скоро мы вернемся с еще большим количеством новостей, чтобы взволновать поклонников. В недавнем сообщении в их социальной сети «Я» в строке 5

3. Вам нужно экранировать свой MySQL, поскольку у вас есть символ ‘, который изменяет вызов SQL — таким образом, что вы случайно вводите себя

4. @JBithell Я не думаю, что это единственная проблема здесь. post_image Столбец, в который они пытаются вставить свой файл, неизвестен относительно того, что они хотят здесь сделать. Используйте имя файла или вставьте само изображение / большой двоичный объект.

5. @JBithell у вас есть какие-нибудь идеи, как именно я это сделаю? Я все еще новичок в php