2014-10-29 4 views
0

Я в основном заполнил форму смены пароля. У меня только одна проблема. Когда пользователь хочет изменить свой пароль, он запрашивает «Текущий пароль», «Новый пароль» и «Новый пароль еще раз». Итак, вот моя ошибка: когда я вхожу в «Текущий пароль», и он прав в базе данных, а затем я попал в submit, ничего не появляется в «ошибках», если вы это сделаете. Я хочу, чтобы это в основном показывают: 'Пожалуйста, заполните всю форму'PHP if else echo issue

Изображение 1:

enter image description here

Изображение 2:

enter image description here

На изображении 2 должно отображаться при home 'Пожалуйста, заполните формуляр'

Это мой код:

<?php 
session_start(); 



$username = $_SESSION['sess_user']; 

    echo '<div class="search1"><h2>'.$username.'</h2><div class="search12"><h2><a href="index.php">Home</a></h2></p></div></div>'; 


    if (isset($_SESSION['sess_user'])) 
    { 
     //user is logged in 

     if (isset($_POST['submit'])) 
     { 
      //start changing password 
      //check fields 

      $oldpassword = md5($_POST['oldpassword']); 
      $newpassword = md5($_POST['newpassword']); 


      $repeatnewpassword = md5($_POST['repeatnewpassword']); 


      //check password against db 
      include('../includes/config.php'); 

      $queryget = mysql_query("SELECT password FROM login WHERE username='$username'") or die ("change password failed"); 
      $row = mysql_fetch_assoc($queryget); 
      $oldpassworddb = $row['password']; 

      //check passwords 
      if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword'])) 

      else {echo "<div class='results'>Please fill out the whole form</div><div class='successmate'><h2><p><a href='changepassword.php'><br><br></a></p></h2></div>";} 

      { 



       if (isset($_POST['repeatnewpassword']) AND isset($_POST['newpassword']) AND $_POST['newpassword'] != '') { 
        if ($newpassword==$repeatnewpassword) 
        { 
         $querychange = mysql_query("UPDATE login SET password='$newpassword' WHERE username='$username'"); 
         echo "<div class='successmate'><br><br><br><br><hr>Password has been changed!</hr></div><div class='successmate'><br><hr><br><h2><p><a href='index2.php'><br><br></a></p></h2></div>"; 
        } 
        else {echo "<div class='results'>new password(s) dont match</div><div class='successmate'><br><br><h2><p><a href='changepassword.php'>try again?</a></p></h2></div>";} 

       } 




      } 
      else {echo "<div class='results'>current password doesnt match</div><div class='successmate'><h2><p><a href='changepassword.php'><br><br>Try again?</a></p></h2></div>";} 





      if (isset($_POST['email']) AND $_POST['email'] != '') { 
       $querychange = mysql_query("UPDATE login SET email='$email' WHERE username='$username'"); 
       echo "<div class='successmate'><br><br><br><br><hr>Your email has been changed</hr></div><div class='successmate'><br><hr><br><h2><p><a href='index2.php'><br><br></a></p></h2></div>"; 
      }} 


     else 
     { 

      echo" 
     <form class='search1' action='changepassword.php' method='POST'> 
     <label>Current Password:*</label> <input type='password' id='password' name='oldpassword' required><p> 
     <label>New Password:*</label> <input type='password' id='password' name='newpassword'><p> 
     <label>Repeat New Password:*</label> <input type='password' name='repeatnewpassword'><p> 
     <input type='submit' name='submit' class='submit' value='submit'><br><br><br> 
     <h2><p><a href='index2.php'>Back</a></p></h2> 
     </form> 
     "; 


     }} 
    else 
     die ("You must be logged in to change your password"); 


    ?> 
+4

«MD5» криптографически сломан. Посмотрите на использование 'password_hash()', доступного в PHP 5.5+. Там есть прокладка, которую вы можете использовать и для более ранних версий. –

+0

@MikeW Спасибо, я загляну в него :) – Sarah

+0

