Vinnaren i pepparkakshustävlingen!
2018-01-18, 18:50
  #1
Medlem
Ketaminkillen1s avatar
Hej Flashback!

Nu är det så att jag har börjat med PHP sedan några dagar tillbaka, och det går ju sådär kan man säga...

Min lärare har bett mig skapa ett simpelt HTML-formulär där användaren kan skriva in sitt namn och sedan trycka på en knapp, varpå en del grejer ska ske.

Med hjälp av PHP så ska, när användaren skrivit in sitt namn och klickat på knappen, namnet (eller vadhelst användaren skriver in) sparas i en variabel.

I samband med knapptryckningen så ska även lite HTML genereras där det står "Hej Börje!", om användaren skriver in "Börje" då. Om användaren lämnar textrutan tom, så ska det istället stå mitt eget namn, det vill säga "Hej Ketaminkillen1!". Där är min gissning att jag måste använda något slags if/else-statement för att ta reda på om textrutan är tom eller inte.

Såhär ser mitt HTML-formulär ut:

HTML-kod:
<form action="Test.php" method="post" name="myForm" id="myForm">
    <input type="text" placeholder="Skriv in ditt namn här..." name="namn" id="namn">
    <input type="submit" value="Skicka" name="skicka" id="skicka">
</form>

Efter lite research så tog jag reda på att metoden "post" är vanligare än "get", varpå jag använde den. Den skickar heller inte datan i klartext i URL-rutan, vilket ju också måste vara en fördel vid hantering av känslig data.

Det jag kom fram till, PHP-mässigt, är att jag skulle kunna göra såhär för att spara datan i en variabel:

Kod:
<?php

$username 
$_POST["namn"];

// Och sedan såhär för att skriva ut det:

echo "Hej " $username "!";

?>

Mitt problem är egentligen bara att jag får ett felmeddelande innan användaren ens hunnit fylla i formuläret, som gissningsvis varnar mig för att variabeln är tom, eller undefined.

Citat:
Notice: Undefined index: namn in (och sedan en massa filvägar).

Vad kan man göra åt detta? All hjälp är mycket välkommen!
Citera
2018-01-18, 18:54
  #2
Medlem
Funktionen du letar efter är isset().
Citera
2018-01-18, 19:02
  #3
Medlem
Ketaminkillen1s avatar
Citat:
Ursprungligen postat av Nich
Funktionen du letar efter är isset().

Tackar! Ska googla lite och se vad jag kommer fram till. Är den måhända till för att förhindra att felmeddelandet dyker upp om variabeln är tom eller undefined?
Citera
2018-01-18, 19:44
  #4
Medlem
Citat:
Ursprungligen postat av Ketaminkillen1
Tackar! Ska googla lite och se vad jag kommer fram till. Är den måhända till för att förhindra att felmeddelandet dyker upp om variabeln är tom eller undefined?

Funktionen kontrollerar om variabeln är definierad och inte NULL. Observera dock att en variabel som tilldelas en tom stäng som värde är definierad. Jämför med empty().

Du kan till exempel använda din submit-knapp för att avgöra huruvida formuläret har skickats eller inte:

Kod:
if( isset( $_POST['skicka'] ) ) {
    
$username $_POST["namn"];
    
//Osv...

Citera
2018-01-19, 13:37
  #5
Medlem
Ketaminkillen1s avatar
Citat:
Ursprungligen postat av Nich
Funktionen kontrollerar om variabeln är definierad och inte NULL. Observera dock att en variabel som tilldelas en tom stäng som värde är definierad. Jämför med empty().

Du kan till exempel använda din submit-knapp för att avgöra huruvida formuläret har skickats eller inte:

Kod:
if( isset( $_POST['skicka'] ) ) {
    
$username $_POST["namn"];
    
//Osv...


Okej, tack så mycket för din hjälp! Såhär ser min kod ut nu:

Kod:
if (isset ($_POST["submit"])) {
    
$username $_POST["namn"];
    echo 
"Hej, " $username "!";


Enligt min lärare, så ska mitt namn printas i det fall att användaren skickar formuläret utan att fylla i sitt namn. Är det bara att lägga till en else i sådana fall? Jag tänker mig typ såhär:

Kod:
else {
    echo 
"Hej, Ketaminkillen1!";


EDIT: Jag testade att lägga till en else, men då står det "Hej Ketaminkillen1!" tills dess att användaren matar in ett namn och skickar formuläret, varpå det ändras. Jag vill egentligen inte att det ska stå någonting innan formuläret är skickat, och först efter att formuläret är skickat så ska antingen användarens namn visas eller mitt eget, i det fallet att inget namn är ifyllt.
__________________
Senast redigerad av Ketaminkillen1 2018-01-19 kl. 13:39.
Citera
2018-01-19, 15:29
  #6
Medlem
Använd empty() till att kontrollera om variabeln är tom. Alltså: först kontrollerar du om formuläret är skickat (isset) och sedan kontrollerar du om användaren har skrivit in något (empty).

Om vi utgår från din kod:
Kod:
if (isset ($_POST["submit"])) {
    
$username $_POST["namn"];
    echo 
"Hej, " $username "!";


Så kan du kontrollera om $username är tom innan du skriver ut strängen. Om den är tom, ge den ett värde. Typ:

Kod:
if (isset ($_POST["submit"])) {
    
$username $_POST["namn"];

    if( empty( 
$username ) ) {
        
$username 'Ketaminkillen1';
    }
    
    echo 
"Hej, " $username "!";

Citera
2018-01-21, 21:59
  #7
Medlem
Ketaminkillen1s avatar
Citat:
Ursprungligen postat av Nich
Använd empty() till att kontrollera om variabeln är tom. Alltså: först kontrollerar du om formuläret är skickat (isset) och sedan kontrollerar du om användaren har skrivit in något (empty).

Om vi utgår från din kod:
Kod:
if (isset ($_POST["submit"])) {
    
$username $_POST["namn"];
    echo 
"Hej, " $username "!";


Så kan du kontrollera om $username är tom innan du skriver ut strängen. Om den är tom, ge den ett värde. Typ:

Kod:
if (isset ($_POST["submit"])) {
    
$username $_POST["namn"];

    if( empty( 
$username ) ) {
        
$username 'Ketaminkillen1';
    }
    
    echo 
"Hej, " $username "!";


Tack! Detta löste det hela

EDIT: Om jag ska förklara för min lärare vad den inbyggda PHP-funktionen isset() gör, i början av skriptet, så har jag väl förstått det rätt om den ser till att "om formuläret skickas, så är variabeln $username det som användaren skriver in i rutan med name-attributet 'namn', och om den är tom så ges ett bestämt värde till variabeln $username"?

Är det en rimlig förklaring eller är jag helt ute och cyklar?
__________________
Senast redigerad av Ketaminkillen1 2018-01-21 kl. 22:26.
Citera
2018-01-21, 22:49
  #8
Moderator
Protons avatar
Citat:
Ursprungligen postat av Ketaminkillen1
Tack! Detta löste det hela

EDIT: Om jag ska förklara för min lärare vad den inbyggda PHP-funktionen isset() gör, i början av skriptet, så har jag väl förstått det rätt om den ser till att "om formuläret skickas, så är variabeln $username det som användaren skriver in i rutan med name-attributet 'namn', och om den är tom så ges ett bestämt värde till variabeln $username"?

Är det en rimlig förklaring eller är jag helt ute och cyklar?
Har du läst manualen?

http://php.net/manual/en/function.isset.php

Som synes har den inget alls att göra med din övriga kod, den kollar rätt och slätt om en variabel är satt och ej är null.

Det du sedan gör om detta är true eller false är helt utanför scope på vad isset har för funktion.
Citera
2018-01-24, 15:57
  #9
Medlem
Ketaminkillen1s avatar
Okej, bumpar denna tråd lite. Nu har jag blivit ombedd att spara user input från tre olika textrutor, som ska skjutas in i en array. Hur gör jag detta på bästa sätt?
Citera
2018-01-24, 17:36
  #10
Medlem
Citat:
Ursprungligen postat av Ketaminkillen1
Okej, bumpar denna tråd lite. Nu har jag blivit ombedd att spara user input från tre olika textrutor, som ska skjutas in i en array. Hur gör jag detta på bästa sätt?

Vad har du provat? Hur hämtar du värden från en textruta? Vad är en array? Hur tilldelar du värden till en array?
Citera
2018-09-27, 00:08
  #11
Medlem
SKetchers avatar
Citat:
Ursprungligen postat av Ketaminkillen1
Okej, bumpar denna tråd lite. Nu har jag blivit ombedd att spara user input från tre olika textrutor, som ska skjutas in i en array. Hur gör jag detta på bästa sätt?

Möjlig bump. Men om någon annan än jag får ståfräs av ternaries.

Kod:
$arr = (isset($_POST) ? array_map(function($e){return $e;},$_POST) : die()); 
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