Ik heb dit scriptje, maar hij blijft waarde 4 weergeven.
Hoe kan ik het aanpakken dat a met iedere post 1 opgehoogd wordt?




<?
$a = 4;

if($_POST['submitform']) {

$a = $a = 1;

echo $a;

}
else {}


?>
<form name="contactform" action="<?php echo $PHP_SELF; ?>" method="post">
<input type="submit" value="ga!" name="submitform">
<?php
$a=2;
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$a++;
echo $a; // Dit is altijd 3. Bij elke pagina word $a = 2 gezet. Later word $a++ gedaan, wat 3 maakt.
// Hier je formulier
}
else
{
// en hier je fumulier
}
?>
Wat mark zegt in het laatste script ervaar ik ook zo. a wordt altijd 3....
En dat moet ik nou juist voorkomen..
Mark L op 14/09/2010 19:51:43

Bij het (her)laden van je pagina zijn geen variabelen gezet. Variabelen worden dus niet opgeslagen en later herbruikt. Deze zul je dus in een database moeten opslaan of in een global-variabele meegeven (GET, POST, COOKIE of SESSION lijken mij de meest voor de hand liggende..)
Verder zou je het in het uiterste geval ook in een .txt-file kunnen opslaan, maar dat raad ik je niet aan.


Ik wil je nogmaals op deze reactie wijzen. Variabelen worden alleen binnen het uitvoeren van een script bewaard. Als een script is uitgevoerd, dan worden alle waarden 'vernietigd' en moeten ze opnieuw gezet worden. Waarden die onthouden moeten worden, moeten daarom worden opgeslagen.
En dit is de enige manier om dit te fixen dus?

Als dat zo is, dan zo simpel mogelijk.
Waarom raadt je een txt file niet aan? lekker simpel en het gaat alleen maar om het eenmalig uithalen van een waarde?
omdat het niet simpel is en iedereen een txt'tje kan bekijken
ok, duidelijk. Ik heb net ergens een tip gelezen om een apart php bestand aan te maken met de volgende code:
<?
$a = 2;
?>
En deze dan te includen. Zou dat werken?

[size=xsmall]Toevoeging op 14/09/2010 20:28:23:[/size]

Nee, werkt ook niet zie ik al, effect is hetzelfde.
Dit zou werken, als je dit PHP-bestandje dan telkens zou bewerken. Dit betekend dat je de 2 zou moeten vervangen door een ander getal. Dit is eigenlijk precies hetzelfde idee als een .txt-file, op het fijt na dat dit niet gelezen hoeft te worden als bestand en door derden ook niet als bestand gelezen kan worden.

Daarbij komt dat PHP meerdere scripts te gelijk uitvoert. Dit betekend dat als je het script hebt:
<?php
include('a_save.php'); // $a = 5; (zojuist gezet in a_save.php).
$newFile = '<?php'.PHP_EOL.'$a = '.($a+1).';'.PHP_EOL.'?>'; // PHP_EOL is een enter
?>

Als PHP door meerdere gebruikers tegelijk opgevraagd word, zorgt hij er niet voor dat hij eerst één script afmaakt en dan de volgende, maar hij werkt tegelijk. In bovenstaande code bedoel ik even met de variabele $newFile dat deze waarde naar het bestand a_save.php gezet word.
<?php
include('a_save.php'); # Gebruiker 1. $a = 5;
include('a_save.php'); # Gebruiker 2. $a = 5;
$newFile = '<?php'.PHP_EOL.'$a = '.($a+1).';'.PHP_EOL.'?>'; # Gebruiker 1. $a = 6
$newFile = '<?php'.PHP_EOL.'$a = '.($a+1).';'.PHP_EOL.'?>'; # Gebruiker 2. $a = 6
?>

$a zou nu 7 moeten zijn, maar deze is nog steeds 6. Ik hoop dat je begrijpt wat ik bedoel.
Een database handelt alles stuk voor stuk af...
Wat ik ook doe, het werkt 1 x na post en daarna niet meer.....
Je slaat je waarde ook nergens op.
De $newFile - zoals ik het heb neergezet - is een variabele en word dus ook verwijderd. Maar de waarde van deze variabele zou je in de file a_save.php kunnen zetten.

Mag ik vragen waarvoor je het wilt gebruiken?

Hier een simpel voorbeeld van wat je met een database zou kunnen doen.
<?php
// Ophalen van $a
$query = mysql_query("SELECT a FROM count WHERE what = 'formulier'");
$result = mysql_fetch_assoc($query);
$a = $result['a']; // zinloze stap, maar wel verduidelijkend in dit voorbeeld.

// Bewerken van $a
mysql_query("UPDATE count SET a = (a+1) WHERE what = 'formulier'");
?>

Je kunt ook alle velden van je formulier in de database opslaan. Als je dan alle rijen optelt d.m.v. COUNT(*) AS a dan krijg je ook het goede getal.
Maak een session aan, en dump het getal daar in.

Reageren