Как сохранить отправленные данные формы через несколько перенаправлений? - PullRequest
0 голосов
/ 25 апреля 2019

РЕДАКТИРОВАТЬ - я пытался сохранить данные внутри значений сеанса и передать их в качестве параметров для обработки модели, но это тоже не сработало.

Хорошо, пока ты не понизил это, выслушай меня. У меня есть HTML-форма для получения отзывов пользователей. Пользователь может оставить отзыв после входа в свою учетную запись Google. Я использую Google 0Auth 2.0 API для этого. Поэтому, когда вы нажимаете кнопку отправить в форме, вы перенаправляетесь на страницу аутентификации Google, где вы можете выбрать, какую учетную запись вы хотите использовать.

Однако, если вы нажмете «Добавить другую учетную запись» и введете учетные данные, данные, которые я получил через мои исходные User Review Form, то есть title of review и review content, будут «неустановлены». Я знаю это, потому что последний запрос к базе данных, который вставляет данные, полученные из логина Google, а также Review Form выводит "review_title" value can't be null. Я знаю, это очень запутанно, но поверьте мне, это лучшее, что я могу объяснить.

Controller.php

defined('BASEPATH') OR exit('No direct script access allowed');

class Googlelogin extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();
        require_once APPPATH . 'third_party/src/Google_Client.php';
        require_once APPPATH . 'third_party/src/contrib/Google_Oauth2Service.php';
    }

    public function index()
    {
//      $this->load->view('pages/review');
    }

    public function login()
    {

        $clientId = 'dddd.googleusercontent.com'; //Google client ID
        $clientSecret = 'dddd-ddd'; //Google client secret
        $redirectURL = base_url() . 'googlelogin/login';

        //https://curl.haxx.se/docs/caextract.html

        //Call Google API
        $gClient = new Google_Client();
        $gClient->setApplicationName('Login');
        $gClient->setClientId($clientId);
        $gClient->setClientSecret($clientSecret);
        $gClient->setRedirectUri($redirectURL);
        $google_oauthV2 = new Google_Oauth2Service($gClient);

        if (isset($_GET['code'])) {
            $gClient->authenticate($_GET['code']);
            $_SESSION['token'] = $gClient->getAccessToken();
            header('Location: ' . filter_var($redirectURL, FILTER_SANITIZE_URL));
        }

        if (isset($_SESSION['token'])) {
            $gClient->setAccessToken($_SESSION['token']);
        }

        if ($gClient->getAccessToken()) {
            $userProfile = $google_oauthV2->userinfo->get();
//          print_r($userProfile);
            $name = $userProfile['name'];
            $email = $userProfile['email'];
            $picture = $userProfile['picture'];


            $this->load->library('form_validation');

            $this->form_validation->set_rules('title', 'title');
            $this->form_validation->set_rules('message', 'message');

            $title = $this->input->post('title');
            $message = $this->input->post('message');
            // MY SESSION SOLUTION 
            $this->session->set_userdata($array);

            $session_title = $this->session->userdata('title');
            $session_message = $this->session->userdata('message');

            print_r($this->input->post());
            if ($this->form_validation->run() === FALSE) {
                echo "error in your form ";
                $this->session->set_flashdata('review_error', 'Please fill all the fields!');
                $this->load->view('pages/review');
//              redirect(base_url().'review/');
            } else {
                echo $title, $message;
                $this->session->set_flashdata('review_success', 'Thank you for you ');
                $this->review_model->set_review($name, $email, $picture, $session_title , $session_message);
                redirect(base_url() . 'review/');
            }
//          echo "just dies";
            die;
        } else {
            $url = $gClient->createAuthUrl();
            header("Location: $url");
            exit;
        }
    }
}

Я получаю ошибку в методе login. Внутри FormValidation состояния.

Model.php

class Review_model extends CI_Model
{
    public function set_review($google_name, $google_email, $google_image, $title, $message)
    {
        $data = array('review_title' => $title,
            'review_content' => $message,
            'email' => $google_email,
            'name' => $google_name,
            'image_url' => $google_image);
        return $this->db->insert('reviews', $data);
    }

    public function get_review(){
        $query = $this->db->get('reviews');
        return $query->result_array();
    }
}

Модели дают фактический результат, т.е. "review_title" cannot be NULL.

Вот форма, если кому-то интересно.

form.php

<form action="<?php echo base_url(); ?>review/submit/" method="post">
    <input type="hidden" name='<?php echo $this->security->get_csrf_token_name(); ?>'
           value='<?php echo $this->security->get_csrf_hash(); ?>'>
    <div class="form-group">
        <label for="exampleInputEmail1">Title</label>
<!--        <input type="text" name="title">-->
        <?php echo form_input(['name' => 'title', 'class' => 'form-control', 'placeholder' => 'Enter your review title']); ?>
        <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
    </div>
    <div class="form-group">
        <label for="exampleInputPassword1">Review</label>
<!--        <textarea rows="10" cols="100" name="message"></textarea>-->
        <?php echo form_textarea(['name' => 'message', 'class' => 'form-control', 'placeholder' => 'Enter your review title', 'rows' => '10', 'cols' => '100']); ?>
    </div>
    <?php echo form_submit(['name' => 'submit', 'value' => 'submit']) ?>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...