probleem met inlogsysteem

Status
Niet open voor verdere reacties.

RonaldGJ

Gebruiker
Lid geworden
28 apr 2007
Berichten
419
Nog een vraag, waar ik al eens vaker naar op zoek ben geweest!
Ik heb een inlog systyeem gemaakt die prima werkt, op 1 puntje na!

Ik heb het inlog schermpje staan in admin.php. Ik tik mijn gbr. naam en ww in en klik op inloggen. Dan logt hij in, dan heb ik ook neergezet $_SESSION['login'] = 1; Dan krijg ik de tekst te zien die ik wil zien als ik ingelogd ben, maar als ik dan boven men cursor bij de URL zet en ik ga opnieuw naar admin.php sluit hij weer af en laat hij het inlogscherm weer zien. Ik wil dat hij gewoon de tekst weer laat zien die er hoort te staan als ik ingelogd ben.

Iemand een ideetje:confused:?

Vast bedankt,


Gr. Ronald!:)
 
Je verwijst zo te zien op een vorige pagina "return"
dan gaat het 1 pagina terug, dus niet naar het begin.

Voeg een "return" toe of een "else" mark.
Return is het eenvoudigst die verwijst naar: admin.php
ipv. Juist ingelogt.

Dawn
 
Met return heb ik niks gedaan en heb al een heleboel else toegevoegd en weer weggehaald! Zoals ik het nu had staan gaat hij naar admin.php dan kijkt hij of hij is ingelogd. Zoja dan moet hij iets laten zien. Maar log ik nou in en typ dan in als url: blablalba.nl/admin.php dan hoort hij dus dat ene te laten zien, WANT ik was al ingelogd, maar dan laat hij weer het inlog scherm zien:confused:

Gr. Ronald!:)
 
Voor de mensen die het nog niet helemaal duidelijk is, wat ik me voor kan stellen, bijvoorbeeld deze site. Als ik naar de berichten zit te kijken ben ik ingelogd. Als ik dan boven waat de URL staat de cursor neerzet en weer op enter druk, gaat hij weer naar de site waar de berichten staan, maar ik blijf gewoon ingelogd.

Doe ik dat nou precies hetzelfde idee. Ik ben ingelogd en hij laat wat zien. Klik ik dan boven weer op de URL, dan laat hij het inlogscherm weer zien, terwijl hij gewoon weer moet laten zien wat er stond!

Misschien is het zo iets duidelijker.
Iemand nog ideeën, heel graag!:thumb:

Gr. Ronald!:)
 
Code zegt ons meer dan 1000 woorden ;)

Zo te lezen zit het in je controle op de sessie, maar ik wacht de code even af...
 
PHP:
<?php
$naam = "ik";
$ww = "wachtwoord";
$fout = "uit";
$form_weergeven = "ja";
if(isset($_POST['inloggen'])){
	if(($_POST['naam'] == $naam) && ($_POST['wachtwoord'] == $ww)){
		$_SESSION['inlog'] = "1";
		echo 'U bent ingelogd, klik <a href="?p=uitloggen">hier</a> om weer uit te loggen!';
		$form_weergeven = "nee";
	} else {
		$fout = "aan";
		$form_weergeven = "ja";
	}
} else {
$form_weergeven = "ja";
}
if(isset($_SESSION['login']) && $_SESSION['login'] == "1"){
	if($_POST['p'] == "uitloggen"){
		session_destroy();
		$form_weergeven = "ja";
	} 
		echo 'U bent ingelogd, klik <a href="?p=uitloggen">hier</a> om weer uit te loggen!';
		$form_weergeven = "nee";


}		 
if(($form_weergeven != "nee")){
?>
					<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
					 	<?php if($fout == aan){ echo 'De velden met een <font color="#FF0000" size="+1">*</font> zijn verplicht!<br><br>'; } ?>
						Gebruikersnaam:<br>
						<input type="text" name="naam" value=""><?php if($fout == aan){ echo '<font color="#FF0000" size="+1">*</font>'; } ?><br>
						Wachtwoord:<br>
						<input type="password" name="wachtwoord" value=""><?php if($fout == aan){ echo '<font color="#FF0000" size="+1">*</font>'; } ?><br>
						<input type="submit" name="inloggen" value="Inloggen">
					</form>
<?php
}
?>
 
Probeer dit eens:
PHP:
<?php
$naam = "ik";
$ww = "wachtwoord";
$fout = "uit";
$form_weergeven = "ja";
if(isset($_POST['inloggen'])){ 
  if(($_POST['naam'] == $naam) && ($_POST['wachtwoord'] == $ww)){ 
    $_SESSION['inlog'] = "1"; 
    echo 'U bent ingelogd, klik <a href="?p=uitloggen">hier</a> om weer uit te loggen!'; 
    $form_weergeven = "nee"; 
  } else { 
    $fout = "aan"; 
    $form_weergeven = "ja"; 
  } 
} else { 
  $form_weergeven = "ja";  
  if(isset($_SESSION['login']) && $_SESSION['login'] == "1"){ 
    if($_GET['p'] == "uitloggen"){ 
      session_destroy();
    } 
    echo 'U bent ingelogd, klik <a href="?p=uitloggen">hier</a> om weer uit te loggen!'; 
    $form_weergeven = "nee";
  } 
  if($form_weergeven != "nee"){ 
  ?> 
    <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
     <?php if($fout == aan){ echo 'De velden met een <font color="#FF0000" size="+1">*</font> zijn verplicht!<br><br>'; } ?> 
     Gebruikersnaam:<br> 
     <input type="text" name="naam" value=""><?php if($fout == aan){ echo '<font color="#FF0000" size="+1">*</font>'; } ?><br> 
     Wachtwoord:<br> 
     <input type="password" name="wachtwoord" value=""><?php if($fout == aan){ echo '<font color="#FF0000" size="+1">*</font>'; } ?><br> 
     <input type="submit" name="inloggen" value="Inloggen"> 
    </form> 
<?php 
  }
} 
?>
 