Человек это трудно читать. Во-первых, почему вы проверяете, является ли md5 oldpassword == md5 в db и их, является ли oldpassword «пустым»? Также почему вы предполагаете, что существует sess_user, сбрасывая результаты (приводя к возможному вектору атаки XSS), а затем проверяя, является ли он пустым? Кроме того, почему вы вводите имя пользователя (вслепую из сеанса), не избегая его вообще в SQL-инструкции, что приводит к уязвимости SQL-инъекции? Я серьезно пытался выяснить, что вы делаете, чтобы ответить на ваш реальный вопрос, но это беспорядок, чтобы пройти. –

ответ

0

Там же потоки логики, которые здесь не так ...

Вы говорите ... if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword'])) else { ... } { ... } ... который не имеет смысла. Если что-то есть, тогда сделайте это, иначе это должно быть утверждение.

+0

@ Arif_suhail_123 ??? –

+0

@ Arif_suhail_123 Gotcha. Сначала я читал OP неправильно. Несколько удвоений взяли :). –

+0

@ Arif_suhail_123 Полумесячная луна на нем :). Они не особенно приятны, хотя ... но я бы тоже не был. –

1

Я думаю, что проблема заключается в форматировании кода.

Насколько я понял из вашего кода, эта часть:

 //check passwords 
     if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword'])) 

     else {echo "<div class='results'>Please fill out the whole form</div><div class='successmate'><h2><p><a href='changepassword.php'><br><br></a></p></h2></div>";} 

     { 

, кажется, синтаксически перепутались.

Вам нужно перестраивать и очистить свой код следующим образом:

 <?php 
     session_start(); 

      //opening if and other stuff you'll do here 

      //check passwords and your code correction done here 
      if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword'])) 
      { 

       if (isset($_POST['repeatnewpassword']) AND isset($_POST['newpassword']) AND $_POST['newpassword'] != '') 
       { 
        if ($newpassword==$repeatnewpassword) 
        { 
         $querychange = mysql_query("UPDATE login SET password='$newpassword' WHERE username='$username'"); 
         echo "<div class='successmate'><br><br><br><br><hr>Password has been changed!</hr></div><div class='successmate'><br><hr><br><h2><p><a href='index2.php'><br><br></a></p></h2></div>"; 
        } 
        else 
        { 
         echo "<div class='results'>new password(s) dont match</div><div class='successmate'><br><br><h2><p><a href='changepassword.php'>try again?</a></p></h2></div>";//I removed an extra curly brace here 

        } 

       } 
       else 
       { 
        echo "<div class='results'>Please fill out the whole form</div><div class='successmate'><h2><p><a href='changepassword.php'><br><br></a></p></h2></div>"; 
       } 
      } 


      else 
      { 
       echo "<div class='results'>current password doesnt match</div><div class='successmate'><h2><p><a href='changepassword.php'><br><br>Try again?</a></p></h2></div>"; 
      } 


      //do your rest of the work here and end your opening if 


?> 

Честно говоря, ваш код выглядит aweful. Одним из признаков хорошего разработчика является то, что он делает код читаемым, и один из способов сделать ваш код читаемым - следовать правильному отступу в блоках кода. Все ваши блоки if-else выглядят ужасно, вы, похоже, не заботитесь об их отступлении. Результат? Вы можете сами убедиться. Вы все испортили, и мне было трудно понять ваши блоки if-else, где они начали и где они закончились. Вы очень серьезно относитесь к следующей ссылке: http://www.riedquat.de/prog/style

+0

@Crescent Moon, похоже, что это не сработало, дало мне «неожиданное еще» – Sarah

+0

@Sarah Неужели вы действительно правильно следили за отступом и, как я показал вам? У вас должно быть 4 пробела ниже вашей фигурной скобки, а затем напишите свой код. Проблема, безусловно, с отступом. Возможно, вы снова перепутали с отступом в своей электронной почте и других материалах вниз. –

+0

@ Arif_suhail_123 Где проблема? Мне все хорошо. –