Inlogsysteem

Status
Niet open voor verdere reacties.

tom V

Gebruiker
Lid geworden
27 aug 2007
Berichten
63
Beste,

Momenteel ben ik php aan het leren. Ik heb van www.web-garden.be een script gedownload voor een inlogsysteem. Als ik me aanmeld lijkt alles goed te gaan. De gegevens komen in de databank en wordt doorverwezen om me in te loggen. Als ik dit echter probeer krijg ik de beveiligde pagina met daarop te melding dat ik nog niet aangemeld ben. Ook als ik wachtwoord vergeten selecteer en mijn email ingeef zegt hij dat hij deze niet kan terugvinden. Wie kan me helpen?

url: www.vrijske.woelmuis.nl/registreer.php

Alvast bedankt!

Groetjes,

Tom
 
Controleer of er na een nieuwe registratie ook iets in de database wordt gezet.

PHP leren doe je niet door scripts te downloaden, je leert het pas echt door de broncode door te nemen en op te zoeken wat je niet begrijpt. :)
 
Beste,

Ik heb het nagekeken en het lijkt naar de databank weggeschreven te zijn. Als ik registreer krijg ik ook de melding dat deze al in gebruik is.

Ik probeer de code te downloaden en dan naar mijn hand te zetten zo krijg ik meestal een goed inzicht in de werkwijze. Heb ook hun cursus doorgenomen.

Ik heb de bijhorende bestanden dan ook doorgenomen maar kan niets vinden.

Alvast bedankt voor de moeite,

Tom
 
De juiste gegevens worden ook correct in de database gezet?

Ik heb het vermoeden dat je geen sessie/cookie aangemaakt krijgt.
Zet bovenaan je beveiligde pagina deze regels:
PHP:
<?php
echo 'Sessies:';
print_r($_SESSION);
echo 'Cookies:';
print_r($_COOKIE);

// en de rest van je code hieronder
Als het goed is moet je bij een van beide wat resultaten zien.
 
Beste,

Bedankt voor je moeite, het is me gelukt om op deze manier iets verder te geraken.

Ik krijg nu inderdaad een beveiligde pagina te zien. Hierop is echter niets te zien buiten de standaard banner v/d host.

Ik heb geprobeerd om één van beide codes te wisselen en deze apart te gebruiken, weer een lege pagina.

Ik heb wel een php tag moeten toevoegen, zou hier de fout kunnen zitten?

Kan je me helpen?

De file zit in de bijlage.

Alvast bedankt voor de moeite!

Tom
 

Bijlagen

Probeer deze code eens:
PHP:
<?php
session_start();
/* Controleren op sessie */
echo 'Sessies:';
print_r($_SESSION);
/* einde controle */

if (!isset($_SESSION['email'])){

	$tekst = "<h2>U bent nog niet aangemeld.</h2>

		U kunt <a href=\"login.php\">hier inloggen</a> of<br>

		U kunt zich <a href=\"registreer.php\">hier registreren</a>";

	echo($tekst);

	exit();

}

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

session_unset(); // alle variabelen vrijgeven

session_destroy();} // sessie afsluiten

?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Untitled Document</title>



</head>



<body>

<h1>Welkom op de beveiligde pagina</h1>

<img src="beveiligd.jpg" alt="beveiligd" />

<p>Op deze beveiligde pagina kunnen links opgenomen zijn.<br />

Zorg dat de opgeroepen pagina's ook beveiligd zijn.</p>



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

<input class="knop" name="u" type="submit" value="Uitloggen">

</form>

</body>

</html>
Geef even aan wat je ziet
 
Beste,

Ik heb deze in een nieuwe pagina gekopieerd. Wat ik dan te zien krijg zie je in de bijlage.

Alvast bedankt voor je hulp!

Nu met bijlage!

Tom
 

Bijlagen

  • Afbeelding 9.png
    Afbeelding 9.png
    18,2 KB · Weergaven: 30