Wou ook niet, maar ik heb nu ook de fout gevonden en ik baal er zelf een beetje van! Ik heb dus gewoon bij de $_SESSION de namen niet goed getypt. De Session heet inlog en ik heb gechecked op login. Vandaar dat hij hem niet pakte. Nu doet hij het wel goed, maar heb nog een vraagje?

Als ik ingelogd ben, kan ik er dan ook voor zorgen dat ik voor de hele site ben ingelogd. Nu is hij alleen ingelogd op admin.php. Ga ik naar index.php dan werkt de SESSION daar niet op.

Bedankt voor het andere iniedergeval en misschien iemand een ideetje voor die SESSION die werkt voor de hele site?

Gr. Ronald!:)
 
Tuurlijk, gewoon gebruik maken van die sessie.

Bovenaan de pagina zet je diezelfde controle
PHP:
if(isset($_SESSION['inlog']) && ($_SESSION['inlog'] == "1")) {
  echo 'Dit gaan we weergeven wanneer de gebruiker is ingelogd';
} else {
 echo 'Dit zien niet-ingelogde gebruikers';
}
 
Dat dacht ik dus ook, maar dat werkt niet! Het lijkt erop dat die sessie alleen in admin.php werkt. Als ik die code die jij gaf in admin.php zet doet hij het. Zet ik die code in een ander .php bestand laat hij het niet zien, terwijl de sessie nog steeds 1 is.

Wat ik namelijk weer wil geven als je ingelogd bent is een link om weer uit te loggen. Maar dat wil ik boven aan de pagina. De code daarvoor staat boven alle andere code en werkt dus pas als je een keer op vernieuwen drukt.

PHP:
.....					<li><a href="contact.php">Contact</a></li>
					<?php if(isset($_SESSION['inlog']) && ($_SESSION['inlog'] == "1")){ echo '<li><a href="?p=uitloggen">Uitloggen</a></li>'; } ?>
				</ul>
			</div>
			<div id="content">
				<span class="inhoud">
					<h2>Admin Login</h2>
<?php
$naam = "ik";
$ww = "wachtwoord";
$fout = "uit";
$form_weergeven = "ja";
if(isset($_POST['inloggen'])){
	if(($_POST['naam'] == $naam) && ($_POST['wachtwoord'] == $ww)){
		$_SESSION['inlog'] = "1";
		$form_weergeven = "nee";
	} else {
		$fout = "aan";
		$form_weergeven = "ja";
	}
} else {
$form_weergeven = "ja";
}
if(isset($_SESSION['inlog']) && $_SESSION['inlog'] == "1"){
	if($_GET['p'] == "uitloggen"){
		session_destroy();
		$form_weergeven = "ja";
	} else {
		echo 'U bent ingelogd, klik <a href="?p=uitloggen">hier</a> om weer uit te loggen!';
		$form_weergeven = "nee";


}	
}.....

Zo voert hij alle code uit en stopt er vervolgend mee, want hij is aan het einde van het php bestand. Maar hoe laat ik nu de code helemaal boven aan ook uitvoeren. Moet ik hem dan refreshen? En zo ja hoe moet dat?

Dus 2 vragen eigenlijk.:o
1. De sessie werkt niet over alle .php bestanden. Hoe kan dit wel?
2. Hoe refresh ik mijn pagina zodat alle code wordt uitgevoerd.

Vast bedankt.

Gr. Ronald!:)
 
Punt 2 kun je afvangen door dit te doen:
PHP:
if(($_POST['naam'] == $naam) && ($_POST['wachtwoord'] == $ww)){ 
  $_SESSION['inlog'] = "1";
  $form_weergeven = "nee";
  echo '<meta http-equiv="refresh" content="5; URL="'. $_SERVER['PHP_SELF'] .'" />
    Succesvol ingelogd, klik <a href="'. $_SERVER['PHP_SELF'] .'">hier</a> wanneer u niet automatisch wordt doorgestuurd.'; 
} else {
Als het goed is wordt er nu na 5 seconden gerefreshed.

Punt 1 is even een kwestie van controleren.

Zet op een willekeurige pagina en op admin.php eens ergens
PHP:
echo $_SESSION['inlog'];
Dan kun je zien of hij daadwerkelijk wel bekend is.
 
Die refresh werkt. Nog niet helemaal naar mijn smaak, maar het doet het inieder geval.
Die echo $_SESSION['inlog']; laat niks zien. Ik heb het op een andere pagina gezet en er komt helemaal niks te staan.

Bij admin.php komt er 1 te staan. Dus daar werkt het prima. Maar andere pagina's krijgt ie dus niet door dat er een sessie is.
Moet er soms met Cookies gewerkt worden?

Gr. Ronald!:)
 
Heb je boven die pagina session_start(); staan :)?
 
Laatst bewerkt:
Fantastisch:thumb:, stom dat ik dat vergeten ben!:o
Harstikke bedankt en dan heb ik nu eerst geen vragen meer.... denk ik:p!

Gr. Ronald!:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan