Permalänk

Problem med php - isset()

Hej

ursäkta att man stör med ett sånt här värdsligt problem men jag får inte en så enkel grej som isset() -funktion i php att funka.
issset() ska ju returnera false om varibeln inte existerar eller är null.

När jag använder mig av isset() returnerar den true trots att variabeln är null. Se kodexemplet nedan. Det jag vill är då att isset() ska fånga upp om användaren inte skrivit nåt i fältet.

<form action="test.php" method="post"> <input type="text" name="x" /> <input type="submit" /> </form> <?php if (isset($_POST['x'])){ echo 'ja'; $tmp=$_POST['x']; if ($tmp==NULL) { echo 'tydligen'; } } echo '<br>'; ?>

Har jag gjort nåt uppenbart fel eller vad händer?

Permalänk
Medlem

Variabeln är inte null, det är en tom sträng.
Du bör göra:
If (isset($_POST["x"])&&$_POST["x"]=="")

Istället.

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Skrivet av zyberzero:

Variabeln är inte null, det är en tom sträng.
Du bör göra:
If (isset($_POST["x"])&&$_POST["x"]=="")

Istället.

Ok. Men med jämförelse-operatorn testar jag ändå strängen till true. Dock inte med "==="-operatorn.

Menar du du inte !="" istället för =="" dock ?

Permalänk
Medlem

Testa att bara skriva if ($_POST['x'])

Visa signatur

AMD Ryzen 7 5800X3D | Arctic Liquid Freezer II 420 | G.Skill Trident Z Neo 32GB 3600Mhz | Kingston KC2500 2TB x2 | ASUS B550-F Gaming Wifi | ASUS RTX 3080 TUF 12GB | Corsair RM750x | Fractal Design Torrent | 6x Noctua NF-A14 PWM

Permalänk
Skrivet av reaperishere:

Testa att bara skriva if ($_POST['x'])

Det fungerar ju så länge formuläret är skickat men det blir en odefinerad variabel första gången sidan laddas.

Permalänk
Skrivet av zyberzero:

Variabeln är inte null, det är en tom sträng.
Du bör göra:
If (isset($_POST["x"])&&$_POST["x"]=="")

Istället.

Eller kan han helt enkelt använda sig av empty()-funktionen.

if(!empty($_POST['x']))

Skrivet av reaperishere:

Testa att bara skriva if ($_POST['x'])

Jag har aldrig förstått logiken bakom att bara skriva if($variabel). Känns det inte väldigt ... konstigt?

if(!empty($_POST['x'])) är logisk.
Den säger "om variabeln $_POST['x'] INTE är tom så gör följande".

if($_POST['x']) är ologisk.
Den säger "om variabeln $_POST['x'] så gör följande".

OnT: Det var längesedan jag knåpade med PHP. Men så vitt jag vet kollar isset() bara ifall en variabel är "satt". Inte att den innehåller någonting. Bättre än så kan jag inte förklara det riktigt.

En möjlighet är att $_POST['x'] blir "satt" när du skriver följande kod, och att isset() därmed returnerar TRUE:

<input type="text" name="x" />

Permalänk
Skrivet av Subdubwise:

OnT: Det var längesedan jag knåpade med PHP. Men så vitt jag vet kollar isset() bara ifall en variabel är "satt". Inte att den innehåller någonting. Bättre än så kan jag inte förklara det riktigt.

En möjlighet är att $_POST['x'] blir "satt" när du skriver följande kod, och att isset() därmed returnerar TRUE:

<input type="text" name="x" />

Jo men den ska även returnera false om variablen är null. det var väl där php och jag blev osams inser jag. Jag har dålig kläm på det här med null. Att skicka in ett tomt formulär i det här exemplet genererar följande

x==null är sant
x===null är falskt

Permalänk
Medlem
Skrivet av SpindelTiger:

Det fungerar ju så länge formuläret är skickat men det blir en odefinerad variabel första gången sidan laddas.

