Formulier niet consequent

Status
Niet open voor verdere reacties.

Anbert

Gebruiker
Lid geworden
24 nov 2006
Berichten
29
Een formulier op mijn site www.hoeikaangeld.com reageert vreemd. Ik heb de code hieronder neergezet. Er staan een paar echo's in die overbodig zijn om mij even te helpen. Vul ik niets in het veld wachtwoord dan geeft hij keurig ongelding wachtwoord. Dan doe ik een letter a en ik krijg via de echo NOSUBMIT terug. Hij ziet dus niet dat het formulier verzonden in. Dan vul ik weer niks in en gaat het goed. Dan mijn echte wachtwoord en weer NOSUBMIT, daarna weer een a en weer NOSUBMIT. Zo ga ik een tijd door en het is elke keer weer aanders... Wie heeft er tips? Of ziet misschien zelfs wel de fout!?

Hier de code bovenin de pagina die het formulier afhandeld

Code:
<?

$query = ("SELECT ip FROM `gebruikers` WHERE ID = '" .$_SESSION['id'] ."'");
$result = mysql_query($query) or die ($query ."<BR>" .mysql_error());
$data = mysql_fetch_array($result);

if ($data['ip'] <> $_SERVER['REMOTE_ADDR']) { exit('Session hijack of dubbel ingelogt via ander netwerk.'); }

if (IsSet($_POST['submit'])) { 
	
	echo "Submit     : " .$_POST['submit'] ."<BR>";
	echo "Wachtwoord : " .md5($_POST['wachtwoord']) ."<BR>";
	
	$query = "SELECT wachtwoord FROM `gebruikers` 
			  WHERE id = '" .$_SESSION['id'] ."'";
	
	$result = mysql_query($query) or die ($query ."<BR>" .mysql_error());
	$data = mysql_fetch_array($result);
	
	echo "Check      :  " .$data['wachtwoord'] ."<BR>";
	
} else {

	echo "NoSubmit   : " .$_POST['submit'] ."<BR>";

}

?>

En hier het formulier zelf

Code:
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">
                
                <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
                  <tr>
                    <td height="1" colspan="3" bgcolor="#EFE7C6"><img src="../images/spacer.gif" width="1" height="1" /></td>
                  </tr>
                  <tr>
                    <td width="1" bgcolor="#EFE7C6"><img src="../images/spacer.gif" width="1" height="1" /></td>
                    <td width="336"><table width="100%" border="0" cellspacing="2" cellpadding="2">
                      <tr>
                        <td height="75" colspan="2" align="center" bgcolor="#F3F1DE">
                        Vul je wachtwoord in ter bevestiging<br />
                        <BR />
						<? echo ('<b><font color="FF0000">' .$doorgaan .'</font></b>'); ?></td>
                        </tr>
                      <tr>
                        <td align="left" bgcolor="#F3F1DE">Wachtwoord</td>
                        <td align="left" bgcolor="#F3F1DE">
                        <input name="wachtwoord" type="password" maxlength="16" /></td>
                      </tr>
                      <tr>
                        <td colspan="2" align="center" bgcolor="#F3F1DE">
                        <input type="submit" name="submit" value="Doorgaan" /> 
                        <br />
                        <a href="../index.php">Annuleren</a> </td>
                        </tr>
                    </table></td>
                    <td width="1" bgcolor="#EFE7C6"><img src="../images/spacer.gif" width="1" height="1" /></td>
                  </tr>
                  <tr>
                    <td height="1" colspan="3" bgcolor="#EFE7C6"><img src="../images/spacer.gif" width="1" height="1" /></td>
                  </tr>
                </table>
                </form>
 
Beste Anbert,

De fout die je omschrijft heeft wat rare symtomen en ik zie niet direct de fout. Ik zie wel een aantal punten waar je even naar kunt kijken of dat het oplost:

- isSet is incorrect. PHP is case sensitive. Code zou isset() moeten zijn. (http://nl3.php.net/manual/nl/function.isset.php). Sommige servers accepteren het (:confused::confused::confused:) maar sommige geven ook een fout (bijvoorbeeld false als return).

Je hebt in je uitleg staan dat je "ongeldig wachtwoord" terug krijgt. Maar dat is niet in je code beschreven. Als je "nosubmit" bedoeld, dan zit het probleem hem waarschijnlijk in bovenstaande. Als je ergens anders in je script "ongeldig wachtwoord" laat verschijnen dan heb je kans dat je het $_POST variable bewerkt hebt en daarmee de isset($_POST..) een false laat retouneren.

Ik zou in ieder geval je isSet aanpassen. Lost dat niet het probleem op, post dan even het gehele relevante deel van je pagina (tussen tags ipv ).

Succes!

Wout
 
Beste Anbert,

<KNIP>

- isSet is incorrect. PHP is case sensitive. Code zou isset() moeten zijn. (http://nl3.php.net/manual/nl/function.isset.php). Sommige servers accepteren het (:confused::confused::confused:) maar sommige geven ook een fout (bijvoorbeeld false als return).

<KNIP>

Ik zou in ieder geval je isSet aanpassen. Lost dat niet het probleem op, post dan even het gehele relevante deel van je pagina (tussen tags ipv ).

Succes!

Wout

Ik gebruik IsSet nog op andere formulieren zonder problemen en het maakt ook geen verschil. Voor de netheid heb ik het wel even overal aangepast. Maar ik ben wel achter iets anders gekomen. Er zit verschil in of ik op de DOORGAAN knop druk of een enter geef na het invullen van het formulier??? Op de knop drukken en het gaat prima maar een enter geven doet niks meer dan de pagina opnieuw laden zonder de gegevens van het formulier door te sturen. Als ik klompen aan had....
 
PHP:
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">

Dit werkt wellicht niet =)
Als je de pagina geopend hebt, zou je dan de broncode (dus html) kunnen pasten.. misschien maakt dat ook meer duidelijk...

Hiernaast zou ik <?php en ?> gebruiken ipv <? en ?> maakt ook verschil uit in sommige php-servers.

je form moet denk ik zijn
PHP:
<form action="<?php echo "$_SERVER['PHP_SELF']" ?>" method="post">


je maakt hoop ik wel gebruik van session_start() bovenaan je site? vanwege de session-waardes =)
 
PHP:
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post">

Dit werkt wellicht niet =)
Als je de pagina geopend hebt, zou je dan de broncode (dus html) kunnen pasten.. misschien maakt dat ook meer duidelijk...

Hiernaast zou ik <?php en ?> gebruiken ipv <? en ?> maakt ook verschil uit in sommige php-servers.

je form moet denk ik zijn
PHP:
<form action="<?php echo "$_SERVER['PHP_SELF']" ?>" method="post">


je maakt hoop ik wel gebruik van session_start() bovenaan je site? vanwege de session-waardes =)

session_start() staat er. En ik weet zeker dat de server ook de korte tag <? en ?> pakt, veranderen maakt het ook niet beter. Maar jou stukje code resulteert in een mooie witte pagina en de volgende regel in de errorlog

PHP Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING.

Ik heb er maar "...en klik op doorgaan" bij gezet... :confused:
 
KEK

mijn fout =)

PHP:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">

macht der gewoonte, excuses =)
 
Beste Anbert,

Forms lijken soms rare elementen. Hieronder even de reference van het Form element (toepasbaar op HTML4.0 en XHTML Strict/Trans. (ik dacht dat ik die al gegeven had, maar dat was blijkbaar een andere thread :p).

http://www.w3.org/TR/html4/interact/forms.html#h-17.13.2

De eigenschap van input is dat de browser bepaald of de waarde wel of neit mee gestuurd worden. De eigenschap van een submit button is dat zijn eigenschappen enkel worden meegestuurd wanneer betreffende submit button gebruikt is om het formulier op te slaan. In jou geval gebruik je de textbox om het formulier te submitten. In dat geval heb je de submit button niet gebruikt, en wordt hij niet mee gestuurd.

Opties:
- check of er uberhaubt een $_POST is. (if(count($_POST)!=0))
- check op een input variabel dat sowieso meegestuurd wordt. Bijvoorbeeld van een text element. (if(isset($_POST["text-element"])));

Succes

Wout
 
Laatst bewerkt:
Beste Anbert,

Forms lijken soms rare elementen. Hieronder even de reference van het Form element (toepasbaar op HTML4.0 en XHTML Strict/Trans. (ik dacht dat ik die al gegeven had, maar dat was blijkbaar een andere thread :p).

http://www.w3.org/TR/html4/interact/forms.html#h-17.13.2

De eigenschap van input is dat de browser bepaald of de waarde wel of neit mee gestuurd worden. De eigenschap van een submit button is dat zijn eigenschappen enkel worden meegestuurd wanneer betreffende submit button gebruikt is om het formulier op te slaan. In jou geval gebruik je de textbox om het formulier te submitten. In dat geval heb je de submit button niet gebruikt, en wordt hij niet mee gestuurd.

Opties:
- check of er uberhaubt een $_POST is. (if(count($_POST)!=0))
- check op een input variabel dat sowieso meegestuurd wordt. Bijvoorbeeld van een text element. (if(isset($_POST["text-element"])));

Succes

Wout

Ik zal eens ff goed gaan lezen. Als ik op doorgaan klik is de count 2 en op enter 1. Dit verklaart wel het probleem dat ik heb. Maar nu de oplossing nog. Vreemd dat ik dit nog nooit gemerkt heb met mijn andere formulieren.
 
KEK
mijn fout =)
PHP:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
macht der gewoonte, excuses =)

Ik vond het er al raar uitzien, maar ik dacht er niet aan om zelf even na te denken :rolleyes:
Dit is ongewijfelt een nettere manier maar op de server die ik gebruik werkt de andere notaties denk ik net zo goed, het maakt in ieder geval geen verschil. Ik zal eens kijken of ik ergens kan vinden wat het verschil is op het geven van een ENTER of op de SUBMIT knop duwen. (zie vorige post)
 
Anbert,

Zoals ook al vermeld in vorige post:

Wanneer je Enter drukt als je in het password veld staat, dan activeer je de submission met dat veld. De submit button is dan niet gebruikt, en hoeft dan dus niet worden meegestuurd.

Als verklaring van dat het soms wel werkt:
Alle oude IE versies en FF gaven altijd de eerst voorkomende submit button door, tenzij er een andere submit button gebruikt was om het geheel op te slaan. IE7 doet dat neit meer, die stuurt nog enkel de submit button mee als die ook echt geklikt is. En dat is hij niet als je op Enter drukt.

Snap?

En de oplossing zoals vermeld:
- check of er uberhaubt een post is. Als count($_POST) gelijk is aan 0, dan is er geen formulier gepost.
- check of er een invulveld is verstuurd. isset($_POST["password"])

Wout
 
Anbert,

Zoals ook al vermeld in vorige post:

Wanneer je Enter drukt als je in het password veld staat, dan activeer je de submission met dat veld. De submit button is dan niet gebruikt, en hoeft dan dus niet worden meegestuurd.

Als verklaring van dat het soms wel werkt:
Alle oude IE versies en FF gaven altijd de eerst voorkomende submit button door, tenzij er een andere submit button gebruikt was om het geheel op te slaan. IE7 doet dat neit meer, die stuurt nog enkel de submit button mee als die ook echt geklikt is. En dat is hij niet als je op Enter drukt.

Snap?

En de oplossing zoals vermeld:
- check of er uberhaubt een post is. Als count($_POST) gelijk is aan 0, dan is er geen formulier gepost.
- check of er een invulveld is verstuurd. isset($_POST["password"])

Wout

Snap! Tijd om mijn formuliertjes ff blij langs te lopen. Ik werk op verschillende computers en ook één met FF. Dit alles bij elkaar gaf de complete "onlogica" en bevestigt maar weer dat, ondanks die leuke pagina van mij, ik nog een enorme newbee ben. :p

Idereen bedankt voor de reacties!!! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan