Variable erhöhen
Tobi
- php
Hallo!
ich will eine Variable mit jedem abschicken erhöhen...
anfangs ist keine Variable gesetzt.
Diese soll dann auf 1 gesetzt werden.
Ist die Variable bis auf 5 erhöht worden, soll sie wieder auf 1 gesetzt werden.
Irgendwie geht es nicht.... (HILFE!)
Tobi
---
Mein Quelltext:
<html>
<head>
<?php
if ($variable > 5 | $variable = "") {
$variable = "1";
}
else {
$variable++;
}
?>
<title>Test</title>
</head>
<body>
<form action="<?php PHP_SELF ?>" method="post" enctype="multipart/form-data">
<input name="eingabefeld" size="2" value="
<?php
echo $variable;
?>
">
<hr>
<input type="submit" value="abschicken">
<hr>
<?php
$dieverschicktevariable = $_POST["eingabefeld"];
echo $dieverschicktevariable;
?>
</form>
</body>
</html>
Hallo!
if ($variable > 5 | $variable = "") {
Du weißt was Du hier machst?
http://de3.php.net/manual/de/language.operators.bitwise.php
Was Du vermutlich willst ist folgendes:
http://de3.php.net/manual/de/language.operators.logical.php
Und überhaupt - woher kommt denn die Variable "$variable" auf einmal? Woher nimmt die ggfs. ihre Daten?
Grüße
Andreas
Hoi
Du machst ein Durcheinander mit Text und Zahl:
if ($variable > 5 | empty($variable)) {
$variable = 0;
}
else {
$variable++;
}
?>
Nicht getestet, aber in diese Richtung sollte es gehen...
HTH
kaepten
Hoi
Du machst ein Durcheinander mit Text und Zahl:
if ($variable > 5 | empty($variable)) {
$variable = 0;
}
else {
$variable++;
}
?>
Und Du baust unsauberen Code..
Zuerst Variable initialisieren!
also isset $_POST['blabalblub'];
dann Werte überprüfen oder zuweisen und dann erst in die Verarbeitung gehen.
TomIRL
Hoi Tom
Und Du baust unsauberen Code..
ja ja alles der Reihe nach *lach* wollte nur mal das if klären.
Und: PHP und "sauberer" Code. Geht das? Eine Sprache die nicht mal typisiert ist, die ist in meinen Augen schon sehr unsauber. Da braucht man gar nicht mehr viel dazu beitragen... *gggg* (Ok doch, die unsauberheiten der untypisierung mit x-Zeilen auszubügeln)
kaepten
Hallo!
Und: PHP und "sauberer" Code. Geht das?
ja.
Eine Sprache die nicht mal typisiert ist, die ist in meinen Augen schon sehr unsauber.
Es steht Dir frei Typen zu verwenden und zu erzwingen.
Da braucht man gar nicht mehr viel dazu beitragen... *gggg* (Ok doch, die unsauberheiten der untypisierung mit x-Zeilen auszubügeln)
Wenn man weiß wie PHP mit den Typen umgeht sehe ich die automatische Konvertierung nicht wirklich als Nachteil - eher im Gegenteil! Nenn doch mal ein Beispiel was Du als unsauber empfindest.
In PHP5 gibt es sogar "Class Type Hints", was will man mehr... ;-)
http://de3.php.net/zend-engine-2.php
Grüße
Andreas
hoi
Mag ja alles sein.
Aber ich verwette mein letztes Hemd, dass selbst im brandneuen PHP5 Konstrukte wie folgt funktionieren:
$flag = "test";
if ($flag) {
echo "$flag ist eigentlich nicht true, aber für php eben doch";
}
$flag = 3;
if ($flag) {
echo "$flag ist eigentlich nicht true, aber für php eben doch";
}
EINZIG RICHTIG:
$flag = true;
if ($flag) {
echo "$flag ist true";
}
So. Das heisst für mich unsauber!
kaepten
überhaupt: ich bin nicht "gegen" PHP, ich liiiebe PHP, das lässt so schön unsaubere und schnelle programmierung zu... *lach*
Hallo!
Aber ich verwette mein letztes Hemd, dass selbst im brandneuen PHP5 Konstrukte wie folgt funktionieren:
Jo, die Wette solltest Du gewinnen, aber Du wirst vermutlich niemanden finden der darum mit Dir wetten wollte, ist ja so als würde ich mit Dir wetten wollen dass ich Andreas heiße oder dass heute Donnerstag ist...
$flag = "test";
if ($flag) {
echo "$flag ist eigentlich nicht true, aber für php eben doch";
}$flag = 3;
if ($flag) {
echo "$flag ist eigentlich nicht true, aber für php eben doch";
}EINZIG RICHTIG:
Wer oder was sagt das? Nur weil es in einer anderen Programmiersprache nur so "EINZIG RICHTIG" ist, muss das noch lange nicht bei PHP so sein. Bei PHP ist alles was Du oben genannt hast korrekt und gewollt. Wenn einem das nicht gefällt kann man gerne eine andere Sprache verwenden, die einem besser gefällt. So einfach ist das ;-)
$flag = true;
if ($flag) {
echo "$flag ist true";
}So. Das heisst für mich unsauber!
;-)
Ok, zum mitschreiben ;-):
http://de3.php.net/manual/de/control-structures.php#control-structures.if
" if (ausdr)
Anweisung
Wie im Abschnitt über Ausdrücke beschrieben, wird ausdr auf seinen boolschen Wertinhalt ausgewertet. Wenn ausdr als TRUE ausgewertet wird, führt PHP die Anweisung aus. Falls die Auswertung FALSE ergibt, wird die Anweisung übergangen. Mehr Informationen drüber welche Werte als FALSE ausgewertet werden finden Sie im Abschnitt 'Umwandlung nach boolean'. "
Ok, gucken wir auch da:
http://de3.php.net/manual/de/language.types.boolean.php#language.types.boolean.casting
"Bei der Umwandlung nach boolean werden folgende Werte als FALSE angesehen:
* das boolean FALSE selbst
* die Integer 0 (Null)
* die Fließkomma-Zahl 0.0 (Null)
* ein Array ohne Elemente
* ein Objekt ohne Mitgliedsvariablen
* der spezielle Typ NULL (einschließlich nicht definierter Variablen)
Jeder andere Wert wird als TRUE angesehen (einschließlich jeder Resource)."
Das sind die Regeln die man kennen muss. Und wenn man die kennt ist das ganze wirklich sehr einfach. Wenn man eben typensicher testen muss verwendet man if ($val === mixed), z.B.
if ($val === TRUE)
dann erreichst Du das was Du erwartest. Nur ist das oft nicht notwendig. Es ist halt so gewollt, und die meisten Leute können damit gut leben :)
Ich will ja auch nicht sagen dass es nur Vorteile hat :)
Das ist halt eine Gewöhnungssache. Bei kleinen Formmailern ist das ganze Thema recht unwichtige, bei größeren Applikationen muss man halt wissen was man tut, genauso wie bei jeder anderen Sprache auch.
Auch noch lesenswert:
http://de3.php.net/manual/en/language.expressions.php
überhaupt: ich bin nicht "gegen" PHP, ich liiiebe PHP, das lässt so schön unsaubere und schnelle programmierung zu... *lach*
Naja, für mich findet "unsaubere Programmierung" auf einem anderen Level statt, halt so Sachen wie unsaubere Verwendung von OOP oder globalen Variablen...
Streich "unsaubere" und ich unterschreib den Satz ;-)
Grüße
Andreas
Hallo!
Vielen Dank für die Hilfe!
Hier meine "verbesserte" Version, die leider noch immer nicht funktioniert... :-(
Die Variable bekommt den Wert 1 und dieser ändert sich nie... (?)
---
<html>
<head>
<?php
if (isset ($variable)) {
if ($variable > 5 || empty($variable)) {
$variable = 1;
}
else {
$variable++;
}
}
else {
$variable = 1;
}
?>
<title>Test</title>
</head>
<body>
<form action="eingabe.php?variable=<?php echo $variable; ?>" method="post" enctype="multipart/form-data">
<input name="variable" size="2" value="<?php echo $variable; ?>">
<hr>
<input type="submit" value="abschicken">
<hr>
Die gesendete Variable hat den Wert:
<?php
$variable = $_POST["variable"];
echo $variable;
?>
</form>
</body>
</html>
Hoi
Wie ich sehe kämpfst Du noch mit unterschiedlichen Dingen, hier sende ich Dir einen funktionierenden Code auf Basis Deines Posting:
<html>
<head>
<?php
// Erste Initialisierung z.B. beim 1. Aufruf
if (isset ($_POST["variable"])) {
$variable = $_POST["variable"];
} else {
$variable = 0;
}
// Inkrementierung und Rücksetzung
if ($variable >= 5 || $variable == 0) {
$variable = 1;
} else {
$variable++;
}
?>
<title>Inkrementierer</title>
</head>
<body>
<form action="test.php" method="post" enctype="multipart/form-data">
<input name="variable" size="2" value="<?php echo $variable; ?>">
<hr>
<input type="submit" value="abschicken">
<hr>
Die gesendete Variable hat den Wert:
<?php
if (isset ($_POST["variable"])) {
echo $_POST["variable"];
} else {
echo "Dies ist der Erstaufruf!";
}
?>
</form>
</body>
</html>
So gehts, ich hoffe das gibt Dir eine Idee wo Deine Fehler lagen und wie das Ganze funktioniert.
HTH
kaepten
Jetzt wo ich noch Andreas's posting sehe, merke ich dass mein Schnipsel wohl nicht wirklich weiterhilft.
Das Form ruft sich ja selbst wieder auf. Du solltest zumindest die $variable auch weiterreichen! Denn sonst bist Du immer bei 0.
<input type="hidden" name="variable" value="<?= $variable ?>">
könnte weiterhelfen.
HTH
kaepten
PS: Möglicherweise brauchst Du dann aber noch vor dem if die Zeile
$variable = $_POST['variable'];