Gör en if sats som kollar om man har skickat formuläret då. Till ex if(!empty($_POST))

Visa signatur

AMD Ryzen 7 5800X3D | Arctic Liquid Freezer II 420 | G.Skill Trident Z Neo 32GB 3600Mhz | Kingston KC2500 2TB x2 | ASUS B550-F Gaming Wifi | ASUS RTX 3080 TUF 12GB | Corsair RM750x | Fractal Design Torrent | 6x Noctua NF-A14 PWM

Permalänk
Skrivet av SpindelTiger:

x==null är sant
x===null är falskt

Om du inte förstår dig på varför det blir på detta viset så är här en förklaring:

$a = $b Assign Sets $a to be equal to $b. $a == $b Equal TRUE if $a is equal to $b. $a === $b Identical TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)

Källa: http://stackoverflow.com/questions/2063480/the-3-different-eq...

Skrivet av SpindelTiger:

Det fungerar ju så länge formuläret är skickat men det blir en odefinerad variabel första gången sidan laddas.

Varför bryr du dig ens om att "kolla indatan" innan användaren ens har skickat iväg forumläret?

Vanligtvis gör man ju på det här viset, vilket skulle göra att ditt problem inte uppstår:

if(isset($_POST['submit_button'])) { // Här kan man börja inspektera datan från forumläret, för nu vet vi att användaren har skickat iväg det. Innan dess är det ointressant. }

Permalänk
Skrivet av Subdubwise:

Varför bryr du dig ens om att "kolla indatan" innan användaren ens har skickat iväg forumläret?

Vanligtvis gör man ju på det här viset, vilket skulle göra att ditt problem inte uppstår:

if(isset($_POST['submit_button'])) { // Här kan man börja inspektera datan från forumläret, för nu vet vi att användaren har skickat iväg det. Innan dess är det ointressant. }

Nu förstår jag inte riktigt skillnaden. Det är väl ändå exakt så jag har gjort så jag har gjort.
Det jag skrev där gällde reaperishere:s förslag om att bara skriva if($_POST['x']) vilket inte funkar då man utgår från att formuläret är alltid skickat

Permalänk
Skrivet av SpindelTiger:

Nu förstår jag inte riktigt skillnaden. Det är väl ändå exakt så jag har gjort så jag har gjort.

Nej, det du har gjort är att du kollar innehållet i en av input-boxarna innan du ens vet ifall användaren har klickat på submit-knappen eller inte.

Din kod:

<form action="test.php" method="post"> <input type="text" name="x" /> <input type="submit" /> </form>

<?php if (isset($_POST['x'])){ echo 'ja'; $tmp=$_POST['x']; if ($tmp==NULL) { echo 'tydligen'; } } echo '<br>'; ?>

Vad jag föreslår att du gör:

<form action="test.php" method="post"> <input type="text" name="x" /> <input type="submit" name="submit" /> </form>

<?php if(isset($_POST['submit'])) { if(empty($_POST['x'])) { echo "Användaren klickade på submit-knappen trots att $_POST['x'] är tom!"; } } echo '<br />'; ?>

Permalänk
Skrivet av Subdubwise:

Nej, det du har gjort är att du kollar innehållet i en av input-boxarna innan du ens vet ifall användaren har klickat på submit-knappen eller inte.

Din kod:

<form action="test.php" method="post"> <input type="text" name="x" /> <input type="submit" /> </form>

<?php if (isset($_POST['x'])){ echo 'ja'; $tmp=$_POST['x']; if ($tmp==NULL) { echo 'tydligen'; } } echo '<br>'; ?>

Vad jag föreslår att du gör:

<form action="test.php" method="post"> <input type="text" name="x" /> <input type="submit" name="submit" /> </form>

<?php if(isset($_POST['submit'])) { if(empty($_POST['x'])) { echo "Användaren klickade på submit-knappen trots att $_POST['x'] är tom!"; } } echo '<br />'; ?>

Ok då förstår jag!
Det blir till att prova imorn alltså.

Tack för hjälpen du