Vraag & Antwoord

Webprogrammeren & scripting

[PHP] Waarde nooit geldig terwijl dit wel zou moeten zijn

28 antwoorden
  • Ik heb de volgende code in elkaar gezet voor een formuliertje die na ingevuld te zijn naar een mysql database gaat. Om te zorgen dat alle velden ingevuld worden heb ik er een controle opgezet, alleen werkt die vreemd genoeg niet. Dit is de code: [code:1:8fa6173644] <?php if (isset($naam) && isset($naam) && isset($eten )){ $dberror = ""; $ret = add_to_database($naam, $plaats, $eten); if ( ! $ret ){ print "Error"; }else{ print "Hoi $naam! Hierbij heb je je opgegeven voor de volgende wandeling! Tot dan!"; } }else{ write_form(); } function add_to_database($naam, $plaats, $eten){ $user = "naam"; $pass = "paswoord"; $db = "database"; $link = mysql_connect("localhost",$user,$pass); if ( ! $link ){ $dberror = "Couldnt connect to MySQL server"; return false; } if ( ! mysql_select_db( $db, $link ) ) { $dberror = mysql_error(); return false; } $query = "INSERT INTO wzwagenda (naam, plaats, eten) values('$naam','$plaats','$eten')"; if ( ! mysql_query( $query, $link ) ){ $dberror = mysql_error(); return false; } return true; } function write_form(){ global $PHP_SELF; print "<form action=\"$PHP_SELF\" method=\"POST\">\n"; print "<input type=\"text\" name=\"naam\"> "; print "Naam<p>\n"; print "<input type=\"text\" name=\"plaats\"> "; print "Woonplaats<p>\n"; print "<input type=\"text\" name=\"eten\"> "; print "Eten<p>\n"; print "<input type=\"submit\" value=\"Meld je aan!\">\n</form>\n"; } ?> [/code:1:8fa6173644] De bedoeling is dat het volgende stukje code de tekst "error" print als er een veld niet ingevuld is. Vreemd genoeg ziet het script alleen maar dat alles ingevuld is, ook als dit niet zo is. Waar zit de fout??? Na een dag bezig geweest te zijn kan ik niks meer bedenken... [code:1:8fa6173644] if ( ! $ret ){ print "Error"; }else{ print "Hoi $naam! Hierbij heb je je opgegeven voor de volgende wandeling! Tot dan!"; } }else{ write_form(); } [/code:1:8fa6173644]
  • das raar, ik krijg nl telkens alleen maar t formulier te zien. Wanneer ik toevoeg aan t begin [code:1:42a3c15fcb]$naam = $_POST['naam']; $eten = $_POST['eten']; $plaats = $_POST['plaats'];[/code:1:42a3c15fcb] doet ie t wel :wink: NB: ik denk dat je [code:1:42a3c15fcb]if (isset($naam) && isset($naam) && isset($eten )){[/code:1:42a3c15fcb] wilt veranderen in [code:1:42a3c15fcb]if (isset($naam) && isset($plaats) && isset($eten )){[/code:1:42a3c15fcb]
  • Maar helaas werkt de controle nog niet. Als ik 1 of meerdere velden niet invoer wordt de data nog steeds in de database weggeschreven. Wat je 2e punt; inderdaad, dat moest 'plaats' zijn i.p.v. 'naam'. :)
  • Postdata is nooit null dus is isset() in je eerste geval altijd True. Met de toevoeging van marientje set je de variabele (evt. dus op '') dus geeft isset() ook True terug. Ik check postdata zelf altijd op = '' of <> '' en ik doe de fout-situaties eerst, dus omgekeerd tov wat jij nu doet: [code:1:09ffbb21f3] if ($naam == '' || &plaats == '' || $eten == '') { write_form() } else { $dberror = ""; $ret = add_to_database($naam, $plaats, $eten); if ( ! $ret ){ print "Error"; } else{ print "Hoi $naam! Hierbij heb je je opgegeven voor de volgende wandeling! Tot dan!"; } } [/code:1:09ffbb21f3] En dan zou ik zelf niet een nieuw leeg form schrijven, maar een form met de evt. al wel ingevulde waarden, bijv: [code:1:09ffbb21f3] print "<input type=\"text\" name=\"naam\" value=\"" . addSlashes($naam) . "\"> "; [/code:1:09ffbb21f3]
  • Ik heb het meteen even getest, maar krijg nu een parse error op line 7. Dat is de line: [code:1:9b973a74c3] if ($naam == '' || &plaats == '' || $eten == '') { [/code:1:9b973a74c3] Ik zie niks geks staan eerlijk gezegd... De eerste regels zijn nu: [code:1:9b973a74c3] <?php $naam = $_POST['naam']; $eten = $_POST['eten']; $plaats = $_POST['plaats']; if ($naam == '' || &plaats == '' || $eten == '') { write_form() } else { $dberror = ""; $ret = add_to_database($naam, $plaats, $eten); if ( ! $ret ){ print "Error"; } else{ print "Hoi $naam! Hierbij heb je je opgegeven voor de volgende wandeling! Tot dan!"; } }else{ print "<input type=\"text\" name=\"naam\" value=\"" . addSlashes($naam) . "\"> "; } [/code:1:9b973a74c3] Complimenten voor de tweede toevoeging, erg mooi!
  • Ik heb per ongeluk &plaats ipv $plaats getypt :oops:
  • Tsjonge, ik heb daar eerlijk gezegd ook dwars overheen gekeken. Maar ehhh... in regel 9 staat dat niet en krijg ik ook een parse error. :)
  • Oh, en ik bedoelde die toevoeging juist in de functie write_form(), niet in je hoofdroutine, en dan bij alle velden.
  • Laat maar, ik snap al wat je met die hoofdroutine bedoelt. De vele uurtjes php'en beginnen te tellen... ;)
  • Je hebt nu if {} else {} else {} en dat kan niet.
  • Nee, ik bedoel: [code:1:18573bd783] <?php $naam = $_POST['naam']; $plaats = $_POST['plaats']; $eten = $_POST['eten']; if ($naam == '' || $plaats == '' || $eten == '') { write_form() } else { $dberror = ""; $ret = add_to_database($naam, $plaats, $eten); if ( ! $ret ){ print "Error"; } else{ print "Hoi $naam! Hierbij heb je je opgegeven voor de volgende wandeling! Tot dan!"; } function write_form(){ global $PHP_SELF; print "<form action=\"$PHP_SELF\" method=\"POST\">\n"; print "<input type=\"text\" name=\"naam\" value=\"" . addSlashes($naam) . "\"> "; print "Naam<p>\n"; print "<input type=\"text\" name=\"plaats\" value=\"" . addSlashes($plaats) . "\"> "; print "Woonplaats<p>\n"; print "<input type=\"text\" name=\"eten\" value=\"" . addSlashes($eten) . "\"> "; print "Eten<p>\n"; print "<input type=\"submit\" value=\"Meld je aan!\">\n</form>\n"; }[/code:1:18573bd783]
  • Oké, waar kan je bonuspunten aan iemand toekennen op dit forum! :) Het werkt nu perfect! Kan ik na een dag php'en eindelijk gaan gerust gaan maffen. :lol:
  • You're welcome :-)
  • weet niet of t nog nodig is, maar die parse error op line 9 is omdat je een ';' vergeten bent :wink:
  • Toch nog een klein dingetje...de reeds ingevulde waarden komen toch niet terug... Ik kan zelf niet vinden waarom want tot zover ik het kan beoordelen zouden ze toch echt in de velden ingevuld moeten worden. :-? Heb je nog tips? :)
  • Ja :-) Kwam in een andere topic tegen dat je addslashes met kleine letters moet typen, die hoofdletter S klopt denkt ik niet, dus wordt naar een niet bestaande functie addSlashes() verwezen. Moet zijn: print "<input type=\"text\" name=\"naam\" value=\"" . addslashes($naam) . "\"> "; @marientje: voor een } hoef ik in javascript (en css for that matter) niet per se een ; te zetten, weet niet of php daar over valt, leek mij niet.
  • Helaas...werkt ook niet.
  • Hmm, bij mij wel. Ook met addSlashes... (dus met hoofdletter), ik heb hier php versie 4.3.10. Kan iemand anders hier nog iets zinnigs over zeggen? Nadeel is wel, zie ik, dat ' in \' wordt veranderd, terwijl alleen " in \" moet worden veranderd (anders klopt de instructie niet meer), is daar een andere functie voor, iets als de Replace() die ik in ASP altijd gebruik?
  • Misschien ook handig om te weten dat ik PHP 4.3.4 heb. Ik heb het getest met zowel opera als ie.
  • Pff, ik zit hier ff wat te testen, maar ik krijg het ook niet lekker lopen, ik heb de functie str_replace() gevonden, maar daarmee kom ik niet verder, mijn postdata lijkt al binnen te komen met \ erin... mijn php-kennis schiet tekort, sorry.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.