Вставка SQL с проверкой - PullRequest
0 голосов
/ 27 июня 2018

Я медленно изучал PHP ООП, я решил, что пришло время начинать вставку в мою таблицу, но, похоже, она не вставляется. Я сравнил свой код с рабочими версиями и не могу понять, в чем может быть проблема. Я попытался выполнить var_dump (), запрос вернулся так, как я ожидал, я протестировал класс базы данных, создав нового пользователя, он был успешно создан, поэтому я предположим, что это не так, я протестировал SQL-запрос, и его удалось вставить. Я в растерянности, так как теперь он может быть

форма

<?php 
 session_start(); 
require ("classes/Review.php");
require ("classes/Database.php");

    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        $reviewing = new ReviewValidation();
        $review = $reviewTitle = "";
        $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);     

        $reviewTitle = $post['reviewTitle'];
        $review =  $post['review'];     
        $errors = array();

        $fields = array(
        'title' => array(        
            'validate' => 'title',
            'message' => 'Title must be at least fife characters',
            'value' => $reviewTitle,
        ),
        'review' => array(         
            'validate' => 'review',
            'message' => 'Your review must be at least three hundred characters',
            'value' => $review,
        )
        );

        foreach($fields as $key => $value) 
        {
            $validation_result = $reviewing->{$value['validate']}($value['value']);
            if(!$validation_result) 
            {
                $errors[] = ['name' => $key, 'error' => $value['message']];
            }
        }

        if(empty($errors))  
        {  
            try
            {
            $db = new Database;
            $success = ["message" => "Review subbbmitted"];     
            $process = $db->prepare('INSERT INTO reviews (reviewTitle)
            VALUES
            (:reviewTitle');
            $process->bindValue(':reviewTitle', $reviewTitle);
            $process->execute();

            }
            catch(Exception $e)
            {
                $errors[] = ['response' => 'fail'];  
            } 
        }
    }

header('Content-Type: application/json');
if (empty($errors))
{
    echo json_encode($success);
}
else
{
    echo json_encode(["errors" => $errors]);
}   

класс

<?php 

class ReviewValidation
{
    private
    $db,
    $review,
    $reviewTitle;

    private static
    $reviewLength = 50,
    $rewviewtitleLength = 5;

    public static function title($reviewTitle)
    {
        return(strlen($reviewTitle) >= self::$rewviewtitleLength);
    }

    public static function review($review)
    {
            return(strlen($review) >= self::$reviewLength);
    }
}

1 Ответ

0 голосов
/ 27 июня 2018

Похоже, вы можете пропустить закрытие) в запросе вставки:

$process = $db->prepare('INSERT INTO reviews (reviewTitle)
        VALUES
        (:reviewTitle)');

Если вы добавите закрывающую скобку после: reviewTitle, то перед одинарной кавычкой ваш синтаксис будет правильным (показано выше).

Я также заметил, что ваши вызовы статических методов в классе ReviewValidation используют оператор объекта (->). Для доступа к статическим методам вам нужно использовать оператор разрешения области действия .

Таким образом, ваша строка $ validation_result должна выглядеть следующим образом:

$validation_result = ReviewValidation::{$value['validate']}($value['value']);

Я думаю, что из-за этого валидация прошла успешно, поэтому у вас возникла проблема отсутствия значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...