Laatst bewerkt:
Er worden geen waardes aan de sessie variabelen toegekend daardoor behandeld hij deze controle als TRUE.
PHP:
if (!isset($_SESSION['email'])){

Zou je de code m.b.t. het inloggen hier kunnen plaatsen tussen
PHP:
...
 
Hier de code
PHP:
<?php
/* MySQL-query voor het maken van de databasetabel:
CREATE TABLE `nieuwsbrief` (
    `email` TINYTEXT NOT NULL 
);
*/

// Het formulier alleen verwerken als er op een knop met de naam 'actie' is geklikt:
session_start();
if (isset($_POST['actie'])) {
    $emailadres = $_POST['e'];             // E-mailadres lezen uit formulierveld 'e'
	$paswoord = $_POST['w'];			   // Paswoord lezen uit formulierveld 'w'
    $emailadres = strip_tags($emailadres); // HTML-tags en PHP-code verwijderen
	$paswoord = strip_tags($paswoord);	   //HTML-tags en PHP-code verwijderen
	$paswoord = trim($paswoord);		   // Witruimte aan het begin en einde verwijderen
    $emailadres = trim($emailadres);       // Witruimte aan het begin en einde verwijderen
	$melding = "Voer een geldig e-mail adres en paswoord in";
	
	

    if (strlen($emailadres) > 50) {
        $melding  = "Fout e-mail adres ";
        
    } else {
        require_once('is_email.inc.php');      // Functie is_email() insluiten
        if (is_email($emailadres)) {           // E-mailadres controleren met de functie is_email()
            $actie = $_POST['actie'];          // Uit te voeren actie bepalen
            if ($actie === "Inloggen" ) {

                // SQL-query definiëren:
                if ($actie == "Inloggen") {
                    $sql         = "SELECT * FROM gebruikers WHERE email='" . $_POST["e"] ."' AND wachtwoord='". $_POST["w"]. "'";  }
                
				

                // Constanten voor mysql_connect() insluiten:
                require_once('mysql_connect.inc.php');
                // Databaseverbinding openen:
                $verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die("Verbinding mislukt: " . mysql_error());
                // Database 'test' selecteren:
                mysql_select_db("vrijske_start") or die("Kon de database niet openen: " . mysql_error());
                // Query zonder resultaatset uitvoeren:
                $result = mysql_query($sql) or die("Query mislukt: " . mysql_error());
				$row=mysql_fetch_array($result);
				if(!empty($row)){
				$email = $_POST["e"];
				$wachtwoord = $_POST["w"]; 
                session_register("email"); 
				session_register("wachtwoord");
				
        // Doorsturen naar beveiligde pagina
        header("Location: beveiligd.php"); 
        exit(); }
               

            } if(empty($row)){
			$melding = "U hebt geen geldige combinatie van e-mailadres en 
				wachtwoord opgegeven.<br> Indien u nog niet geregistreerd bent:<br>
				<a href=\"registreer.php\">Hier registreren</a><br>";
			}
			 // Databaseverbinding sluiten:
                mysql_close($verbinding);

			
        } else {
            $emailadres = htmlentities($emailadres, ENT_QUOTES);
            // Foutmelding afhankelijk van de lengte van het e-mailadres:
            if (strlen($emailadres) < 1) {
                $melding = "U moet een <strong>e-mailadres</strong> invoeren. ";
            } else {
                $melding  = "<strong>$emailadres</strong> is geen geldig e-mailadres. ";
                $melding .= "Verbeter het e-mailadres of voer een ander e-mailadres in. ";
            }
        }
    }
} else {
    $emailadres = "";
    // Algemene instructies weergeven:
    $melding  = "Voer een geldig e-mailadres en  paswoord in<br> ";
    
}

 
?>
<h2>Inloggen</h2>
<p><?php echo $melding; ?></p>
<form action="login.php" method="post">
  <table border="0" cellpadding="0" cellspacing="2">
    <tr>
      <td nowrap><label for="e"><span style="text-decoration: underline">E</span>-mailadres:</label></td>
    </tr>
    <tr>
      <td><input accesskey="e" id="e" name="e" maxlength="255" size="30" type="text" value="<?php echo $emailadres; ?>"><br /></td>
    </tr>
	 <tr>
      <td nowrap><label for="w"><span style="text-decoration: underline">W</span>achtwoord:</label></td>
    </tr>
    <tr>
      <td><input accesskey="w" id="w" name="w" maxlength="255" size="30" type="password" value="<?php echo $paswoord; ?>"><br /><br /></td>
    </tr>
    <tr>
      <td align="center" nowrap>
        <input class="knop" name="actie" type="submit" value="Inloggen">
        <input class="knop" name="actie" type="submit" value="Wissen">
      </td>
    </tr>
  </table>
</form>
Paswoord vergeten? Klik <a href="vergeten.php" target="_blank">hier</a>

Alvast bedankt!
 
Maak van deze regels
PHP:
session_register("email");  
session_register("wachtwoord");
eens
PHP:
$_SESSION['email'] = $email;
$_SESSION['wachtwoord'] = ''; //Als je die verder niet gebruikt kan hij net zo goed niet aangemaakt worden
 
Een wachtwoord hoort sowieso niet in een sessie thuis. Een username is vaak ook nutteloos, het id van de user in een sessiewaarde opslaan is afdoende.
 
Je kunt deze code van Tha Devil:

PHP:
echo 'Sessies:';
print_r($_SESSION);

wel weer weghalen.
 
Beste,

Bedankt voor je reactie, ik heb het aangepast en het werkt!

Ik ontdek ondertussen mijn (hopelijk) laatste probleem. Als ik wachtwoord vergeten kies geeft hij aan dat het emailadres niet in de datbank zit, deze zit er echter wel in.

PHP:
<?php
if (!empty($_POST)){
	// databaseverbinding invoegen
	include("mysql_connect.inc.php");
	 $verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die("Verbinding mislukt: " . mysql_error());
	  mysql_select_db("vrijske_start") or die("Kon de database niet openen: " . mysql_error());
	// query samenstellen en uitvoeren
	$sql = "SELECT * FROM gebruikers WHERE email='". $_POST["e"] ."'"; 
	 $result = mysql_query($sql) or die("Query mislukt: " . mysql_error());
	
	// controleren of mail-adres is gevonden
	if (!empty($result)){
		// JA: variabelen toekennen
		while($rij = mysql_fetch_array($result)){
			$ontvanger = $rij ['email'];
			$pass = $rij ['wachtwoord'];
		}
		
		// rest van het bericht opstellen, inclusief extra header
		$onderwerp = "Uw wachtwoord";
		$msg = "Hallo, u hebt verzocht om toezending van uw wachtwoord\n\n";
		$msg .= "Uw wachtwoord is: " . $pass;
		$msg .= "\n\nMet vriendelijke groet, de webmaster.";
		$extra = "X-MAILER: PHP/versie " .phpversion();
		
		
		// bericht verzenden en eventueel foutboodschap tonen
		if (!mail($ontvanger, $onderwerp, $msg, $extra)){
			$tekst = "Dit e-mail adres komt niet voor in onze database<br>Terug naar <a href=\"login.php\">inloggen</a> ";
			echo($tekst);
		}else{
			$tekst = "Uw wachtwoord is verzonden. 
				Terug naar het <a href=\"login.php\">inloggen</a>";
			echo($tekst);
		}
		
	}else{
		// NEE, email-adres niet gevonden: foutmelding tonen
		$tekst = "Dit e-mailadres (<b>". $_POST["email"] . "</b>) komt
			 niet voor in de database<br>\n
			<a href=\"" . $_SERVER["PHP_SELF"] ."\">Ander e-mailadres</a>";
		echo ($tekst);
	}
	
// Indien pagina zichzelf niet heeft aangeroepen: HTML-formulier tonen
}else{
?>
<html>
<head>
	<title>E-mail mijn wachtwoord</title>
</head>

<body>

<h2>U wachtwoord e-mailen</h2>
<form method="post" action="<?php echo($_SERVER["PHP_SELF"]);?>">
Uw e-mailadres: 
<input type="Text" name="e" size="30">
<input type="Submit" value="E-mail mijn wachtwoord!">
</form>
</body>
</html>
<?php
} //else-blok afsluiten
?>

Wie kan ma helpen?

Alvast bedankt!

Tom
 
PHP:
while($rij = mysql_fetch_array($result)){
            $ontvanger = $rij ['email'];
            $pass = $rij ['wachtwoord'];
}

Als je daar nu eens van maakt:

PHP:
while($rij = mysql_fetch_assoc($result)){
            $ontvanger = $rij ['email'];
            $pass = $rij ['wachtwoord'];
}

Als je er een array van maakt moet je als ik me niet vergis met numerieke keys werken. Met mysql_fetch_assoc() kun je wel gewoon de veldnamen als key gebruiken.
 
Klopt, het verschil is dat je bij mysql_fetch_array() 2x je gegevens krijgt. Dus je array is 2x zo groot.

Bij mysql_fetch_array() kun je je eerste tabelveld met $row[0] en $row[1eveldnaam] aanroepen terwijl je bij mysql_fetch_assoc() alleen $row[1eveldnaam] kunt gebruiken :)
 
Beste,

Bedankt voor je hulp.

Ik heb de code aangepast maar ik krijg nog steeds de melding dat hij niet in de databank staat. Hij staat er echter wel in aangezien ik kan inloggen.

Enig idee?

Alvast bedankt!

Groetjes,

Tom
 
PHP:
 if (!empty($result)){
        // JA: variabelen toekennen
        while($rij = mysql_fetch_array($result)){
            $ontvanger = $rij ['email'];
            $pass = $rij ['wachtwoord'];
        }

Als je hier nu eens van maakt:

PHP:
 if (mysql_num_rows($result) > 0){
        // JA: variabelen toekennen
        $rij = mysql_fetch_assoc($result); // Ik neem aan dat er slechts een result is, aangezien je ook slechts één resultaat gebruikt.
        $ontvanger = $rij ['email'];
        $pass = $rij ['wachtwoord'];
 
De tekst is gewoon verkeerd.

Ik neem aan dat het uit deze regels voortkomt:
PHP:
if (!mail($ontvanger, $onderwerp, $msg, $extra)){ 
            $tekst = "Dit e-mail adres komt niet voor in onze database<br>Terug naar <a href=\"login.php\">inloggen</a> "; 
            echo($tekst);
Dat statement controleert of de mail is verzonden.
Nergens wordt in die controle een check richting de database gedaan

Verander het dus naar:
PHP:
if (!mail($ontvanger, $onderwerp, $msg, $extra)){ 
            $tekst = "Het verzenden is mislukt<br>Terug naar <a href=\"login.php\">inloggen</a> "; 
            echo($tekst);

Als je lokaal dit zaakje draait is de kans groot dat je je mail-instellingen niet goed hebt. Zoek even op "php.ini mail settings" komen vast wel wat bruikbare resultaten uit. :)
 
Beste,

Allemaal bedankt voor je reacties. Het systeem werkt nu naar behoren.

Tijd voor mij dus om de code volledig door te spitten en zo beter te begrijpen.

Bedankt!

Mvg,

Tom
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan