18 berichten aan het bekijken - 1 tot 18 (van in totaal 18)
  • Q:
    Bijdrager
    Damio

    Buttonteller (PHP) [OPGELOST]

    Hallo,

    Ik ben PHP aan het aanleren. Nu wil het dat ik aan het proberen ben om een tellertje te maken, dat iedere keer als je op een knop drukt, één aan een variabele toevoegt. Dit werkt alleen nog niet zoals ik wil dat het werkt. Het werkt een keer, ik heb erin gezet dat als er nog niet is geklikt echo “Er zijn nog geen katten geteld” wordt uitgevoerd. En dit zie ik ook keurig. Als ik daarna klik zie ik ook zoals het hoort een ‘1’ verschijnen. Maar als ik daarna nogmaals klik, krijg ik nog steeds de ‘1’. Weet iemand wat ik fout doe (zie code)?

    Groetjes Max

    <br />
    <body><br />
    <form method="POST"><br />
    <input type="submit" name="verzend" value="Ik heb een kat geteld!"><br />
    </form><br />
    <?php</p>
    <p>	if($_POST == "Ik heb een kat geteld!"){<br />
    		$katten++;<br />
    	}<br />
    	else if($katten == 0){<br />
    		echo "Er zijn nog geen katten geteld";<br />
    	}<br />
    	else{<br />
    		echo "Er is een fout opgetreden bij de verzending...";<br />
    	}<br />
    	echo $katten;</p>
    <p>	?><br />
    </body><br />
     

    Ik heb de <html> en de <head> tags weggelaten…
    Bekijk het hier
    Ik werk vanzelfsprekend in Xcode.

    Bijdrager
    Lifelogger

    PHP is server side. Als je telkens de pagina herlaad na een druk op de knop, ben je je variabele kwijt. Dus $katten is telkens weer 0. Maar omdat je knop geregistreerd wordt met een klik, zie je telkens een 1.

    Bijdrager
    Damio

    Ah, zo. Dat het server-side werkte wist ik al. Dus dan zou ik die variabele ergens moeten opslaan. In een bestandje ofzo? Of kan PHP dat voor mij doen?
    Btw, bedankt voor je snelle reactie;-)
    Edit: Kan ik hier iets mee: http://www.webmasterstart.nl/php/basiscursus-php-10-12-sessies.html

    Bijdrager
    Lifelogger

    Ja, je zou de variabele afhankelijk van hoelang je het wilt bewaren ergens moeten opslaan. Je kan er dan voor kiezen dat in een bestandje te doen of weg te schrijven naar een database.

    Een sessie kan ook prima. Maar hier geld ook weer voor dat als iemand zijn browser sluit of de sessietijd is voor maar bijvoorbeeld een uur ingesteld, dat het dan ook weer weg is. Een sessie blijft niet bestaan.

    Bijdrager
    Damio

    Ik ben er alleen nog niet achter hoe ik een sessie toevoeg aan een PHP-script. Ik ken wel de verschillende commando’s: $_SESSION[‘varname’] en session_start() en session_register()
    Hoe moet ik hier dan mee werken? Alvast bedankt voor je hulp:-)

    Bijdrager
    Lifelogger

    Waar je voor moet zorgen is dat je pagina / website altijd begint met session_start(). Dit is het meest belangrijke dat er is en moet altijd al eerste uitgevoerd worden.

    Als je vervolgens een sessie wilt aanmaken doe je dat als volgt:

    $_SESSION[‘variabelen-naam’] = $katten.

    Om de sessie vervolgens weer uit te lezen gebruik je bijvoorbeeld:

    echo $_SESSION[‘variabele-naam’]

    De ‘variabele-naam’ kun je dus zelf kiezen.

    Bijdrager
    martijnG

    waarom in een sessie als je toch de waarde mee kunt sturen in de post.

    <?php
    if (isset($_POST[‘aantal’])) {
    $aantal = $_POST[‘aantal’] + 1;
    $tekst = ‘Er zijn ‘ . $aantal . ‘ katten geteld.’;
    } else {
    $aantal = 0;
    $tekst = ‘Er zijn nog geen katten geteld’;
    }
    ?>
    <form action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>” method=”post”>
    <input type=”submit” />
    <input type=”hidden” name=”aantal” value=”<?php echo $aantal; ?>” />
    </form>

    Bijdrager
    madcat

    @martijn

    dit is nu typisch een programeer fout (wat als er nu 2 mensen tegelijk zijn waarbij er een langer doet over het invoeren)

    Het makkelijkste is, om toch een database of xml/csv te bewaren server side, en deze in te lezen en direct weer te updaten als er een post wordt gedaan.

    Bijdrager
    johnkeates

    Ga hier heen om makkelijk met PHP te beginnen: http://www.w3schools.com/

    De bron die je nu gebruikt is niet helemaal bij. Kijk op http://php.net om de handleiding van PHP te lezen. Alles wat er bestaat staat daar. Gebruik PHP vooral in het engels. Niet om dat nederlands niet kan of mag, maar om dat PHP in het engels opgezet is, de documentatie vooral in het engels is, en de uitwisseling met andere programmeurs ook in het engels is.

    In ieder geval veel succes met het leren van PHP!

    Bijdrager
    Damio

    Hallo,

    Bedankt voor jullie enthousiaste reacties, ben er erg blij mee! Ik ga vanmiddag of vanavond eventjes ermee werken. En inderdaad, mijn bron is vergeleken met W3 een beetje ‘verouderd’. Ik gebruik W3 ook meestal als naslagwerk. En van php.net zal ik ook dankbaar gebruik gaan maken. Het gebruik van een isset is wel slim, dat moet ik toegeven. Dan kun je ook gewoon de value van de button veranderen zonder dat je gedoe daarmee krijgt. Nog een tip voor martijn. + 1 is gelijk aan ++. Dat heb ik dan weer geleerd.:-)

    Bedankt!
    Max

    Bijdrager
    Thoomas

    @martijnG: Om XSS-aanvallen te voorkomen, kan je van dit:

    <br />
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"><br />
     

    Beter dit maken:

    <br />
    <form action="<?php htmlentities($_SERVER['PHP_SELF']); ?>" method="post"><br />
     

    Meer info hierover: http://www.html-form-guide.com/php-form/php-form-action-self.html

    Ook al is de kans klein dat de TS als beginnende PHP-er last van hackaanvallen zal hebben, het is toch verstandig om een goede gewoonte aan te leren.

    Bijdrager
    martijnG

    @Thoomas helmaal gelijk. Daarnaast maak ik ook altijd een array aan met met de input namen van de verstuurde velden. Deze Array gebruik ik als loop om de velden & waarden te verifieren. Zelf gebruik ik strip_tags om post waarden schoon te maken.

    In dit geval had ik beter:
    (isset($_POST[‘aantal’]) && is_numeric($_POST[‘aantal’]))
    kunnen gebruiken.

    @madcat: DB, files schrijven, sessies aanmaken, verhoogt de serverload. Als je een druk bezochte server hebt zou door de vele aanvragen en opslaan van data je server best plat kunnen gaan. Maar het is zowieso goed om na te denken over hoe met data om te gaan.

    In dit forumpost is iemand aan het leren met PHP om te gaan, ik zou zeggen hij moet gewoon een beetje spelen met PHP. Simpel beginnen. Laat hem eerst maar plezier erin krijgen dat dingetjes in eerste instantie werken. Dat er bij programeren meer bij komt kijken weten we allemaal.

    Zelf gebruik ik als ontwikkel omgeving zendFramework met de MVC structuur geschreven in OOP. Lijkt me niet dat je een beginnende PHP-er hiermee “lastig” moet vallen.

    Bijdrager
    Damio

    <p>@martijnG Ik heb jouw code eens bekeken, ik snap wel aardig wat er gaande is. Alleen het werkt niet. Zie de pagina:
    </p>

    Bijdrager
    Thoomas

    Dat komt omdat je de code ook niet letterlijk over hebt genomen:
    Jij hebt:

    <br />
    <form method="post"><br />
    <input type="submit" name="verzend" value="Ik heb een kat geteld!"><br />
    </form><br />
    <form method="post"><br />
    <input type="submit" /><br />
    <input type="hidden" name="aantal" value="1" /><br />
    </form><br />
     

    Maar dit moet het zijn:

    <br />
    <form method="post"><br />
    <input type="submit" name="verzend" value="Ik heb een kat geteld!"><br />
    <input type="submit" /><br />
    <input type="hidden" name="aantal" value="1" /><br />
    </form><br />
     

    Je moet dus niet twee losse forms hebben.

    En natuurlijk moet de tekst van “‘Er zijn .. katten geteld.” nog op de pagina verschijnen, dat kan door onderaan dit toe te voegen:

    <br />
    <?= $tekst ?><br />
     

    (dat is afgekort voor: “<? echo $tekst; ?>”)

    Bijdrager
    jimeh

    maak geen gebruik van short tags niet alle servers ondersteunen het en als het eenmaal niet meer word ondersteund door php zal je hele code niet meer werken.

    Bijdrager
    Damio

    <p>Het is alweer een tijdje terug dat ik hiermee bezig ben geweest. Ik heb me in die tijd meer verdiept in php en het is me nu (hoera) wel gelukt. Bekijk het resultaat hier. De code vind je hieronder ;)</p>
    <p>Allemaal bedankt voor de moeite!<br />
    Max ;)</p>
    <p>De code:

    <?php session_start(); ?><br />
    <html><head><title>Kattenteller</title></head><br />
    <body><form method="get"><input type="submit" name="teller" value="Ik heb een kat geteld!"><input type="submit" name="destroy" value="Overnieuw!"></form></body><br />
    <?php<br />
    	// vars<br />
    	$teller = $_GET['teller'];<br />
    	$destroy = $_GET['destroy'];</p>
    <p>	// calc teller<br />
    	if($teller == "Ik heb een kat geteld!"){<br />
    		$_SESSION['$katten']++;<br />
    	}<br />
    	echo 'Er';<br />
    	if($_SESSION['$katten'] == 0){<br />
    		echo " zijn geen katten";<br />
    	}<br />
    	if($_SESSION['$katten'] == 1){<br />
    		echo " is een kat";<br />
    	}<br />
    	if($_SESSION['$katten'] > 1){<br />
    		echo ' zijn ' .$_SESSION['$katten']. ' katten';<br />
    	}<br />
    	echo ' geteld. Druk op de knop om een kat mee te tellen.';</p>
    <p>	// calc destroy<br />
    	if($destroy == "Overnieuw!"){<br />
    		session_destroy(); header("Location: index.php");<br />
    	}<br />
    	?>

    </p>

    Bijdrager
    johnkeates

    Geeft een internal server error…

    Bijdrager
    Damio

    Klopt, ben nog eventjes bezig;)

18 berichten aan het bekijken - 1 tot 18 (van in totaal 18)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.