Login script

  • Onderwerp starter Onderwerp starter moh
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

moh

Gebruiker
Lid geworden
6 apr 2007
Berichten
34
Bedoeling van deze script is om een cookie te plaatsen met de $username value

Het werkt echter niet want hij geeft steeds terug wrong login enterd.
terwijl ik wel de juiste charname en password opgeef kan er iets zijn zelf met de script?

PHP:
<?php
include_once "functions.inc";

connect();

if($_SERVER['REQUEST_METHOD'] = "POST"){
	
	$username = protect($_POST['username']);
	$password = protect(md5($_POST['password']));
		
	$errors = array();
	
		if(!$username){
			$errors[] = "Character name is not filled in";
		}
		if(!$password){
			$errors[] = "Password is not filled in";
		}

		if($username){
			if(!ctype_alnum($username)){
				$errors[] = "Character name can only contain numbers and letters!";
			}
			$range = range(1,20);
			if(!in_array(strlen($username),$range)){
				$errors[] = "Charactername must be between 1 and 20 characters!";
			}
		}
		
		if(count($errors) >0){
			foreach($errors as $error){
				echo $error . "<br>\n";
			}
		}else {
					if($username && $password) {
						$qry = "SELECT charname, password FROM profile WHERE charname='".$username."' AND password='".$password."'";
						$res = mysql_query($qry) or die (mysql_error());
			
							if(mysql_num_rows($res) >0){
								setcookie("insignificant", $username, time()+60*60*24);
							}else{
								echo "wrong login enterd";
							}
					}
		}
}
?>
 
Laatst bewerkt:
Ik vind het ook wel knap dat dit werkt:
PHP:
if($_SERVER['REQUEST_METHOD'] = "POST"){
Een vergelijking is ==, iets declareren is een enkele =

Vermoedelijk gaat er iets niet goed in die query.
Zet dus op regel 37 eens
PHP:
echo $qry;

Vul die query vervolgens eens in phpMyAdmin is.
 
sjonge jonge nog een probleem ontdekt typ fout aantal varchar bij password met md5: staat er niet volledig in dus.. staat op 25 plaats van 255............


alleen als ik niks invul bij de password dan moet hij weergeven dat deze niet is ingevult dat doet hij nu niet vanwege die md5 ervoor hoe kan ik deze aanpassen?

misschien ben ik zelf stom hoor mischien de $_POST password zonder md5 ervoor en paas aangeven in de query dat de password md5 is ....
 
Laatst bewerkt:
Goed alles aangepast en het werkt alleen met 1 probleem.

Ik gebruik dynamic pages

dus de form submit='index.php?page=login' bijv of andere pagina's

nu krijg ik van mijn login errors de tekst dubbel te zien eveneens mijn nieuws staat er dubbel op hoe kan ik dit het beste oplossen? denk dat de oplossing ook zal helpen met bijv pagina refresh dat mensen dubbel kunnen posten.

wil graag gewoon de foutmelding weergeven in een <div> met de $_GET zonder dubbel data te zien :)
 
Laatst bewerkt:
alleen als ik niks invul bij de password dan moet hij weergeven dat deze niet is ingevult dat doet hij nu niet vanwege die md5 ervoor hoe kan ik deze aanpassen?

misschien ben ik zelf stom hoor mischien de $_POST password zonder md5 ervoor en paas aangeven in de query dat de password md5 is ....

Dat is inderdaad de juiste oplossing, eerst gewoon de $_POST waarde controleren of ie leeg is.

Na de controle kun je het MD5-en en in de database op laten zoeken.

Je laatste bericht is voor mij moeilijk te begrijpen, zaken dubbel...
Handiger is het plaatsen van een link waar het voorkomt en de bijbehorende code.
 
