login  Naam:   Wachtwoord: 
Registreer je!
 Forum

login fout

Offline ottorocket - 13/08/2006 20:55
Avatar van ottorocketOnbekend Ik probeer nu een login te maken voor mijn site, hij is nog niet af, maar ik zit al met een probleem

ik gebruik als naam: W0utah, ik heb geen paswoord ingevuld om te testen of hij wel de melding geeft dat het paswoord niet correct is.

deze error krijg ik altijd:
Citaat:
Er is iets fout in de gebruikte syntax bij '== 'W0utah'' in regel 1


  1. <?php
  2. if(isset($_POST['Login'])) {
  3. $info = mysql_query("SELECT * FROM leden WHERE id >= '1'") or die(mysql_error());
  4. $leden = mysql_fetch_assoc($info);
  5. if($_POST['naam'] == $leden['naam']){ //de naam voorkomt in de database
  6. $paswoord = mysql_query("SELECT paswoord FROM leden WHERE naam == '".$_POST['naam']."'") or die(mysql_error());
  7. if($_POST['paswoord'] != $paswoord['paswoord']) {
  8. echo "<tr><td>Het paswoord komt niet overeen met de coachnaam.</td></tr>";
  9. };
  10. } else { //de naam komt niet voor in de database
  11. echo "<tr><td>De ingevoerde coachnaam is niet bekend in onze database.</td></tr>";
  12. };
  13. }
  14. ?>


als iemand de fout ziet zou het leuk zijn

17 antwoorden

Gesponsorde links
Offline Simon - 13/08/2006 21:06
Avatar van Simon PHP expert sql gebruikt = en niet == 

WHERE naam = '".$_POST['naam']."'"
en niet
WHERE naam == '".$_POST['naam']."'"
Offline Wim - 13/08/2006 21:21
Avatar van Wim Crew algemeen inderdaad Simon.

nog een opmerking: een IF/ELSE constructie moet niet met een ; worden afgesloten. maw verwijder de ; op regel 9 en 12 
Offline ottorocket - 13/08/2006 21:35 (laatste wijziging 13/08/2006 21:51)
Avatar van ottorocket Onbekend nu werkt het wel

2de vraag

nu is het paswoord nooit correct, ik weet niet of ik het paswoord dat in ingetypt heb moet doen met sha1 en md5 of het paswoord van in mijn database, ik denk dat ik het zo goed doe, ziet iemand de fout?

  1. $info = mysql_query("SELECT * FROM leden WHERE id >= '1'") or die(mysql_error());
  2. $leden = mysql_fetch_assoc($info);
  3. if($_POST['naam'] == $leden['naam']){ //de naam voorkomt in de database
  4. $paswoord = mysql_query("SELECT paswoord FROM leden WHERE naam = '".$_POST['naam']."'") or die(mysql_error());
  5. $pw_input = sha1(md5($_POST['paswoord']));
  6. if($pw_input != $paswoord['paswoord']) {
  7. echo "<tr><td>Het paswoord komt niet overeen met de coachnaam.</td></tr>";
  8. } else {
  9. echo "<tr><td>Het paswoord is correct.</td></tr>";
  10. }
Offline roelh - 13/08/2006 21:53
Avatar van roelh PHP gevorderde Ligt eraan.
Heb je hem alleen MD5 in de DB gezet?
Dan alleen met MD5 controleren ;)
Offline ottorocket - 13/08/2006 21:55
Avatar van ottorocket Onbekend ik heb hem in mijn db gezet als sha1(md5())

maar ik zet mijn ingetypt paswoord ook om, maar het is nooit correct
Offline roelh - 13/08/2006 21:58
Avatar van roelh PHP gevorderde Waar haal je pw_input vandaan?
Snap weinig van je script zo op het eerste gezicht.
Post hem helemaal eens op

http://plaatscode.be
Offline Simon - 13/08/2006 22:02 (laatste wijziging 13/08/2006 22:02)
Avatar van Simon PHP expert otto, je hebt vergeten een mysql_fetch_* van je query vergeten 
  1. $paswoord = mysql_query("SELECT paswoord FROM leden WHERE naam = '".$_POST['naam']."'") or die(mysql_error());
  2. $pw_input = sha1(md5($_POST['paswoord']));

moet je veranderen naar:
  1. $qPaswoord = mysql_query("SELECT paswoord FROM leden WHERE naam = '".$_POST['naam']."'") or die(mysql_error());
  2. $paswoord = mysql_fetch_assoc($qPaswoord);
  3. $pw_input = sha1(md5($_POST['paswoord']));
Offline ottorocket - 13/08/2006 22:05
Avatar van ottorocket Onbekend @Simon, bedankt daar zat de fout

nu werkt hij, weeral zo een domme fout
Offline Simon - 13/08/2006 22:11
Avatar van Simon PHP expert toch zou ik een iets andere scriptstijl aannemen 
  1. <?php
  2. $qLid = mysql_query("SELECT COUNT(id), paswoord FROM leden WHERE naam = '" .$_POST['naam']. "'") or die("FOUT bij qLid :" .mysql_error());
  3. if(mysql_result($qLid,0) > 0){ //de naam voorkomt in de database
  4. $aLid = mysql_fetch_assoc($qLid);
  5. if(sha1(md5($_POST['paswoord'])) != $aLid['paswoord']) {
  6. echo "<tr><td>Het paswoord komt niet overeen met de coachnaam.</td></tr>";
  7. } else {
  8. echo "<tr><td>Het paswoord is correct.</td></tr>";
  9. }
  10. }
  11. ?>

*niet getest*
Offline ottorocket - 13/08/2006 23:01
Avatar van ottorocket Onbekend maar waarom zou je tellen hoeveel er voorkomen, als er toch maar 1tje is, volgens mij blijft het hetzelfde als het op mijn manier is
Offline Simon - 14/08/2006 09:15 (laatste wijziging 14/08/2006 09:16)
Avatar van Simon PHP expert Ten eerste, mysql_result is sneller dan mysql_num_rows of in jouw geval assoc (:s).
Ten tweede, zo selecteer je alleen de nodige rijen, wat ook weer sneller gaat.
Ten derde, jij hebt 2 assoc's waar slecht 1 nodig is, allemaal tijdsverlies.
Ten vierde, jouw script zal niet werken, want je fetcht slechts 1 rij uit je database, dus als je 10 leden hebt, kan er maar 1 inloggen, id 2 lijkt mij. Je zou dus moeten een while rond je eerste assoc zetten, wat ook alweer voor vertraging zorgt...

redenen genoeg?
Offline ottorocket - 14/08/2006 11:52 (laatste wijziging 14/08/2006 12:19)
Avatar van ottorocket Onbekend jah, nu wel

EDIT: net getest en het werkt ook

EDIT2: na beter testen was er toch een fout
ik heb het nu zo, als een een naam intypt dat niet bestaat gaat alles goed, maar als je een bestaande naam gebruik loopt het mis
Citaat:
FOUT bij qLid :Het mixen van GROUP kolommen (MIN(),MAX(),COUNT()...) met no-GROUP kolommen is foutief indien er geen GROUP BY clausule is


  1. <?php
  2. if(isset($_POST['Login'])) {
  3. if(strlen($_POST['naam']) < 5) {
  4. echo "<tr><td>Je coachnaam moet minstens 5 letters lang zijn.</td></tr>";
  5. } elseif(strlen($_POST['paswoord']) < 5) {
  6. echo "<tr><td>Je paswoord moet minstens 5 letters lang zijn.</td></tr>";
  7. } else {
  8. $qLid = mysql_query("SELECT COUNT(id), paswoord FROM leden WHERE naam = '" .$_POST['naam']. "'") or die("FOUT bij qLid :" .mysql_error());
  9. if(mysql_result($qLid,0) > 0){ //de naam voorkomt in de database
  10. $aLid = mysql_fetch_assoc($qLid);
  11. if(sha1(md5($_POST['paswoord'])) != $aLid['paswoord']) {
  12. echo "<tr><td>Het paswoord komt niet overeen met de coachnaam.</td></tr>";
  13. } else {
  14. echo "<tr><td>Het paswoord is correct.</td></tr>";
  15. }
  16. } else { //de naam komt niet voor in de database
  17. echo "<tr><td>De ingevoerde coachnaam is niet bekend in onze database.</td></tr>";
  18. }
  19. }
  20. }
  21. ?>
Offline Thomas - 14/08/2006 12:22
Avatar van Thomas Moderator Waarom haal je eerst alle ledengegevens op?

Het is overigens niet gegarandeerd dat het eerste lid wat je ophaalt het lid is wat je zoekt...

Waar is deze code eigenlijk voor bedoeld? Is het om iemand in te schrijven, van iemand de gegevens te updaten of om iemand in te loggen?!

Haal gewoon de gegevens op van het lid waar je gegevens van wilt, en let op MySQL-injections...
Offline ottorocket - 14/08/2006 13:29
Avatar van ottorocket Onbekend fangorn, het scripts is bedoeld om in te loggen, ik haal toch enkel het paswoord op van het lid dat is ingetypt.

Offline Rens - 14/08/2006 13:33
Avatar van Rens Gouden medaille

Crew algemeen
En waarom zou je dat doen?
Wat dacht je er van om het ID op te halen van het lid?
Dus dat je zo'n soort query krijgt:
  1. "SELECT id FROM leden WHERE username='".MySQL_Escape_String($_POST['username'])."' AND password='".md5($_POST['password'])."'";

Als er dan geen id word opgehaald bestaat het lid niet met die gebruikersnaam/wachtwoord combinatie...
Offline Simon - 14/08/2006 16:29 (laatste wijziging 14/08/2006 16:29)
Avatar van Simon PHP expert rensjuh, volgens mij wil hij verschillende foutmeldingen kunnen geven, niet tegelijk
  1. <?php
  2. if(isset($_POST['Login'])) {
  3. if(strlen($_POST['naam']) < 5) {
  4. echo "<tr><td>Je coachnaam moet minstens 5 letters lang zijn.</td></tr>";
  5. } elseif(strlen($_POST['paswoord']) < 5) {
  6. echo "<tr><td>Je paswoord moet minstens 5 letters lang zijn.</td></tr>";
  7. } else {
  8. $qLid = mysql_query("SELECT id, paswoord FROM leden WHERE naam = '" .$_POST['naam']. "'") or die("FOUT bij qLid :" .mysql_error());
  9. if(mysql_num_rows($qLid) > 0){ //de naam voorkomt in de database
  10. $aLid = mysql_fetch_assoc($qLid);
  11. if(sha1(md5($_POST['paswoord'])) != $aLid['paswoord']) {
  12. echo "<tr><td>Het paswoord komt niet overeen met de coachnaam.</td></tr>";
  13. } else {
  14. echo "<tr><td>Het paswoord is correct.</td></tr>";
  15. }
  16. } else { //de naam komt niet voor in de database
  17. echo "<tr><td>De ingevoerde coachnaam is niet bekend in onze database.</td></tr>";
  18. }
  19. }
  20. }
  21. ?>

ik heb je code aangepast via een num_rows ipv result. Ik weet niet hoe je het kan aanpassendat de result ook werkt, maar ik denk zoiets
  1. <?php
  2. if(isset($_POST['Login'])) {
  3. if(strlen($_POST['naam']) < 5) {
  4. echo "<tr><td>Je coachnaam moet minstens 5 letters lang zijn.</td></tr>";
  5. } elseif(strlen($_POST['paswoord']) < 5) {
  6. echo "<tr><td>Je paswoord moet minstens 5 letters lang zijn.</td></tr>";
  7. } else {
  8. $qLid = mysql_query("SELECT COUNT(id) as c, paswoord FROM leden WHERE naam = '" .$_POST['naam']. "'") or die("FOUT bij qLid :" .mysql_error());
  9. if(mysql_result($qLid,"c") > 0){ //de naam voorkomt in de database
  10. $aLid = mysql_fetch_assoc($qLid);
  11. if(sha1(md5($_POST['paswoord'])) != $aLid['paswoord']) {
  12. echo "<tr><td>Het paswoord komt niet overeen met de coachnaam.</td></tr>";
  13. } else {
  14. echo "<tr><td>Het paswoord is correct.</td></tr>";
  15. }
  16. } else { //de naam komt niet voor in de database
  17. echo "<tr><td>De ingevoerde coachnaam is niet bekend in onze database.</td></tr>";
  18. }
  19. }
  20. }
  21. ?>
Offline ottorocket - 14/08/2006 16:33
Avatar van ottorocket Onbekend bedankt, maar ik had al een login van bij scripts gebruikt en deze wat verandert en die werkt
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.454s