2015-10-06 1 views
0

Я пытаюсь войти в систему. Если пароль и имя пользователя неверны, я хочу, чтобы всплывающее окно появилось, предупреждая пользователя об ошибке. Когда они закрывают предупреждение, он возвращается к index.php, который возвращается к экрану входа в систему.Сценарий всплывающего предупреждения в php-файле

Но когда это неверный пароль/имя пользователя, он возвращается к index.php без всплывающих сообщений. Настройки моего браузера не блокируют всплывающие окна. Могу я узнать, что я делаю неправильно.

<?php 
    if($login == true){ 
     //Do login process 
     //this portion works as long as correct username and password 
    } 
    else{ 
     echo '<script language="javascript">alert("Please enter valid username and password");</script>'; 
     header("location:index.php"); 
    } 
?> 


//login.php 

<?php 
    $username = "exampleuser"; 
    $password = "examplepass"; 
    $host = "localhost"; 

    $dbHandle = mysql_connect($host, $username, $password) or die("Could not connect to database"); 

    $selected = mysql_select_db("database_name", $dbHandle); 

    $myUserName = $_POST['user']; 
    $myPassword = $_POST['pass']; 

    if(ctype_alnum($myUserName) && ctype_alnum($myPassword)){ 
     $query1 = "SELECT * FROM users WHERE username='$myUserName'"; 

     $result1 = mysql_query($query1); 
     $count1 = mysql_num_rows($result1); 

     if($count1 == 1){ 
      $query2 = "SELECT password FROM users WHERE username='$myUserName'"; 
      $result2 = mysql_query($query2); 

      $row = mysql_fetch_array($result2, MYSQL_ASSOC); 
      $pass = $row['password']; 

      if(password_verify($myPassword, $pass)){ 
       $seconds = 120 + time(); 
       setcookie(loggedIn, date("F js - g:i a"), $seconds); 
       header("location:mysite.php"); 
      } 
      else{ 
       echo '<script language="javascript"> 
         alert("Please enter valid username and password"); 
         window.location.href = "http://index.php"; 
        </script>'; 
       die(); 
      } 
     } 
     else{ 
       echo '<script language="javascript"> 
         alert("Please enter valid username and password"); 
         window.location.href = "http://index.php"; 
        </script>'; 
       die(); 
     } 
    } 
    else{ 
     echo '<script language="javascript"> 
       alert("Please enter valid username and password"); 
       window.location.href = "http://index.php"; 
      </script>'; 
     die(); 
    } 
?> 
+0

PHP не останавливается после выполнения 'echo'. Он продолжает сообщать браузеру перейти на 'index.php', потому что все это происходит на сервере, а не в браузере пользователя. –

+0

@TillHelge Если я полностью удаляю header(), не работает. В итоге я вижу пустую страницу вместо возврата к index.php –

ответ

1

Если вы отправляете заголовки PHP он идет прямо на index.php после отправки страницы в вашем состоянии.

Если вы попробуете этот код:

<?php 
if($login == true){ 
    //Do login process 
    //this portion works as long as correct username and password 
} 
else{ 
    echo '<script language="javascript"> 
     alert("Please enter valid username and password"); 
     window.location.href = "http://index.php"; 
</script>'; 
die(); 
} 

вы увидите, что ваш код правильно. Вам нужно отслеживать событие во всплывающем закрытии для перенаправления на index.php через ajax или через перенаправление через http.

EDIT 1:

Здесь у вас есть полная страница с PDO. Это не лучший способ выполнить эту работу, но она работает. Как вы увидите в комментариях, вам нужно избегать атак xss, и вы должны изменить структуру базы данных, сохраняя хэшированный пароль и соль, чтобы скрыть пароль пользователя.

Вот код.

<?php 
//login.php 
//connection via PDO 
try{ 
    $pdo = new PDO ('mysql:host=localhost; dbname=database_name', 'exampleuser' , 'examplepass', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
    //alert errors and warnings 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
}catch(PDOException $e){ 
    exit('Database Error.'); 
} 

//prepared statements sanitize input binding parameters, for you but you can use some libraries to prevent sql injection 
$myUserName = trim(filter_var($_POST['user'], FILTER_SANITIZE_STRING));; 
$myPassword = trim(filter_var($_POST['pass'], FILTER_SANITIZE_STRING));; 

if(!empty($myUserName) && ctype_alnum($myUserName) && !empty($myPassword) && ctype_alnum($myPassword)){ 
    $query1 = $pdo->prepare("SELECT password FROM users WHERE username = :username_param"); 
    //bind parameter avoiding principal injection (pdo does not cover xss attacks, avoid it with other methods) 
    $query1->bindParam("username_param", $myUserName); 
    $result = $query1->fetch(); 
    // or you can do $result = $query1->fetchColumn(); to get directly string instead of array 

    if($result['password']){ 
     //you should use password_verify() if you have an hash stored in database, you should not save password in database. 
     //please google about best practice storing password, it's full of beautiful guides 

     //bad practice but will do the work 
     if($myPassword == $result){ 
      $seconds = 120 + time(); 
      setcookie('loggedIn', date("F js - g:i a"), $seconds); 
      header("location:mysite.php"); 
     }else{ 
      printAlert("Password incorrect"); 
     } 
    }else{ 
     printAlert("Username not valid"); 
    } 
} 
else{ 
    printAlert("Invalid data"); 

} 

function printAlert($text){ 
    echo "<script language='javascript'> 
       alert('$text'); 
       window.location.href = 'http://index.php'; 
      </script>"; 
    die(); 
} 
?> 
+0

, даже если я удалю заголовок(), он все равно не работает. Я заканчиваю на пустой странице. Можете ли вы дать мне примерный пример. –

+0

Конечно, я обновил код. Просто: код после предупреждения после закрытия всплывающего окна. Клиентский перенаправление вызывается через javascript. Функция serveride die() вызывается для предотвращения отключения javascript-хака для продолжения выполнения скрипта php. Теперь, если вы хотите перенаправить php-заголовок, мне нужно сделать полную кодировку на вашей полной странице сценария, но я думаю, что это то, что вы ищете. – SBO

+0

Я понимаю, что вы имеете в виду. Но по какой-то причине всплывающее окно не появляется. Вход происходит в index.php. Когда нажимается кнопка входа в систему, она перемещается для обработки информации на login.php. Когда это правильно, он перемещается в mysite.php для отображения защищенной информации. С приведенным выше кодом при попытке с неправильным паролем он перемещается в login.php и остается там без всплывающего окна и отображается только белая страница. Вышеприведенный код написан в файле login.php. –

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