Dit is de index pagina hij is niet af er moet nog aardig wat mee gebeuren.
PHP:
<html>
	<head>
			<title>INSIGNIFICANT</title>
			<link href="style.css" rel="stylesheet" type="text/css">
			</head>
			<body>
				<div id="align">
					<?php
					include_once "inc/functions.inc";
					
					connect();

						if (isset($_COOKIE["insignificant"])) {
    						$username = $_COOKIE["insignificant"];

								$qry = "SELECT access FROM permissions WHERE id = (SELECT permissions_id FROM profile  WHERE charname = '".$username."')";
	
								$rData = mysql_query($qry);
  								$aData = mysql_fetch_assoc($rData);

									if ( $aData[ 'access' ] == 'Admin' && 'Member' && 'Guest' ) {
									
										echo "<div id=\"logo\">
												<ul>
													<li><a href=\"index.php?page=news\">NEWS</a></li>
													<li><a href=\"index.php?page=raids\">Raids</a></li>
													<li><a href=\"http://insignificant.3forum.biz/\">FORUM</a></li>
												</ul>
												<div id=\"login\">
													You are logged in as: $username
												</div>
		                                      </div><br><br>";
											  }}else{
											  											  	
												echo "<div id=\"logo\">
														<ul>
															<li><a href=\"index.php?page=news\">NEWS</a></li>
															<li><a href=\"http://insignificant.3forum.biz/recruitment-f7/\">JOIN US</a></li>
															<li><a href=\"http://insignificant.3forum.biz/\">FORUM</a></li>
															<li><a href=\"index.php?page=register\">REGISTER</a></li>
														</ul>
															<div id=\"login\">
																<form name=\"setCookie\" method=\"POST\" action=\"index.php?page=login\">
																	Username: <input type=\"text\" name=\"username\" size=\"24\"><br>
																	Password: <input type=\"password\" name=\"password\" size=\"20\"><br>
																	<input type=\"submit\" value=\"Login\" name=\"submit\">
																</form>
															</div>
		                                     			 </div><br><br>";
 }

					?>
					<div id="contains">
						<table width="70%">
							<tr>
						 		<td>
						 			<?php					 			
						 				
										 	@$page = $_GET['page'];
										 	
										 	if ($page){
										 		
										 		if (!strpos($page,".")&&
										 			!strpos($page,"/")){
										 				
											 			$path = "inc/".$page.".php";
											 			include($path);
											 		
											 				if(file_exists($path)){
											 			
											 					include($path);
											 			
											 				}else 
											 			
											 					echo "That page does not exists.";
										 			}
											 		
										 	else {
										 		echo "Not allowed!";
										 		}
										 	}
										 											 							 				
						 			?>
						 		</td>
					 		</tr>
					 	</table>
					</div>
			</div>
		</body>
</html>

Ik weet niet of dit logisch is:
PHP:
<form name=\"setCookie\" method=\"POST\" action=\"index.php?page=login\"

of misschien ligt het aan de get method. volgende gebeurt
Als ik een link klik of de login submit klik krijg ik de data die hij moet weergeven dubbel.

Dus stel voor als ik niks intyp bij de login username en password krijg ik een foutmelding
"Character name is not filled in" en "Password is not filled in"

het volgende wordt dan weergegeven als ik op submit druk:

Character name is not filled in
Password is not filled in
Character name is not filled in
Password is not filled in

Bedoeling is dus dat het 1 keer wordt weergegeven niet 2 keer heb geen clue waar ik dit moet zoeken.

had wel iets gelezen dat ik @ moest gebruiker voor de variable $page. net weggehaald en getest werkt gewoon prima dit is het dus niet..
 
Laatst bewerkt:
Wat doet de functie "connect()"?

Waarschijnlijk zit de knup daar in.
 
Code:
function connect(){
	$con = mysql_connect("server","lognaam","pw") or die (mysql_error());
	$db = mysql_select_db("dbnaam", $con);
}


Hey tha devil ik heb het probleem denk ik al gevonden lijkt hem te wezen. Op deze forum kalken geeft me een beetje rust in me hoofd :).

PHP:
											 			$path = "inc/".$page.".php";
											 			include($path);
											 		
											 				if(file_exists($path)){
											 			
											 					include($path);

zie hier 2x include($path);
 
Laatst bewerkt:
Als dit index.php waar doe je dan iets met $_GET['login'] :(

Aangezien je het formulier naar index.php stuurt.

Als je nou eens een aparte pagina maakt waarin je de login verwerkt.

Noem die login.php
Daar laat je het formulier heen gaan.

Op login.php ga je dan de controles uitvoeren.
PHP:
<?php
session_start();
include_once("functions.inc");

//Database-connectie maken
connect();

if($_SERVER['REQUEST_METHOD'] == 'POST') {
  // De error sessie legen
  $_SESSION['error'] = '';
  
  $username = protect($_POST['username']);
  $password = protect($_POST['password']);

  $errors = array();

  if(empty($username)){
    $errors[] = "Character name is not filled in";
  } else {
    if(!ctype_alnum($username)){
      $errors[] = "Character name can only contain numbers and letters!";
    }
    $range = range(1,20);
    if(!in_array(strlen($username),$range)){
      $errors[] = "Charactername must be between 1 and 20 characters!";
    }
  }
  if(empty($password)){
    $errors[] = "Password is not filled in";
  }

  if(count($errors) >0){
    //Sla de error-array op in een sessie
    $_SESSION['errors'] = $errors;
    // Doorsturen naar index.php met $_GET['login'] = false
    header('location: index.php?login=false');
  } else {
    $qry = "SELECT
             charname,
             password
           FROM profile
           WHERE charname='". $username ."'
           AND password='". md5($password) ."'";
    $res = mysql_query($qry);
    if(!$res) {
      // Problemen met de database
      // Error-sessie aanvullen
      $_SESSION['errors'][] = 'Er is een fout opgetreden! MySQL zegt: '. mysql_error();
      // Doorsturen naar index.php met $_GET['login'] = false
      header('location: index.php?login=false');
    } else {
      if(mysql_num_rows($res) >0){
        setcookie("insignificant", $username, time()+60*60*24);
        // Doorsturen naar index.php met $_GET['login'] = true
        header('location: index.php?login=true');
      } else {
        $_SESSION['errors'][] = 'Wrong login entered';
        // Doorsturen naar index.php met $_GET['login'] = false
        header('location: index.php?login=false');
      }
    }
  }
} else {
  echo 'Unauthorized acces!';
}
?>

Je index.php wordt dan zo:
PHP:
<?php
session_start();
include_once "inc/functions.inc";
<html>
<head>
	<title>INSIGNIFICANT</title>
	<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="align">
if(isset($_GET['login'])) {
	if($_GET['login'] == 'false') {
		echo 'De volgende fouten zijn geconstateerd!: <br />';
		foreach($_SESSION['errors'] AS $value) {
			echo $value .'<br />'. "\n";
		}
		$_SESSION['errors'] = '';
	} elseif($_GET['login'] == 'true') {
		echo 'Succesvol ingelogd!';
	}
}

if (isset($_COOKIE["insignificant"])) {
	$username = $_COOKIE["insignificant"];
	$qry = "SELECT
				access
			FROM permissions
			WHERE id =
				(SELECT permissions_id
				 FROM profile
				 WHERE charname = '".$username."')";
	$rData = mysql_query($qry);
	$aData = mysql_fetch_assoc($rData);
	if ( $aData[ 'access' ] == 'Admin' && 'Member' && 'Guest' ) {
	?>
	<div id="logo">
		<ul>
			<li><a href="index.php?page=news">NEWS</a></li>
			<li><a href="index.php?page=raids">Raids</a></li>
			<li><a href="http://insignificant.3forum.biz/">FORUM</a></li>
		</ul>
		<div id="login">
			You are logged in as: <?php echo $username; ?>
		</div>
	</div>
	<br />
	<br />
	<?php
	}
} else {
	?>
	<div id="logo">
		<ul>
			<li><a href="index.php?page=news">NEWS</a></li>
			<li><a href="http://insignificant.3forum.biz/recruitment-f7/">JOIN US</a></li>
			<li><a href="http://insignificant.3forum.biz/">FORUM</a></li>
			<li><a href="index.php?page=register">REGISTER</a></li>
		</ul>
		<div id="login">
			<form name="setCookie" method="POST" action="login.php">
				Username: <input type="text" name="username" size="24" /><br />
				Password: <input type="password" name="password" size="20" /><br />
				<input type="submit" value="Login" name="submit" />
			</form>
		</div>
	</div>
	<br />
	<br />
	<?php
}
?>
<div id="contains">
	<table width="70%">
		<tr>
			<td>
				<?php
				$page = $_GET['page'];
				if (isset($page)) {
					if (!strpos($page,".") && !strpos($page,"/")) {
						$path = "inc/".$page.".php";
						if(file_exists($path)){
							include($path);
						} else {
							echo "That page does not exists.";
						}
					} else {
						echo "Not allowed!";
					}
				}
				?>
			</td>
		</tr>
	</table>
</div>
</div>
</body>
</html>
Kan best zijn dat het niet werkt, is allemaal op gevoel gedaan :)
 
ik heb een aparte login.php :)

daarom ook index?page=login

dus eigenlijk inc/login.php staat daar :)

Anyway nadat ik 1 include had weg gehaalt werkte het all

maar mm waarom error in een sessie dat beter?
 
De reden dat ik een sessie gebruik is omdat ik login.php alleen als controle gebruik.

Er wordt niets op weergegeven, het controleert de input en stuurt vervolgens de gebruiker via header() door naar een pagina.

Wil ik dus de foutmeldingen op een andere pagina laten weergeven zal ik ze moeten opslaan in een sessie of cookie
 
Aha op die manier ja ik snap wat je bedoeld alleen zover ben ik nog niet met php hoor ben maar sukkelig alles aan het uitzoeken en testen.

En dit alles voor een stom spelletje world of warcraft... maja als uiteindelijk alles werkt kan ik tenminste op een normale manier people tracken met de juiste info voor me neus ect. :)

en zeer veel dank voor ondersteuning
 
Mmm als ik php gevorderd was dan had ik vast zoiets gedaan login in sessie en cookie maar dat is me even teveel hooi op de vork.

Ik zie wel bijv de handigheid om een array in een sessie op te slaan en die later te exploden alleen vraag ik me af hoeveel sessies kan je hebben en hoelang blijven ze staan iets voor de toekomst :).

ik hou het voorlopig op als cookie bestaat met de juiste data dan access granted anders niet.

nu alleen uitzoeken hoe ik het volgende ga doen. Ik ga wat data van een tabel echo'n en 1 rij met data gaat een link worden naar bijv: index.php?page=raidspreview

het volgende moet gebeuren we zitten op de raids.php pagina
elke raid heeft een link via de tabel data raids ga ik zeggen als link index.php?page=raidspreview[id=1]

en dan op raidspreview page de url checken en de rest van querys eventueel uitvoeren of zeg ik pleur op link click [id1] in een sessie

ik heb nog geen code hiervoor gemaakt omdat ik eerst wil bedenken hoe ik zou moeten beginnen dus sorry als je de weg al kwijt bent :)
 
Wat wil je precies bereiken?

Een pagina waarop specifieke data van een bepaalde raid wordt weergegeven?

Als je de databasestructuur van de juiste velden kunt plaatsen valt er wellicht een voorbeeld te maken :)
 
Nou om het zo te stellen de raids die hij laat zien door een query worden "hyperlinks"

Deze pagina wordt opgevraagd met $GET page= dan je value bijvoorbeeld in mijn inc folder heb ik dan zitten raidpreview.php

als ik een $link value meegeef van bijv de raid ID uit de tabel zegt hij radspreview1.php die bestaat natuurlijk niet -.-

Ik weet dus niet of dit mogelijk is of dat ik gebruik moet maken van sessies in dit geval.

maar zie wel vaak op websites domeinnaam/index.php?page=somethingID=1 bijvoorbeeld

en op de raidspreview.php moet dan iets staan kijk naar de $GET welke " ID " wordt geviewd voer vervolgens een query uit om de gegeven te echoen van de ID.



om het makkelijk te formuleren het moet werken als een post op een forum bijvoorbeeld ik bedoel deze topic heet login script ik klik hierop en zie een zooitje comments werkt inprenciepe hetzelfde.
 
Laatst bewerkt:
PHP:
if(isset($_GET['id']) && ctype_digit($_GET['id'])) {
  // Een id is meegegeven
  $query = "SELECT * FROM tabel WHERE id='". $_GET['id'] ."'";
  $result = mysql_query($query);
  if(!$result) {
    echo 'Er is een fout opgetreden! MySQL zegt: '. mysql_error();
  } else {
    $row = mysql_fetch_assoc($result);
    echo $row['id'];
  }
} else {
  // Niets meegegeven, dus alles weergeven
  $query = "SELECT * FROM tabel";
  $result = mysql_query($query);
  if(!$result) {
    echo 'Er is een fout opgetreden! MySQL zegt: '. mysql_error();
  } else {
    while($row = mysql_fetch_assoc($result)) {
      echo '<a href="?id='. $row['id'] .'>…</a><br />';
    }
  }
}
Zoiets zal het waarschijnlijk worden
 
Aha dit gaat meer richting naar een $GET value {code} en anders maak de links met {de $GET value}

je checkt of er een id is meegegevn zoja {code} zo nee echo de link waar je de id meegeeft. op 1 pagina

misschien werkt dat beter ja. ik dacht zelf meer aan een aparte pagine ervoor. opvolgende pagina is de check misschien wel mogelijk daar ga ik wel even mee stoeien bedankt voor deze code
 
Laatst bewerkt:
ok ben verder gekomen het werkt nu alleen nog met 1 probleempje hier is de code:

PHP:
						 			<?php					 			
						 				
										 	$page = $_GET['page'];
										 	$news = $_GET['news_id'];
										 
										 
										 
										 	if ($page){
										 		
										 		if (!strpos($page,".")&&
										 			!strpos($page,"/")){
										 				
											 			$path = "inc/".$page.".php";
											 			
											 				if(file_exists($path)){
											 			
											 					include($path);
											 			
											 				}else 
											 			
											 					echo "That page does not exists.";
										 			}
									 			
											 		
										 	else {
										 		echo "Not allowed!";
										 		}
										 	}
											 if ($news){
										 		
										 		if (!strpos($news,".")&&
										 			!strpos($news,"/")){
										 				
											 			include "inc/news.php";
											 				
											 				}
									 					
										 			}else echo "No $ GET dus welkom op deze site bla bla ....";
										 											 							 				
						 			?>

Als ik nu op mijn news link klik dan krijg ik wel de informatie te zien die dus in news.php staat maar ik zie ook gelijk de message no $ GET dus welkom bla bla eronder :(

ok dit heb ik zelf alweer opgelost door een else te plaatsen voor de if($news)

zucht..

alleen wel een vraag hoort eigenlijk in de sql forum

kan dit: "SELECT * FROM news WHERE id=$id && * FROM news_comments WHERE news_id=$id && charname FROM profile WHERE news_comments.profile_id=id" ?

of kan ik better met verschillende queries werken?
 
Laatst bewerkt:
Zo zou ik het helemaal niet gaan doen.
Weet je zelf het overzicht nu nog? Ik in ieder geval niet :confused:

Je wilt dat wanneer men op news.php komt een lijstje met nieuws-items te zien krijgt.
Bij elk nieuwsbericht moet je naar het commentaar kunnen.
Dus op news.php ga je controleren op een $_GET['id']

Als een $_GET['id'] bestaat haal je enkel het nieuwsbericht op wat overeenkomt met die ID.

Laat de inhoud van news.php eens zien, dan kunnen we je daarmee helpen.

Die query gaat zo niet werken, wel in een andere vorm maar laten we het stap voor stap aanpakken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan