[PHP] Registratie form toont formulier velden niet

Pagina: 1
Acties:
  • 720 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste lezer,

Voor een nieuwe pagina zijn we bezig een registratie en inlog systeem aan het opzetten. Alles lijkt goed te gaan alleen toont de PHP code de formulier velden niet, Ik krijg ook geen foutmeldingen om te zien wat er precies mis gaat. Het gaat om de volgende code.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
 
if ($_GET['actie'] == 'registreren') {
// als men zich wil registreren
if ($_GET['versturen'] == 'ja') {
// als formulier reeds is verstuurd
if (empty($_POST['inlognaam'])) {
echo "Je hebt geen inlognaam ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord'])) {
echo "Je hebt geen passwoord ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord_controle'])) {
echo "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
if ($_POST['passwoord'] != $_POST['passwoord_controle']) {
echo "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";
mysql_query($registreer) or die(mysql_error());
echo "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om in te kunnen loggen.";
}
}
} else {
// als formulier nog niet is verstuurd, toon registratieformulier
?>

<?php 

echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=registreren\" method=\"post\"> 
<table> 
<tr><th colspan=\"2\">Registreren</th></tr> 
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr> 
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr> 
<tr><td>Passwoord <small>(controle)</small></td><td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td></tr> 
<tr><td></td><td><input type=\"submit\" value=\"Registreer\"></td></tr> 
</table></form>"; 

}

}
?>


Mogelijk heb ik toch (bij het aanpassen) van dit script fouten gemaakt in het onderste deel, dus het formulier. Als iemand weet wat ik precies fout heb gedaan, of er meerdere fouten in dit script zitten. Dan hoor ik het graag. Voorlopig zie ik me toch nog steeds als PHP newbie.

Met vriendelijke groet,
Sang-Hyun

Acties:
  • 0 Henk 'm!

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Ten eerste: zet de code eens tussnen de [ code=php ] en [ /code ] tags (zonder spaties uiteraard).

Maar het is toch logisch dat er geen foutmeldingen te zien zijn: je form action staat op de actie = "registreren". Alle controles staan binnen de if $_GET['versturen'] == 'ja' en ik zie nergens dat die GET waarde wordt gezet dus kan het script nooit in die if komen.

[ Voor 8% gewijzigd door Mafkees op 25-01-2007 12:36 ]


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Als je code post kan je dit beter tussen [ code=php ] en [ /code ] tags zetten; krijg je er gratis highlighting bij :)

Wat heb je zelf al gedaan om te debuggen ? Komt het script bijvoorbeeld überhaupt wel bij de "else" terecht ?

:w Mafkees :)

[ Voor 3% gewijzigd door TheRookie op 25-01-2007 12:39 ]


Acties:
  • 0 Henk 'm!

  • DoDo
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:22
Tags zowiezo, de code onderaan is wel goed. Als je je ifjes e.d even in blokken indeelt is het een stuk makkelijker te lezen

Acties:
  • 0 Henk 'm!

Verwijderd

Print al je get en post variablen eens af, ookwel bekend als debuggen.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Zie al het commentaar hierboven dus :)

Als je wat extra informatie wilt geven over wat er nu prcies mis gaat en wat je nu zelf al hebt geprobeerd om dat op te lossen dan graag. We verwachten hier dat je zelf aan de slag gaat met het probleem en dat je ook aangeeft welke zaken je nu al hebt geprobeerd Zie ook Programming Beleid en dan met name Programming Beleid - De Quickstart
Uit je post nu kunnen we die informatie niet halen en op mij komt het over als "ik wil dit, dit is mijn code, please fix" en dat is hier nu net niet de bedoeling ;)

[ Voor 9% gewijzigd door Creepy op 25-01-2007 12:57 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Misschien dat het toch niet erg verstandig was dit script aan te passen. Zag het ergens staan op een PHP script. Waarschijnlijk is er dus geen output of input waarde. Dan maar zoeken daar een ander script. Ik snap wel dat het niet de bedoeling is scripten te fixen. Da's wel logisch.

Acties:
  • 0 Henk 'm!

Verwijderd

Zet even tabs tussen je acolades.

Dus:
PHP:
1
2
3
4
5
6
7
8
9
if(1=1) {

   if(1=1) {

      // enzovoort

   }

}


Al programmeer je op deze manier is het een stuk makkelijker om een bug te vinden. Je code ziet er nu zo verwarrend uit dat ik niet 123 kan zeggen welke acolade bij welk if statement hoort.

Overgens raad ik je aan om een single quote te gebruiken, dan hoef je niet elke keer de dubbele quotes te escapen. (dus echo'<a href="blaat.html">'; ipv echo"echo<a href=\"blaat.html\">";)

Me baas is er niet, dus hier je script met tabs :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
 
if ($_GET['actie'] == 'registreren') {

    // als men zich wil registreren
    if ($_GET['versturen'] == 'ja') {
    
        // als formulier reeds is verstuurd
        if (empty($_POST['inlognaam'])) {
        
            echo "Je hebt geen inlognaam ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
            
        } elseif (empty($_POST['passwoord'])) {
        
            echo "Je hebt geen passwoord ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
            
        } elseif (empty($_POST['passwoord_controle'])) {
        
            echo "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
            
        } else {
        
            if ($_POST['passwoord'] != $_POST['passwoord_controle']) {
            
                echo "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
        
            } else {
            
                $registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";
                mysql_query($registreer) or die(mysql_error());
                echo "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om in te kunnen loggen.";
            
            }
            
        }
    } else {
        // als formulier nog niet is verstuurd, toon registratieformulier
        ?>

        <?php 

        echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=registreren&versturen=ja\" method=\"post\"> 
        <table> 
            <tr>
                <th colspan=\"2\">Registreren</th>
            </tr> 
            <tr>
                <td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td>
            </tr> 
            <tr>
                <td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td>
            </tr> 
            <tr>
                <td>Passwoord <small>(controle)</small></td><td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td>
            </tr> 
            <tr>
                <td></td>
                <td><input type=\"submit\" value=\"Registreer\"></td>
            </tr> 
        </table>
        </form>"; 

    }

}
?>


Ik heb overgens else if naar elseif veranderd. Dit kan mischien wel de reden zijn? Het kan best zijn dat het wel kan hoor, maar in de 2 jaar dat ik PHP code heb ik altijd elseif aan elkaar gebruikt.

Edit no 03.. ~_~
Een van je GET Variable checks zal nooit werken als je &versturen=ja niet achter je form action plakt. :).. Ik edit het wel even in de code hierboven.

En je kan de pagina sowieso pas openen als je ?actie=registreren achter de url hebt. Anders heb je een lege pagina.

[ Voor 74% gewijzigd door Verwijderd op 25-01-2007 16:45 ]


Acties:
  • 0 Henk 'm!

  • thisbeingme
  • Registratie: Oktober 2002
  • Laatst online: 06-05-2021
Dit scriptje is trouwens zeer makkelijk te kraken met SQL injection!
PHP:
1
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";

Als je bovenstaande regel vervangt met bijvoorbeeld het volgende
PHP:
1
2
3
$inlognaam = mysql_escape_string($_POST['inlognaam']);
$passwoord= mysql_escape_string($_POST['passwoord']);
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$inlognaam."', '".$passwoord."')";

dan is het probleem opgelost :)

Meer over SQL Injection

@ZktaS: Of je nu else if of elseif gebruikt maakt in PHP volgens mij weinig uit :)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Even offtopic.. Je slaat wachtwoorden unencrypted op? Vertel me even welke site het om gaat, dan ga ik me daar iig nooit registreren. Of misschien dat er iemand zich dan geroepen voelt even te gaan klieren met het bovengenoemde SQL injection, om zo al je wachtwoorden te krijgen. Je zou er goed aan doen om ook hier iets mee te doen.
Kijk bijvoorbeeld eens hier.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

het is dat ik me verveelde :O , en tegen beterweten en de forum regels in, hier is je code

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php

