2014-01-26 7 views
0

У меня на сайте зарегистрирована система регистрации/входа, и, поскольку она прямо сейчас, она отображает ошибки и текст успеха в верхней части страницы. Я хочу, чтобы он отображал его в форме. Но всякий раз, когда я пытаюсь добавить его ниже формы, он не работает!Показать ошибку/успех при отправке формы не работает

session_start(); 
include_once('class.register.php'); 
$register = new Register(); 

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

if($register->process()) 
echo "Successfully Signed Up!"; 
else 
$register->show_errors(); 
} 

$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true)); 

Это работает, но выводит текст вверху страницы.

Я пытался поставить этот код ниже «форма» конечный тег:

<?php 

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

if($register->process()) 
echo "Successfully Signed Up!"; 
else 
$register->show_errors(); 
} 

?> 

Но когда я переместить его вниз по форме, то он говорит: «Invalid Представление», которое вызвано этим:

public function valid_token() 
{ 
if(!isset($_SESSION['token']) || $this->token != $_SESSION['token']) 
$this->errors[] = 'Invalid Submission'; 

return count($this->errors)? 0 : 1; 
} 

ЭТО ФОРМА Я говорю о

<form role="form" method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>"> 
       <div class="form-group"> 

       <div class="row"> 
        <div class="col-sm-6"> 
        <label for="firstname">Firstname</label> 
        <input type="text" class="form-control" id="firstname" name="firstname" placeholder="Firstname"> 
        </div> 
        <div class="col-sm-6"> 
        <label for="surname">Surname</label> 
        <input type="text" class="form-control" id="surname" name="surname" placeholder="Surname"> 
        </div> 
       </div> 
       </div> 
       <div class="form-group"> 
       <label for="username">Username</label> 
       <input type="text" class="form-control" id="ruser" name="ruser" placeholder="Username"> 
       </div> 
       <div class="form-group"> 
       <label for="email2">Email address</label> 
       <input type="email" class="form-control" id="remail" name="remail" placeholder="Enter email"> 
       </div> 
       <div class="form-group"> 
       <div class="row"> 
        <div class="col-sm-6"> 
        <label for="password2">Password</label> 
        <input type="password" class="form-control" id="rpass" name="rpass" placeholder="Password"> 
        </div> 
        <div class="col-sm-6"> 
        <label for="password2">Repeat password</label> 
        <input type="password" class="form-control" id="rpass2" name="rpass2" placeholder="Password"> 
        </div> 
       </div> 
       </div> 
       <div class="checkbox"> 
       <label> 
        <input type="checkbox"> I agree to the <a href="#">Terms of Service</a> and <a href="#">Privacy Policy</a> 
       </label> 
       </div> 
       <input type="hidden" name="token" value="<?php echo $token;?>"/> 
       <button type="submit" name="register" class="btn btn-block btn-color btn-xxl">Create an account</button> 
      </form> 
+1

Форма, в какой форме? –

+0

Форма атрибута html, в которую вы вводите информацию.

- Эта форма: P – Anders

ответ

1

Так с, если испытания в valid_toke Функция n() терпит неудачу, либо токен больше не находится в сеансе (убедитесь, что session_start(); все еще находится в верхней части вашего кода), или, скорее всего, $this->token != $_SESSION['token'] является виновником.

У меня есть подозрение, что, возможно, вы делаете эту строку кода из строя в настоящее время:

$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true));

Если эта линия проходит до вашего звонка в $register->process() затем маркер внутри сессии будет быть изменен прежде чем вы попытаетесь сопоставить его, вызвав проблему в функции valid_token().

Если это не так, я бы точно исследовал, когда и где $this->token настроен, чтобы убедиться, что он заполнен правильно до того, как произойдет $register->process().

+0

Да, это было то, что я сделал. Но я нашел способ решить это, спасибо, хотя! – Anders

Смежные вопросы