РЕДАКТИРОВАТЬ - я пытался сохранить данные внутри значений сеанса и передать их в качестве параметров для обработки модели, но это тоже не сработало.
Хорошо, пока ты не понизил это, выслушай меня. У меня есть 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>