$php_self   = $_SESSION['PHP_SELF']; // hier kun je ook het php-document handmatig instellen als PHP_SELF soms happert.
$reply      = "";                    // het antwoord wat weer terug naar de browser gaat.
    
    // handige, simpele string checker.
    function is_str($string)
    {
     if(is_string($string)) AND (strlen($string) > 0)){
      return true;
     }else{
      return false;
     }
    }

 // is er een actie om te registreren.
if((isset($_GET['actie'])) AND ($_GET['actie'] == 'registreren')){
     // is dit het antwoord van het registratie formulier
    if((isset($_GET['versturen'])) AND ($_GET['versturen'] == 'ja')){
        
         // controlleer of er een loginnaam is ingevuld.        
        if((!isset($_POST['inlognaam'])) OR (!is_str($_POST['inlognaam']))){
         $reply = "Je hebt geen inlognaam ingevuld, <a href=\"".$php_self."?actie=registreren\">Probeer nogmaals</a>.";
        
         // controlleer of er een wachtwoord is ingevuld.
        }elseif((!isset($_POST['passwoord'])) OR (!is_str($_POST['passwoord']))){
         $reply = "Je hebt geen passwoord ingevuld, <a href=\"".$php_self."?actie=registreren\">Probeer nogmaals</a>.";
        
         // controller of er een controle password is ingevuld.
        }elseif((!isset($_POST['passwoord_controle'])) OR (!is_str($_POST['passwoord_controle']))){
         $reply = "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$php_self."?actie=registreren\">Probeer nogmaals</a>.";   
        }
        
         //kijk of passwords kloppen.
        if($_POST['passwoord'] != $_POST['passwoord_controle']){
         $reply = "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$php_self."?actie=registreren\">Probeer nogmaals</a>.";
        }else{
          // bereid het wachtwoord en de login naam voor.
         $inlognaam = mysql_escape_string($_POST['inlognaam']);
         $passwoord = mysql_escape_string(md5($_POST['passwoord']));
                
             // bouw de sql query en voer hem uit.
            $sql = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$inlognaam."', '".$password."')";
            if(mysql_query($sql) !== false){
             $reply = "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$php_self."\">hier</a> om in te kunnen loggen.";
            }else{
             $reply = "Er ging iets fout bij het invoegen van uw gegevens. Hieronder de foutmelding.<br>".mysql_error()."";
            }
        }
    }else{
     // als formulier nog niet is verstuurd, bouw registratieformulier als reply
     $nl    = "\r\n    ";   // voeg hierachter de nodige spaties aan toe, om de formulier code verder van de kant te krijgen.
     $reply = "".$nl.
        "<form action=\"".$php_self."\" method=\"post\">".$nl. 
        " <table>".$nl.
        "     <tr>".$nl.
        "         <th colspan=\"2\">Registreren</th>".$nl.
        "     </tr>".$nl.
        "     <tr>".$nl.
        "         <td>Inlognaam</td>".$nl.
        "         <td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td>".$nl.
        "     </tr>".$nl.
        "     <tr>".$nl.
        "         <td>Passwoord</td>".$nl.
        "         <td><input type=\"password\" name=\"passwoord\" size=\"15\"></td>".$nl.
        "     </tr>".$nl.
        "     <tr>".$nl.
        "         <td>Passwoord <small>(controle)</small></td>".$nl.
        "         <td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td>".$nl.
        "     </tr>".$nl.
        "     <tr>".$nl.
        "         <td></td>".$nl.
        "         <td><input type=\"submit\" value=\"Registreer\">".$nl.
        "             <input type=\"hidden\" name=\"actie\" value=\"registreren\">".$nl.
        "             <input type=\"hidden\" name=\"versturen\" value=\"ja\">".$nl.
        "         </td>".$nl.
        "     </tr>".$nl.
        " </table>".$nl.
        "</form>".$nl;
    }
 
 echo($reply);
}
?>


ik heb het niet getest, dat mag jij doen, zo leer je mischien toch nog wat. 8)
Pagina: 1