login  Naam:   Wachtwoord: 
Registreer je!
 Forum

login via database

Offline Dierre - 08/07/2006 13:02
Avatar van DierreMySQL interesse ik heb een login gemaakt via gegevens (lognaam & paswoord) uit een database. Maar wanneer ik een goeie combinatie in geef wordt ik niet doorgestuurd naar mijn beveiligde pagina... en weet niet wat ik verkeerd doe. ik krijg geen enkele parse error, warning of notice... kan iemand me helpen...
hieronder volgt het script...
  1. <?php
  2. include("connectie.php");
  3.  
  4. if(isset($_POST["inloggen"]))
  5. {
  6. $sql = "select * from login where lognaam like '".mysql_real_escape_string($_POST["login"])."'
  7. and paswoord like md5('".mysql_real_escape_string($_POST["paswoord"])."')";
  8. $rs = mysql_query($sql);
  9. if(mysql_num_rows($rs) > 0)
  10. {
  11. $rij = mysql_fetch_array($rs);
  12. $_SESSION["ingelogd"] = $rij["naam"];
  13. header("location: beveiligd.php");
  14. }
  15. }
  16. ?>
  17. <html>
  18. <head>
  19. <title>Untitled Document</title>
  20. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  21. </head>
  22.  
  23. <body>
  24. <div align="center">
  25. <p><font size="+2"><strong>Login pagina </strong></font></p>
  26. </div>
  27. <form name="form1" method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
  28. <table width="50%" border="1" cellspacing="0" cellpadding="0">
  29. <tr>
  30. <td width="20%">Login</td>
  31. <td width="80%"><input type="text" name="login"></td>
  32. </tr>
  33. <tr>
  34. <td width="20%">Paswoord</td>
  35. <td width="80%"><input type="text" name="paswoord"> </td>
  36. </tr>
  37. <tr>
  38. <td>&nbsp;</td>
  39. <td><input type="submit" name="inloggen" value="Inloggen"></td>
  40. </tr>
  41. </table>
  42. </form>
  43. </body>
  44. </html>


TIA
Dierre

37 antwoorden

Gesponsorde links
Offline Bart - 08/07/2006 13:03
Avatar van Bart PHP expert Je moet ob_start() bovenaan zetten ;)
Offline Dierre - 08/07/2006 13:05
Avatar van Dierre MySQL interesse ob_start?
Offline Bart - 08/07/2006 13:06
Avatar van Bart PHP expert php.net: ob_start
Ja die moet onder session_start()
Offline Dierre - 08/07/2006 13:11
Avatar van Dierre MySQL interesse werkt ook niet hoor als ik die ob_start() erbij zet...

en als ik kijk naar mijn $sql variabele, dan zie ik dat zowel mijn paswoord als mijn lognaam ingevuld worden, als je begrijpt wat ik bedoel
Offline Bart - 08/07/2006 13:17
Avatar van Bart PHP expert Misschien lullig vraagje maar:
ob_start(); staat er wil he, en niet ob_start() 
Offline Dierre - 08/07/2006 13:20
Avatar van Dierre MySQL interesse jaja natuurlijk er staat een ; achter hoor
en anders zou ik een parse error krijgen hé, maar ik krijg niets... mijn script loopt goed, maar ik word gewoon niet naar mijn "beveiligde" pagina doorgestuurd, en vind echt de fout niet 
Offline Bart - 08/07/2006 13:21 (laatste wijziging 08/07/2006 13:26)
Avatar van Bart PHP expert zet eens error_reporting(E_ALL); bovenaan je script, HELEMAAL bovenaan onder <?php

Krijg je dan ook een aantal errors?
Offline Dierre - 08/07/2006 13:32
Avatar van Dierre MySQL interesse nee, ik krijg niets van errors te zien, niet als het script gestart wordt en ook niet als ik mijn gegevens ga verzenden door op "inloggen" te klikken...

er moet toch ergens iet verkeerd zijn waardoor mijn login niet werkt hé...
Offline Crazed - 08/07/2006 13:43 (laatste wijziging 08/07/2006 13:44)
Avatar van Crazed PHP interesse Die ob_start is niet nodig omdat er nog geen output is, voordat de headers geset worden. Ik vermoed eerder dat je sql-query geen resultaten ophaalt. Vervang je query eens door hetvolgende en kijk als er een extra foutmelding wordt gegeven:
  1. $sql = "select * from login where lognaam like '".mysql_real_escape_string($_POST["login"])."' and paswoord like md5('".mysql_real_escape_string($_POST["paswoord"])."')" or die(mysql_error());


edit: waarom gebruik je like, en niet gewoon een = ??
Offline Dierre - 08/07/2006 13:48
Avatar van Dierre MySQL interesse als ik nu op verzenden klikt met die mysql_error erbij krijg ik volgende notice te zien

Notice: Undefined index: login in C:\Dieter\XAMMP\xampp\htdocs\crescendo\test site\login.php on line 8
Offline Bart - 08/07/2006 13:50
Avatar van Bart PHP expert Dit komt omdat deze waarschijnlijk niet is ingevuld. Als je een loginscript maakt zul je toch echt een controle hiervoor moeten maken ;)
Offline Dierre - 08/07/2006 14:02 (laatste wijziging 08/07/2006 14:06)
Avatar van Dierre MySQL interesse maar hoe komt het dan dat die niet ingevuld raakt...
ik vind niet echt iets dat ik verkeerd doe... :$

sorry kleine rechtzetting, had verkeerde var gebruikt, ik krijg die fout van login niet... ik word nog steeds gewoon niet doorgestuurd naar mijn beveiligde pagina, maar krijg verder niets te zien...
Offline Rex - 08/07/2006 14:19
Avatar van Rex Nieuw lid Je gebruikt LIKE in je query, dat is geen goed idee.
Offline CDNC - 08/07/2006 14:24 (laatste wijziging 08/07/2006 14:28)
Avatar van CDNC PHP ver gevorderde en ik denk dat het volgnde:
  1. <?
  2. if(isset($_POST["inloggen"]))
  3. {
  4. $sql = "select * from login where lognaam like '".mysql_real_escape_string($_POST["login"])."'
  5. and paswoord like md5('".mysql_real_escape_string($_POST["paswoord"])."')";
  6. $rs = mysql_query($sql);
  7. if(mysql_num_rows($rs) > 0)
  8. {
  9. $rij = mysql_fetch_array($rs);
  10. $_SESSION["ingelogd"] = $rij["naam"];
  11. header("location: beveiligd.php");
  12. }
  13. }
  14. ?>


moet verandert worden naar:
  1. <?
  2. if(isset($_POST["inloggen"])){
  3. $sql = "SELECT * FROM ´login´ WHERE lognaam = '". mysql_real_escape_string($_POST["login"]) ."'
  4. AND paswoord = '" .md5(mysql_real_escape_string($_POST["paswoord"])) ."'";
  5. $rs = mysql_query($sql) or die (mysql_error());
  6. if(mysql_num_rows($rs) == 1){
  7. $rij = mysql_fetch_array($rs);
  8. $_SESSION["ingelogd"] = $rij["naam"];
  9. header("location: beveiligd.php");
  10. }
  11. }
  12. ?>
Offline Dierre - 09/07/2006 23:09 (laatste wijziging 09/07/2006 23:11)
Avatar van Dierre MySQL interesse dat lukt me nog steeds niet hoor ook niet met het script van cdnc... wat is er toch verkeerd hier....  
Offline Ultimatum - 10/07/2006 00:18
Avatar van Ultimatum PHP expert doe het eens anders en druk alleen de login naam in je where en dan met mysql_fetch_array ga je ingevulde wachtwoord controleren met de database voor het doorsturen

anders gebruik een or die(mysql_error()); om te debuggen dan 
Offline Dierre - 10/07/2006 01:11
Avatar van Dierre MySQL interesse die or die(mysql_error()); heb ik erbij gezet en wanneer ik mijn gegevens ga verzenden krijg ik geen fout...

ik heb nu nog een else bij mijn if gezet zodat ik een fout melding krijg als ik niet correct inlog...

zelfs wanneer ik de juiste gegevens in geef en inlog krijg ik die "fout" te zien van mijn else structuur...

blijkbaar worden mijn gegevens niet in mijn variabelen gestopt... 
Offline Gerard - 10/07/2006 01:23 (laatste wijziging 10/07/2006 01:23)
Avatar van Gerard Ouwe rakker
  1. <?php
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['login'], $_POST['paswoord'])) {
  3.  
  4. $qCheckLogin = mysql_query("SELECT naam
  5. FROM login
  6. WHERE lognaam = '" . mysql_real_escape_string($_POST['login']) . "'
  7. AND paswoord = '" . md5($_POST['paswoord']) . "'");
  8.  
  9. if (mysql_num_rows($qCheckLogin) == 1) {
  10.  
  11. $_SESSION['ingelogd'] = mysql_result($qCheckLogin, 0);
  12. header('location: beveiligd.php');
  13.  
  14. }
  15.  
  16. }
  17. ?>


Mag ik je trouwens adviseren om niet te werken met een mengelmoesje van engels/nederlands zoals 'paswoord' en duidelijkere namen te kiezen dan 'lognaam'. Werkt een beetje verwarrend ;x
Offline Dierre - 10/07/2006 11:08
Avatar van Dierre MySQL interesse wat werkt daar verwarrend aan??

paswoord is toch gewoon het paswoord en lognaam... ja daar kan ik mss wel in komen... zal die veranderen naar login
Offline Maarten - 10/07/2006 11:11
Avatar van Maarten Erelid Het is wachtwoord of password, niet passwoord of wachtword 
Offline Dierre - 10/07/2006 11:36
Avatar van Dierre MySQL interesse na nog wat verder gezocht te hebben ben ik tot de constatie gekomen dat:

1) mijn $sql variable (de select dus) de correcte gegevens krijgt vanuit mijn forumuliertje...
maar...
2)dat wanneer ik bv een echo doe van $login (= die van mijn formulier) daar niets blijkt in te zitten...

hoe kan dat???
Offline xSc - 10/07/2006 11:43
Avatar van xSc Onbekend $login is toch een geposte variable? Dan wordt het dus $_POST['login'].

Je HTML-code is verouderd. Ga liever eerst aan de slag met xHTML en CSS alvorens je op PHP stort.

Verder is je loginmodule niet echt veilig. Werk volgens het volgende artikel:

http://www.yapf.net/faq.php/100/190
Offline Dierre - 10/07/2006 11:47
Avatar van Dierre MySQL interesse ik denk wel niet dat mijn html ervoor zal zorgen dat mijn login niet werkt...

een textfield blijft toch een textfield...

ik wil gewoon hebben dat mijn login werkt...
het evt aanpassen van die html kan ik later ook nog wel doen en van xhtml ken ik niets dus...
Offline xSc - 10/07/2006 11:50
Avatar van xSc Onbekend Lol, xHTML ken je niet?

Normaal gesproken werk je in deze volgorde:

- xHTML
- CSS
- JavaScript
- PHP
- MySQL

xHTML en CSS zijn erg belangrijk voor een website. Het is niet alleen netjes, maar zoekrobots hebben er ook baat bij. Het heeft ook een positieve invloed op de positie van de pagina's in de zoekresultaten.

Het is niet goed om alles voorgekauwd te krijgen. Je leert er op deze manier totaal niets van. Wil je een goede scripter worden, probeer dan het dan zelf eerst op te lossen.
Offline Dierre - 10/07/2006 11:54 (laatste wijziging 10/07/2006 11:56)
Avatar van Dierre MySQL interesse ik heb in die volgorde gewerkt, maar toen was het nog gewoon html, css, javascript, php en mysql...

en om dit op te lossen ben ik al 3 weken bezig, gelijk wat ik probeer kom ik op hetzelfde resultaat...

ik probeerde al om mijn tabel opnieuw te maken, mijn script helemaal opnieuw op te bouwen en toch kom ik iedere keer op dezelfde "fout" terecht...
mochten mijn gegevens nu niet uit de db gehaald worden zou ik het nog kunnen begrijpen, maar alles lijkt goed te lopen tot er daadwerkelijk verander moet worden van pagina (naar de beveiligde pagina worden gegaan dus) dat gebeurd langs geen kanten en dat en dat alleen versta ik niet
Offline xSc - 10/07/2006 12:09 (laatste wijziging 10/07/2006 12:15)
Avatar van xSc Onbekend Ik weet niet hoever je nu bent, maar gebruik in dit geval geen LIKE in je queries.

  1. <?php
  2.  
  3. if (!$rLogin = @mysql_query("SELECT id FROM login WHERE gebruikersnaam = '" . mysql_real_escape_string($_POST['sGebruikersnaam']) . "' AND wachtwoord = '" . md5($_POST['sWachtwoord']) . "'"))
  4. {
  5.  
  6. // query is mislukt.
  7.  
  8. }
  9. else
  10. {
  11.  
  12. if (@mysql_num_rows($rLogin) > 0)
  13. {
  14.  
  15. (array) $aLogin = @mysql_fetch_assoc($rLogin);
  16. $aLogin = array_map('stripslashes', $aLogin);
  17.  
  18. $_SESSION['aLogin'] = array();
  19. $_SESSION['aLogin']['iGebruiker'] = $aLogin['id'];
  20.  
  21. // sla ook ip, etc. op. Je hebt meerdere tabellen nodig. O.a. een tabel waarin je loginsessies opslaat.
  22.  
  23. // Heb je alles goed geregistreerd in de sessie, dan mag je naar de beveiligde pagina. Let op: op elke beveiligde pagina controleer je of de persoon nog correct is ingelogd.
  24.  
  25. }
  26. else
  27. {
  28.  
  29. // Combinatie gebruikersnaam / wachtwoord onjuist.
  30.  
  31. }
  32.  
  33. }
  34.  
  35. ?>
Offline Dierre - 10/07/2006 12:15
Avatar van Dierre MySQL interesse ik heb idd ook al eens die like vervangen door =, maar dit geeft me nog steeds hetzelfde resultaat... de overgang naar de beveiligde pagina gaat niet...

wanneer ik dit ga echo'en... zie ik dat mijn login en wachtwoord daadwerkelijk zijn ingevuld...
Waarom stuurt het script me dan niet door naar de beveiligde pagina?


  1. $sql = "select * from login where naam like '".mysql_real_escape_string($_POST["login"])."'
  2. and paswoord like md5('".mysql_real_escape_string($_POST["wachtwoord"])."')";
Offline xSc - 10/07/2006 12:19 (laatste wijziging 10/07/2006 12:25)
Avatar van xSc Onbekend
  1. <?php
  2.  
  3. (string) $sql = "SELECT * FROM login WHERE naam = '" . mysql_real_escape_string($_POST['login']) . "'
  4. AND paswoord = '" . md5($_POST['wachtwoord']) . "'";
  5.  
  6. ?>


Gebruik deze query eens ...

Uitleg: SQLcode schrijf je altijd met hoofdletters, uitgezonderd tabel- en veldnamen. De MD5functie van MySQL kun je beter alleen gebruiken wanneer je een eigen waarde wilt coderen:

Bijv.

SELECT MD5(naam) FROM login WHERE id = 1

Omdat je het wachtwoord codeert, is de functie mysql_real_escape_string() op die plaats niet nodig.

Overige opmerkingen:

Selecteer liever alleen de kolommen die je echt nodig hebt. SELECT * is doorgaans langzamer dan wanneer je de kolommen selecteert, die je wilt gaan gebruiken.

Geef door het eerste teken aan wat voor type variabele het is:

$sNaam = 'Henri'; (string)
$iTeller = 1; (integer)
$rLogin = een resource, bijv. query (resource)
etc.
Offline Dierre - 10/07/2006 12:22
Avatar van Dierre MySQL interesse zelfde resultaat henri...
ik word niet doorgestuurd...
Offline xSc - 10/07/2006 12:26 (laatste wijziging 10/07/2006 12:28)
Avatar van xSc Onbekend Misschien ten overvloede, maar:

Hoe staat het wachtwoord in de database? Staat het wachtwoord gecodeerd in de database, of staat het als platte tekst? In jouw geval zal de laatstgenoemde niet werken, omdat je paswoord vergelijkt met de gecodeerde invoer.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.258s