2015-10-20 2 views
-1

Есть ли способ быстро идентифицировать проблему с вложенными операциями if, получая постоянные ошибки, говорящие слишком много}, затем получая «Этот счет не знает, есть ли фигурные скобки внутри строки», при удалении некоторых скобок:Вложенные операторы if confusion - «Забыли пароль»

было интересно, если кто-то может пройти через меня, как отладить это правильно

мой код для сброса пользовательского пароля

Вот мой Код:

<?php 
if (!$username && !$id){ 
    if($_POST['resetbtn']){ 

     // get the form data 
     $username = $_POST['username']; 
     $email = $_POST['email']; 

     // make sure info provided 
     if($username){ 
      if($email){ 
       if((strlen($email) > 7) && (strstr($email, "@")) && (strstr($email, "."))){ 
        require("connect.php"); 
        $find_email = $mysqli->query("SELECT * FROM `users` WHERE `username`='$username'"); 
        if($find_email->num_rows){ 
         while($row = $find_email->fetch_array(MYSQLI_ASSOC)){ 
         $email = $row['email']; 

         if($dbemail == $email){ 
          $options = [ 
           'cost' => 10, 
           'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
          ]; 
          $pass = rand(); 
          $pass= password_hash($pass, PASSWORD_BCRYPT, $options); 

          $query = ("UPDATE `users` SET `password` =? WHERE `username` =?"); 
          $stmt = $mysqli->prepare($query); 
          $stmt->bind_param('ss',$pass,$username); 
          $stmt->execute(); 
          if ($stmt->errno) { 
           echo "There was an error updating" . $stmt->error; 
          } 
          else echo "Updated {$stmt->affected_rows} rows"; 
          $stmt->close(); 

          // make sure the password was changed 

          $check_update = $mysqli->query("SELECT * FROM `users` WHERE `username`='$username' AND `password` ='$pass'"); 
          if($check_update->num_rows){ 

           $webmaster = "[email protected]"; 
           $headers = "From: FortuneFilly<$webmaster>"; 
           $subject = "Your New Password"; 
           $message = "Hello. Your password has been reset. Password: $pass"; 


           if(mail($email, $subject, $message, $headers)){ 
            echo"Your password has been reset. An email has been sent with new password."; 
           } 
           else 
            echo"An error has occured and your email was not sent containing your new password"; 
          } 
          else 
           echo"An error has occurred and the password was not reset"; 
         } 
         else 
          echo"You entered the wrong email address"; 

        } 
        } 
        $result->free(); 
        } 
        else 
         echo"The username was not found"; 

        mysqli_close(); 
       } 
       else 
        echo "Please enter a valid email"; 
      } 
      else 
       echo"Please enter your email"; 
     } 
     else 
      echo"Please enter your username"; 

    } 


    echo "<form action='fogotPass.php' method='POST'> 
    <table> 
    <tr> 
     <td>Username:</td> 
     <td><input type='text' name='user'</td> 
    </tr> 
    <tr> 
     <td>Email:</td> 
     <td><input type='text' name='email'</td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><input type='submit' name='resetbtn' value='Reset password'</td> 
    </tr> 
    </table> 
    </form>"; 
} 
else 
    echo "Please log out to view this page." 
?> 
+0

Вы должны действительно избежать кодирования. как это .. эти утверждения 'if' могут быть просто называемые один за другим .. –

+0

Возможно, проблемы рядом: "}} $ result-> free(); } "? –

+0

Если есть какие-либо вложенные блоки, используйте небольшие функции. Они аккуратные, легко читаемые и легко отлаживаются. –

ответ

3

Используйте хороший IDE, только в блокноте вы будете делать ошибки, как это.

Также if (!$username && !$id){ переменные не определены.

Сценарий делает слишком много, запрашивает db, проверяет и печатает HTML-форму.

Вам нужно немного отделить вещи.

Посмотрите:

enter image description here

  • Вы можете увидеть искаженные теги
  • Вы отправляете к тому же сценарию пока у вас есть action='forgotPass.php'

затем в PHP больше вопросов:

enter image description here

  • Опять же, с помощью IDE вы можете увидеть перепутались Брекеты других сигнального
+0

Также табулатура и инструкция« else »без фигурных скобок плохие. – Grork

+0

Какую IDE вы порекомендуете? –

+0

Phpstorm - лучший из них – meda

1
  • Как я могу видеть, у вас есть один дополнительный «}», который является последним, выше еще заявление.
  • Ваш первый, если заявление (если ($ имя пользователя & & $ ID) {!) Замкнута только ранее (эхо «формы)
  • Также вы не поставили точку с запятой. (;) В конце последнего заявления .
+0

Благодарим вас за ответ –

1

Существует один дополнительный} скобка в строке нет 97

+0

Спасибо за ваш ответ –

1

Просто удалите один из закрывающих фигурных скобок, прежде чем "$ result-> бесплатно();".

+0

Спасибо за ваш ответ –

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