2012-03-25 14 views
0

Ich versuche, eine Anmeldung auf einer Website, wo es verbindet sich mit der Datenbank, überprüft dagegen, aber die Umleitung funktioniert nicht (login.php loggedin.php). Ich bin entsetzlich, wenn ich meinen eigenen Code lese, und habe mich eine Weile im Kreis bewegt. Wenn jemand helfen könnte, wäre ich sehr dankbar! Vielen Dank im Voraus.Login nicht richtig umleiten

Login_page.inc.php

<?php # Script 11.1 - login_page.inc.php 

// this page prints any errors associated with logging in 
//and creates te entire login page, including the fom 

//include the header: 

$page_title = 'Login'; 

include ('includes/header.html'); 

//print any error messages if they exist: 

if (!empty($errors)) 
{ 
echo '<h1>Error!</h1> 

<p class="error">The following error(s) occurred:</br>'; 
foreach ($errors as $msg) 
    { 
    echo "- $msg</br>\n"; 
    } 
echo '</p><p>Please try again.</p>'; 
} 

//display form 
?> 
<h1>Login</h1> 

    <form action=login.php" method="post"> 

     <p>Email Address: <input type="text" name="email" size="20" maxlength="80"/></p> 

     <p>Password: <input type="password" name="pass" size="20" maxlength="20"/></p> 

     <p><input type="submit" name="submit" value="Login"/></p> 

     <input type="hidden" name="submitted" value="TRUE"/> 

    </form> 

<?php //include the footer: 

include ('includes/footer.html'); 

?> 

Loggedin.php

<?php # loggedin.php 

//this is where the user is directed from login.php 
session_start(); 
//if no cookie is present redirect the user: 
//if (!isset($_COOKIE['user_id'])) 
if (!isset($_SESSION['user_id'])) 
{ 
    //the functions need to create an absolute url 
    require_once ('includes/login_functions.inc.php'); 

    $url = absolute_url(); 
    header("Location: $url"); 
    exit(); //exit script 
} 

//set the page title and include the header 
$page_title = 'Logged in.'; 
include ('includes/header.html'); 

//welcome message 
echo "<h1>Logged in!</h1> 
<p>You have successfully logged in, {$_SESSION['first_name']}!</p> 

<p><a href=\"logout.php\">Logout</a></p>"; 

include ('includes/footer.html'); 

?> 

login.php

<?php # login.php 
//this page processes the login form submission 
//upon successful login the user's redirected 
//two include files are needed for this 
//send nothing to the web browser prior to the setcookie() lines 

//check if the form has been submitted: 
if (isset($_POST['submitted'])) 
{ 
    //for processing the login: 
    require_once ('includes/login_functions.inc.php'); 

    //need the database connection: 
    require_once ('includes/mysqli_connect.php'); 

    //check the login 
    list ($check, $data) = check_login($dbc, $_POST['email'], $_POST['pass']); 

    if($check) 
    { 
     /*ok, set cookies to last one hour after it is set 
     setcookie ('user_id', $data ['user_id'], time()+3600, '/', '', 0, 0); 

     setcookie ('first_name', $data ['first_name'], time()+3600, '/', '', 0, 0);*/ 

     session_start(); 

     $_SESSION['user_id'] = $data['user_id']; 
     $_SESSION['first_name'] = $data['first_name']; 

     //redirect 
     $url = absolute_url ('loggedin.php'); 
     header("Location: $url"); 
     exit(); //quit the script 
    } 

    else 
    { 
     //assign errors to $data for error reporting in the login_page.inc.php 
     $errors = $data; 
    } 

    mysqli_close($dbc); //close the database connection 
} //end of main submit condition 

include ('includes/login_page.inc.php'); 



?> 

Login_functions.php

<?php #- login_functions.inc.php 

//this page defines two functions used by the login/logout process. 

/*this function determines and returns an absolte URL 
*takes one argument: the page that concludes the URL 
*the arguement defaults to index.php 
*/ 

function absolute_url ($page = 'index.php') 
{ 

//start defining the URL. . . 

//URL is http:// plus the host name plus current directory: 

$url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']); 

//remove any trailing slashes: 
$url = rtrim($url, '/\\'); 

//adding the page. . . 
$url.= '/' . $page; 

//return to the url 
return $url; 

} //end of the absolute_url function 

/* this function validates the form data (the email address and password) 

*if both are present the database is queried 

*this function requires a database connection 

* the function returns an array of information. including: 

* - a TRUE or FALSE variable indicating a success or failure 
* - an array of either errors or the database return result 

*/ 

function check_login($dbc, $email = '', $pass = '') 
{ 
    $errors = array(); //starting error array 

    //validate email address 

    if (empty($email)) 
    { 
    $errors[] = 'You forgot to enter your email address.'; 
    } 

    else 
    { 
    $e = mysqli_real_escape_string($dbc, trim($email)); 
    } 

    //validate the password 

    if (empty($pass)) 
    { 
    $errors[] = 'You forgot to enter your password.'; 
    } 

    else 
    { 
    $p = mysqli_real_escape_string($dbc, trim($pass)); 
    } 

    if (empty($errors)) 
    { 
    /*if everything's okay 

    *retrieve the user_id and the first_name for that 
    *email+password combination: 
    */ 

    $q = "SELECT user_id, first_name FROM site_users WHERE email='$e' AND pass=SHA1('$p')"; 

    $r = @mysqli_query ($dbc, $q); //run the query 

    //check the result and making sure that both fields are in the same row 
    if(mysqli_num_rows($r) ==1) 
    { 
    //fetch the record 
    $row = mysqli_fetch_array ($r, MYSQLI_ASSOC); 

    //return true and the record: 
    return array(true, $row); 
    } 

    else 
    { 
    //not a match 
    $errors[] = 'The email address and password entered do not match those on file.'; 
    } 

    }//end of empty($errors) IF. 

    //return false and the errors: 
    return array(false, $errors); 
} //end of check_login() function 

?> 
+0

und wie genau funktioniert nicht? wohin willst du umleiten? Hauptverzeichnis? oder login.php? – riso

+0

Welche Umleitung schlägt fehl? Der eine innerhalb 'if ($ check)'? Und haben Sie verifiziert, dass die Ausgabe von 'absolute_url()' korrekt und gültig ist? –

+0

loggedin.php ist, wo ich versuche zu erreichen. Wenn ich versuche, zum eingelogged umzuleiten, sagt es mir, dass die Seite nicht existiert. Ich schaue immer wieder durch, kann aber nicht sehen, warum das nicht so war. – PurpleSmurph

Antwort

0

Das Problem war innerhalb der SHA1 im Gespräch mit der Datenbank, wo durch SHA1 ist eine (40) stark und die Datenbank wurde auf (20) gesetzt. Ein nerviges Problem, aber es wurde nicht gelöst. Var_dump wurde verwendet, um mit der Datenbank zu sprechen, um zu beweisen, dass die eingegebenen Informationen korrekt waren, es zeigte jedoch, dass das in der Datenbank gespeicherte Passwort (20) war und das für die Anmeldung eingegebene Passwort war (40).

1

Wenn eine der Dateien einen Code enthält, der an den Browser gesendet wird, sendet PHP automatisch alle Header. Nachdem die Header gesendet wurden, können Sie keine neuen Header mehr senden und es wird Ihre Location:-Header gelöscht. PHP sollte eine Notiz werfen, suchen Sie in Ihren Protokollen und/oder setzen Sie die richtigen error_reporting Flags.

Dies umfasst Zeilenumbrüche oder Leerzeichen oder was immer nach einem ?> Tag Block ist.

+0

Würde dies verhindern, dass login.php geladen wird? Im Moment bekomme ich beim Versuch, mich einzuloggen, einen 404 Fehler. Ich hatte keinen solchen Fehler von PHP. Relativ neu zu PHP. – PurpleSmurph

+0

Ah, relevante Fehler! Es hilft, wenn Sie denen erzählen, ich habe nur geschätzt, was passiert ist. Sind Sie sicher, dass beide Dateien in demselben Fall sind? Ist die Ziel-URL korrekt? Unix-ähnliche Webserver neigen dazu, die Groß-/Kleinschreibung zu beachten –

+0

Sh * t, Entschuldigung! Just edited, ja, sowohl Login als auch eingelogged befinden sich im selben Verzeichnisordner. – PurpleSmurph

0

Es gibt nichts falsch mit Ihrem Skript ist von dem, was ich ... hier sehen kann, aber am

<form action=login.php" method="post">

ersetzen den Inhalts

includes/header.html index.php

Sie müssen auch nicht sicher,

mit

<form action="login.php" method="post">

Wenn Sie den Fehler einfügen können Sie sehen, sind .. vielleicht kann ich Ihnen helfen, besser

Dank :)

+0

Nun, das war eines der Probleme (peinlich, ich kann meine eigenen Sachen schlecht lesen). Aber ich bekomme jetzt eine Fehlermeldung, dass das Passwort und die E-Mail nicht übereinstimmen, wenn ich sicher bin, dass sie es tun (ich habe phpmyadmin geöffnet und kann sehen, dass sie übereinstimmen). – PurpleSmurph

+0

Lassen Sie mich wissen, wenn Sie mehr Fehler haben ??? – Baba

+0

Ich bekomme "Die folgenden Fehler aufgetreten: - Die E-Mail-Adresse und das Passwort eingegeben nicht mit denen in der Datei übereinstimmen." Obwohl sowohl die E-Mail als auch das Passwort korrekt sind, kann ich die Datenbanktabelle sehen, aus der sie stammen. Ich bin also nicht sicher, was schief läuft. – PurpleSmurph

0

Sie enthalten keine Leerzeile vor Ihrer header (‚Location: $ url‘). Weil dies das Senden von Kopfzeilen verhindert und Sie nicht in der Lage sind, dorthin weitergeleitet zu werden, wo Sie sein möchten.