Vinnaren i pepparkakshustävlingen!
2023-06-23, 22:22
  #1
Avstängd
keepcalm8s avatar
Det dyker inte upp nåt "You didn't enter anything" när man inte skriver nåt i boxen.

Kod:
<?php

if (isset($_GET['username'])) {
echo 
"Welcome, " $_GET['username'];
}
elseif (isset(
$_GET['submit']) && empty($_GET['username'])) {
echo 
"You didn't enter anything.";
}
else { echo 
"Default"; } ?>

<form id="formly" action="test.php" method="GET">
<input type="text" name="username">
<input type="submit" value="Click Me!">
</form>
Citera
2023-06-23, 22:32
  #2
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av keepcalm8
Det dyker inte upp nåt "You didn't enter anything" när man inte skriver nåt i boxen.

Kod:
<?php

if (isset($_GET['username'])) {
echo 
"Welcome, " $_GET['username'];
}
elseif (isset(
$_GET['submit']) && empty($_GET['username'])) {
echo 
"You didn't enter anything.";
}
else { echo 
"Default"; } ?>

<form id="formly" action="test.php" method="GET">
<input type="text" name="username">
<input type="submit" value="Click Me!">
</form>

Raden med
elseif (isset($_GET['submit']) && empty($_GET['username'])) {
exekveras inte, eftersom när man klickar på knappen så skickas username-parametern med och då körs första testet. Körningen kommer inte att köra tester den inte behöver, om isset($username) är true kommer den inte tugga vidare och kolla några andra tester, utan köra det blocket och gå vidare utanför switchen. Om det vore så att exekveringen kollade båda testerna, hur skulle den avgöra vilket block den ska köra?
Citera
2023-06-23, 22:34
  #3
Avstängd
keepcalm8s avatar
Citat:
Ursprungligen postat av PissBuss
Raden med
elseif (isset($_GET['submit']) && empty($_GET['username'])) {
exekveras inte, eftersom när man klickar på knappen så skickas username-parametern med och då körs första testet. Körningen kommer inte att köra tester den inte behöver, om isset($username) är true kommer den inte tugga vidare och kolla några andra tester, utan köra det blocket och gå vidare utanför switchen. Om det vore så att exekveringen kollade båda testerna, hur skulle den avgöra vilket block den ska köra?

Fattade inte riktigt, men men
Citera
2023-06-23, 22:44
  #4
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av keepcalm8
Fattade inte riktigt, men men

Om du tittar på

if (isset($_GET['username'])) {
echo "Welcome, " . $_GET['username'];
}
elseif (isset($_GET['submit']) && empty($_GET['username'])) {
echo "You didn't enter anything.";
}

så ser du att båda if-testerna börjar med samma kriterium. Eftersom första testet bara består av det kriteriet så kommer exekveringen aldrig att komma fram till det andra testet om det kriteriet är uppfyllt, dvs. att isset($_GET['username']) är true.
Citera
2023-06-23, 22:47
  #5
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av PissBuss
Om du tittar på

if (isset($_GET['username'])) {
echo "Welcome, " . $_GET['username'];
}
elseif (isset($_GET['submit']) && empty($_GET['username'])) {
echo "You didn't enter anything.";
}

så ser du att båda if-testerna börjar med samma kriterium. Eftersom första testet bara består av det kriteriet så kommer exekveringen aldrig att komma fram till det andra testet om det kriteriet är uppfyllt, dvs. att isset($_GET['username']) är true.

Okej, jag ser nu att du har en variabel 'submit' också, inte 'username' på båda ställen, men det blir s a s oväsentligt, formuläret skickar 'username' och ditt första test kommer kortsluta där och sen kliva ur din if-else-kedja.

Det blir nog enklare för dig om du låter bli att använda else, skriv din kod med uteslutande if och utan att lägga in if-block i varandra. Då tvingas du reda ut och förenkla din logik.
Citera
2023-06-23, 22:50
  #6
Medlem
PissBusss avatar
Du bör bekanta dig med ??, 'null coalescing operator'. Se https://www.php.net/manual/en/langua...comparison.php .
Citera
2023-06-23, 22:58
  #7
Medlem
PissBusss avatar
OK, läste ännu mer fel i din kod. Du sätter aldrig $_GET['submit'], isset() på det kan aldrig bli true, och det leder också till att det andra blocket aldrig kommer exekveras.

Om du studerar
<?php

$username = $_GET['username'] ?? '';

if (empty($text)) {
echo "Welcome, " . $username;
} else {
echo "Default";
} ?>

<form id="formly" action="test.php" method="GET">
<input type="text" name="username">
<input type="submit" value="Click Me!">
</form>

så kanske du kommer till det du vill ha. Så här i början bör du köra varje liten kodändring du gör och se att det funkar och inte skriva flera rader innan du kör den och kollar om något har gått sönder.

Skulle därför rekommendera att du använder https://psysh.org/ för att interaktivt köra dina kodsnuttar och ändringar, så att du får en omedelbar s.k. feedback.
Citera
2023-06-24, 00:47
  #8
Medlem
Jasper.Newtons avatar
Citat:
Ursprungligen postat av PissBuss
OK, läste ännu mer fel i din kod. Du sätter aldrig $_GET['submit'], isset() på det kan aldrig bli true, och det leder också till att det andra blocket aldrig kommer exekveras.

Om du studerar
<?php

$username = $_GET['username'] ?? '';

if (empty($text)) {
echo "Welcome, " . $username;
} else {
echo "Default";
} ?>

<form id="formly" action="test.php" method="GET">
<input type="text" name="username">
<input type="submit" value="Click Me!">
</form>

så kanske du kommer till det du vill ha. Så här i början bör du köra varje liten kodändring du gör och se att det funkar och inte skriva flera rader innan du kör den och kollar om något har gått sönder.

Skulle därför rekommendera att du använder https://psysh.org/ för att interaktivt köra dina kodsnuttar och ändringar, så att du får en omedelbar s.k. feedback.
Wow hur lär man sig programmering? Tjänar du pengar på att sitta vid en dator??
Citera
2023-06-24, 07:36
  #9
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av Jasper.Newton
Wow hur lär man sig programmering? Tjänar du pengar på att sitta vid en dator??

Vet inte, växte upp med en C64 så det blev liksom nödvändigt.

Jag tjänar ganska bra pengar på att få datorer att göra som jag eller min uppdragsgivare önskar.
Citera
2023-06-24, 15:11
  #10
Avstängd
keepcalm8s avatar
Jag får testa med en switch-sats.
Citera
2023-06-24, 16:02
  #11
Medlem
Citat:
Ursprungligen postat av keepcalm8
Det dyker inte upp nåt "You didn't enter anything" när man inte skriver nåt i boxen.

Kod:
<?php

if (isset($_GET['username'])) {
echo 
"Welcome, " $_GET['username'];
}
elseif (isset(
$_GET['submit']) && empty($_GET['username'])) {
echo 
"You didn't enter anything.";
}
else { echo 
"Default"; } ?>

<form id="formly" action="test.php" method="GET">
<input type="text" name="username">
<input type="submit" value="Click Me!">
</form>

Du har inte något som heter ”submit ” lägg på name=”submit” och sanitize input för att undvika xss attacker

Ex:
Kod:
<?php 

if (isset($_GET['submit']) && empty($_GET['username'])) { 
    echo 
"You didn't enter anything."


if (isset(
$_GET['submit']) && !empty($_GET['username'])) { 
    
// sanitize input to prevent XSS attacks
    
$username htmlspecialchars($_GET['username']);
    echo 
"Welcome, " $username
}

if (!isset(
$_GET['submit'])) {
    echo 
"Default";

?>

<form id="formly" action="test.php" method="GET"> 
<input type="text" name="username"> 
<input type="submit" name="submit" value="Click Me!"> 
</form>
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback