isset() tuts, aber auch wieder nicht??

Alles, was PHP betrifft, kann hier besprochen werden.

isset() tuts, aber auch wieder nicht??

Postby Gutschy » 02. June 2003 14:39

Lerne gerade an einem kleine Übungsskript. Die isset Funktion soll bei false einen Satz ausgeben, tut sie aber nicht. Erst mal der Code wie er im Prinzip laufen sollte.

<?php
if (isset($anzahl)) { // $anzahl ist ein Textfeld und wenn leer

..........

else { //springt else an
//if (isset($senden)) { // $senden ist ein Button und gibt true zurück, also sollte echo ausgegeben werden.
//echo "Bitte füllen Sie alle Felder aus!";

if (isset($_POST['anzahl']) and is_null($_POST['anzahl'])) {
echo 'Bitte füllen Sie alle Felder aus!';
} //hier nochmal eine andere Variante, läuft aber auch nicht
}
?>


Und hier das gesamt Skript . . . .



<html>
<head>
<title>Formular vor und Nachname</title>
</head>


<body>

<h1>Versandkosten berechnung.</h1>

<form action="<?php echo $SELF_PHP;?>" method="post">
Bitte geben sie die Anzahl ihrer Bestellungen ein:
<input type="text" name="anzahl">
<input type="submit" name="senden" value="Daten absenden">
</form>
<?php
if (isset($anzahl)) {
if ($anzahl>=1&&$anzahl<=3) {
$versand="2,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten."; }
elseif ($anzahl>=4&&$anzahl<=7) {
$versand="2,60";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}
elseif ($anzahl>=8&&$anzahl<=10) {
$versand="5,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}
elseif ($anzahl>10) {
$versand="0,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}

}
else {
//if (isset($senden)) {
//echo "Bitte füllen Sie alle Felder aus!";

if (isset($_POST['anzahl']) and is_null($_POST['anzahl'])) {
echo 'Bitte füllen Sie alle Felder aus!';
}
}

?>
</body>
</html>


Wer blickt durch??
Warum Schwerkraft wenn ich sie auch nackt haben kann.
Gutschy
 
Posts: 76
Joined: 28. May 2003 20:12
Operating System: Win7

Re: isset() tuts, aber auch wieder nicht??

Postby boppy » 02. June 2003 15:18

Gutschy wrote:<?php
if (isset($anzahl)) { // $anzahl ist ein Textfeld und wenn leer

..........

else { //springt else an
//if (isset($senden)) { // $senden ist ein Button und gibt true zurück, also sollte echo ausgegeben werden.
//echo "Bitte füllen Sie alle Felder aus!";

if (isset($_POST['anzahl']) and is_null($_POST['anzahl'])) {
echo 'Bitte füllen Sie alle Felder aus!';
} //hier nochmal eine andere Variante, läuft aber auch nicht
}
?>
Never ever use $var if you can use $_METHOD["var"] - der satz gefällt mir in englisch besser als in deutsch *fg*

benutze also IMMER isset($_POST["senden"]) usw usf. dann könnte es schon besser funktionieren.
...in diesem Sinne
yours boppy

Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
User avatar
boppy
AF Moderator
 
Posts: 501
Joined: 27. December 2002 02:15
Location: W-E-City

Postby Gutschy » 02. June 2003 15:38

Ne, der gleiche Krampf, hat vielleicht jemand Bock das Problem zu lösen, allmählich glaub ich das da ein Denkfehler drin ist, also unlösbar.

Na kommt schon, ihr schafft das doch leicht *tschaka*.

Ich geb auch ne virtuelle Party und versuche ein paar Frauen anzuschleppen, ok? *bettel*
Warum Schwerkraft wenn ich sie auch nackt haben kann.
Gutschy
 
Posts: 76
Joined: 28. May 2003 20:12
Operating System: Win7

Postby pau|c » 02. June 2003 15:48

Also ich würd das Ganze ja so machen:

Füg beim Formular ein verstecktes Feld hinzu:
<input type=hidden name=action value=senden>

Der php code sieht dann so aus:

if ($action == 'senden')
{

if (isset($anzahl)
{

//hier das was dein script machen soll

}

else
{

echo "Bitte füllen Sie alle Felder aus!";

}

}

Das Action überprüft jetzt ob das Formular abgeschickt wurde, also ob Senden gedrückt wurde... Müsst eigentlich so funktionieren, ich machs immer so...
User avatar
pau|c
 
Posts: 25
Joined: 17. April 2003 01:05
Location: Wels, Austria

Postby boppy » 02. June 2003 15:49

Code: Select all
<html>
<head>
<title>Formular vor und Nachname</title>
</head>


<body>

<h1>Versandkosten berechnung.</h1>

<form action="<?php echo $SELF_PHP;?>" method="post">
Bitte geben sie die Anzahl ihrer Bestellungen ein:
<input type="text" name="anzahl">
<input type="submit" name="senden" value="Daten absenden">
</form>
<?php
if (isset( $anzahl = $_POST["anzahl"] )) {
    if ($anzahl >= 1 && $anzahl <= 3)     { $versand="2,00"; }
    elseif ($anzahl >= 4 && $anzahl <= 7) { $versand="2,60"; }
    elseif ($anzahl >= 8 && $anzahl <= 10){ $versand="5,00"; }
    elseif ($anzahl>10)                   { $versand="0,00"; }
    if($versand){ echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten."; }
}
else { echo 'Bitte füllen Sie alle Felder aus!'; }
?>
</body>
</html>
Sollte den Sinn erfüllen
...in diesem Sinne
yours boppy

Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
User avatar
boppy
AF Moderator
 
Posts: 501
Joined: 27. December 2002 02:15
Location: W-E-City

Postby Guest » 02. June 2003 20:04

Sorry, ich hab nicht so den Plan aber dein Skript produziert bei in Zeile 17 folgende Fehlermeldung:

Parse error: parse error, unexpected '=', expecting ',' or ')' in /opt/lampp/htdocs/phpkurs/aufgaben/ÜbungsteilB/versand11.php on line 17

Ich hab den Eindruck das da ein Klammerpaar fehlt. *schätz*
Guest
 

Postby Gutschy » 02. June 2003 20:14

Einloggen nicht vergessen! *g*
Warum Schwerkraft wenn ich sie auch nackt haben kann.
Gutschy
 
Posts: 76
Joined: 28. May 2003 20:12
Operating System: Win7

Postby Gutschy » 02. June 2003 20:17

pau|c hab deinen Vorschlag mal so eingebaut:

Vorher aber nochmal mein Problem, irgendwer drückt absenden und dann kommt die Aufforderung "Bitte füllen sie alle Felder aus".



<html>
<head>
<title>Formular vor und Nachname</title>
</head>


<body>

<h1>Versandkosten berechnung.</h1>

<form action="<?php echo $SELF_PHP;?>" method="post">
Bitte geben sie die Anzahl ihrer Bestellungen ein:
<input type="text" name="anzahl">
<input type="submit" name="senden" value="Daten absenden">
<input type=hidden name=action value=senden>

</form>
<?php
if ($action == 'senden')
{

if (isset($anzahl)) {
if ($anzahl>=1&&$anzahl<=3) {
$versand="2,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten."; }
elseif ($anzahl>=4&&$anzahl<=7) {
$versand="2,60";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}
elseif ($anzahl>=8&&$anzahl<=10) {
$versand="5,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}
elseif ($anzahl>10) {
$versand="0,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}

}
else {

echo "Bitte füllen Sie alle Felder aus!";}


}

?>

</body>
</html>


Also eigentlich sollte man das ganze Vergessen, oder?
Warum Schwerkraft wenn ich sie auch nackt haben kann.
Gutschy
 
Posts: 76
Joined: 28. May 2003 20:12
Operating System: Win7

Postby pau|c » 02. June 2003 20:58

machs so:

<html>
<head>
<title>Formular vor und Nachname</title>
</head>


<body>

<h1>Versandkosten berechnung.</h1>

<form action="<?php echo $SELF_PHP;?>" method="post">
Bitte geben sie die Anzahl ihrer Bestellungen ein:
<input type="text" name="anzahl">
<input type="submit" name="senden" value="Daten absenden">
<input type=hidden name=action value=senden>

</form>
<?php
if ($action == 'senden')
{

if ($anzahl != "") {
if ($anzahl>=1&&$anzahl<=3) {
$versand="2,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten."; }
elseif ($anzahl>=4&&$anzahl<=7) {
$versand="2,60";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}
elseif ($anzahl>=8&&$anzahl<=10) {
$versand="5,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}
elseif ($anzahl>10) {
$versand="0,00";
echo "Für $anzahl Titel berechnen wir $versand Euro Versandkosten.";}

}
else {

echo "Bitte füllen Sie alle Felder aus!";}


}

?>

</body>
</html>


sollte 100pro funktionieren, habs grad bei mir getestet!

Edit: Meine Vermutung ist das isset() nicht überprüft ob in der Variable was drinsteht, sondern ob es sie überhaupt gibt und wenns ein Form submitest dann gibts alle Feldvariablen, egal ob was drinsteht oder nicht, drum hats wahrscheinlich auch nicht funktioniert! Aber wie gesagt ist nur eine Vermutung von mir!
Am Besten du überprüfst immer selbst ob was drinsteht oder nicht :D
User avatar
pau|c
 
Posts: 25
Joined: 17. April 2003 01:05
Location: Wels, Austria

Postby Guest » 04. June 2003 18:58

pau|c wrote:Edit: Meine Vermutung ist das isset() nicht überprüft ob in der Variable was drinsteht, sondern ob es sie überhaupt gibt und wenns ein Form submitest dann gibts alle Feldvariablen, egal ob was drinsteht oder nicht, drum hats wahrscheinlich auch nicht funktioniert! Aber wie gesagt ist nur eine Vermutung von mir!
Am Besten du überprüfst immer selbst ob was drinsteht oder nicht :D


korrekt. um zu prüfen, ob eine variable "leer" ist:

Code: Select all
if($_POST['varname'] == ""){

}

// oder

if(empty($_POST['varname'])){

}


micha
Guest
 

Postby Gutschy » 04. June 2003 20:59

@paul|c heissen Dank für deine Lösung, läuft tatsächlich. :) :)

Aber du mußt zugeben das dass ein Trick ist, also ich will ja jetzt nicht rumnörgeln aber . . . *g*

edit: Hab mir das Skript gerade nochmal in ruhe angeschaut und mal ein bisschen rumgetestet, ist auf jeden Fall ein sauberer Trick wenn es überhaupt einer ist. ;)


@micha, danke für deinen Tipp aber wir brauchen ja das Gegenteil. Eine Variablenprüfung die false zurückgibt, wenn du dafür noch eine Idee hast. *gg* Oder eine if Verschachtelung, das könnte auch klappen, aber das muß ich selber erstmal nachfragen wie die geht bzw. mal ein Beispiel angucken, will mir nämlich so spontan einfallen wie das laufen soll. Ist mit Sicherheit kein Akt aber ich komm halt nicht drauf.

Also wenn jemand so ein Teil hat, vielleicht so auf 4 Ebenen wäre ich sehr dankbar!!
Warum Schwerkraft wenn ich sie auch nackt haben kann.
Gutschy
 
Posts: 76
Joined: 28. May 2003 20:12
Operating System: Win7

Postby pau|c » 04. June 2003 23:59

dann setz einfach ein ! davor, das heisst NOT also negiert das Ganze dann funzt es auch mit der Lösung von micha!
User avatar
pau|c
 
Posts: 25
Joined: 17. April 2003 01:05
Location: Wels, Austria

Postby Guest » 05. June 2003 08:49

Ok, ok, probier ich gleich zu Hause aus. Ist natürlich simpel.
Guest
 

Postby Gutschy » 05. June 2003 20:59

Wollt nur sagen, klappt nicht. Zumindest nicht so wie es soll. Vielleicht noch eine Frage zum allgemeinen Verständniss.

"isset" sollte doch erst dann prüfen wenn das Formular sich wieder selbst aufruft?? Genauso verstehe ich die $-POST Anweisung. Bei pau|c ist das ja klar. Nur wie Arbeitet "isset" dann genau??

Ansonsten EGAL und nochmal besten Dank für die Hilfe!!!!
Warum Schwerkraft wenn ich sie auch nackt haben kann.
Gutschy
 
Posts: 76
Joined: 28. May 2003 20:12
Operating System: Win7

Postby Guest » 08. June 2003 12:08

hallo gutschy!

ok, wenn du prüfen willst, ob eine variable existiert:

Code: Select all
if(isset($_POST['var_name'])){

}


...ob sie nicht existiert:

Code: Select all
if(!isset($_POST['var_name'])){

}


ob sie leer ist:

Code: Select all
if(empty($_POST['var_name'])){

}



und wenn du prüfen willst, ob dein formular abgeschickt wurde, einfach überprüfen, ob die submit-variable existiert (<input type="submit" name="senden" value="Daten absenden"> ):

Code: Select all
if(isset($_POST['senden'])){
// formular wurde abgeschickt
}


ich hoffe, ich konnte weiterhelfen.

grüße, micha
Guest
 

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 37 guests