Permalänk

Skolhjälp i PHP. Nybörjare.

Hej!

Har precis börjat med PHP i skolan och har fastnat något i en uppgift.

Uppgiften i sig är att man ska skriva ut en speciell textsträng 10 gånger när jag trycker på en submit-knapp. Textsträngen bestäms av vad användaren skriver i en textruta. Detta ska skrivas ut med hjälp av for-loop och allt ska vara i en osorterad lista.

Det jag skrivit hittills är:

<input type="text" name="text"> <input type="submit" name="knapp" value="Skriv ut!"> <ul> <?php if(isset($_POST["knapp"])) { $text = $_POST["text"]; for ($i = 1; $i <= 10; $i++) { echo "<li>"; echo $text; echo "</li>"; } } ?> </ul>

Har lyckats få ut input-rutan samt knappen men det händer ingenting när jag trycker på knappen. Misstänker att det är för att knappen ej är kopplad till for-loopen.

Tack på förhand!

Lade in syntaxuppmärkning.
Permalänk
Medlem
Visa signatur

R7 5800X3D | MSI X470 GAMING PLUS | 32GB 3200MHz CL16 | Powercolor Radeon RX 5700XT 8GB Red Dragon | Samsung 850 EVO 500GB | Samsung 860 EVO 1TB | Kingston A2000 1TB | 2x 3TB HDD | Seasonic FOCUS Plus 650W Gold

Permalänk
Hedersmedlem

Som absolut minimum så behöver du lägga in dina formulärelement i just ett formulär genom att omsluta dem i en omgivning likt

<form method="post"> </form>

Utan detta så finns det ingen handling kopplad till din `submit`-knapp, varpå inget händer när du trycker på densamma,

Attributet `method="post"` används för att du vill använda just POST snarare än GET så som du har skrivit. I ditt material så har de säkert något exempel på detta.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk

Tack för länken!

Skrivet av phz:

Som absolut minimum så behöver du lägga in dina formulärelement i just ett formulär genom att omsluta dem i en omgivning likt

<form method="post"> </form>

Utan detta så finns det ingen handling kopplad till din `submit`-knapp, varpå inget händer när du trycker på densamma,

Attributet `method="post"` används för att du vill använda just POST snarare än GET så som du har skrivit. I ditt material så har de säkert något exempel på detta.

Hade helt missat att man skulle använda sig utav <form> för att få detta att fungera. La nu till det du skrev och det fungerar nu.

Tack!

Permalänk

Har nu fått det att fungera. Dock fastnar jag återigen på en kommande uppgift som ska göras.

Denna gång ska jag lägga till en ny ruta där jag ska skriva i antalet gånger som for-loopen ska göras. Hur ska detta skrivas in i for-loopen?
Har lagt till en ny input (är number rätt för detta eller ska det vara text också)?

<form method="post"> Vad ska skrivas ut? <input type="text" name="text"><br> Antal: <input type="number" name="antal"><br> <input type="submit" name="knapp" value="Skriv ut!"> </form> <ul> <?php if(isset($_POST["knapp"])) { $text = $_POST["text"]; $i = $_POST["antal"]; for ($i = 1; $i <= 10; $i++) { // Vet att något ska ändras här ovan, vet dock inte vad. Testade att skriva bara - for ($i) - men det gick inte. Några tips? echo "<li>"; echo $text; echo "</li>"; } } ?> </ul>

Tack åter igen! Ursäkta om det är väldigt simpla lösningar på dessa problem...

Permalänk
Hedersmedlem
Skrivet av Kastroullen:

Har lagt till en ny input (är number rätt för detta eller ska det vara text också)?

`type="number"` är lite nytt HTML5-godis, och är helt OK att använda (lägg till `step="1"` så begränsar du formuläret till heltal också (bara kontrollerat hos klienten)).

Skrivet av Kastroullen:

for ($i = 1; $i <= 10; $i++) { // Vet att något ska ändras här ovan, vet dock inte vad. Testade att skriva bara - for ($i) - men det gick inte. Några tips? … }

Tipset är att läsa om hur `for`-konstruktionen fungerar . Varför körs ovanstående kropp 10 gånger? Vad är `$i`, och hur förändras `$i` under dessa körningar?

Kan du svara på sådana frågor så kan du nog tänka dig hur loopen ska förändras för att kunna ta input från ditt formulär.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av Kastroullen:

Har nu fått det att fungera. Dock fastnar jag återigen på en kommande uppgift som ska göras.

Denna gång ska jag lägga till en ny ruta där jag ska skriva i antalet gånger som for-loopen ska göras. Hur ska detta skrivas in i for-loopen?
Har lagt till en ny input (är number rätt för detta eller ska det vara text också)?

<form method="post"> Vad ska skrivas ut? <input type="text" name="text"><br> Antal: <input type="number" name="antal"><br> <input type="submit" name="knapp" value="Skriv ut!"> </form> <ul> <?php if(isset($_POST["knapp"])) { $text = $_POST["text"]; $i = $_POST["antal"]; for ($i = 1; $i <= 10; $i++) { // Vet att något ska ändras här ovan, vet dock inte vad. Testade att skriva bara - for ($i) - men det gick inte. Några tips? echo "<li>"; echo $text; echo "</li>"; } } ?> </ul>

Tack åter igen! Ursäkta om det är väldigt simpla lösningar på dessa problem...

Problemet är att du försöker använda en variabel för både index och max antal, vilket inte fungerar, index måste öka med ett för varje loop medans max antalet måste vara samma hela loopen.

Testa skriva om detta:

$i = $_POST["antal"]; for ($i = 1; $i <= 10; $i++) {

Till detta:

$maxloops = $_POST["antal"]; for ($i = 1; $i <= $maxloops; $i++) {

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Medlem
Skrivet av Kastroullen:

Har nu fått det att fungera. Dock fastnar jag återigen på en kommande uppgift som ska göras.

Denna gång ska jag lägga till en ny ruta där jag ska skriva i antalet gånger som for-loopen ska göras. Hur ska detta skrivas in i for-loopen?
Har lagt till en ny input (är number rätt för detta eller ska det vara text också)?

<form method="post"> Vad ska skrivas ut? <input type="text" name="text"><br> Antal: <input type="number" name="antal"><br> <input type="submit" name="knapp" value="Skriv ut!"> </form> <ul> <?php if(isset($_POST["knapp"])) { $text = $_POST["text"]; $i = $_POST["antal"]; for ($i = 1; $i <= 10; $i++) { // Vet att något ska ändras här ovan, vet dock inte vad. Testade att skriva bara - for ($i) - men det gick inte. Några tips? echo "<li>"; echo $text; echo "</li>"; } } ?> </ul>

Tack åter igen! Ursäkta om det är väldigt simpla lösningar på dessa problem...

Du sätter med den koden $i till $_POST["antal"] för att på nästa rad ändra $i till "1" istället. Jobba med den ledtråden så finner du snart svaret.

Visa signatur

WS: MSI B350M Mortar | AMD Ryzen 7 1700 | PH-TC14PE | 32GB DDR4 3000MHz | 1TB Kingston NV2 | Intel Arc A750 8GB | 2*BenQ G2420HDB
Router: Gigabyte GA-870-UD3 | AMD Phenom II x6 1055t @ 2600MHz, 1.25V | 12GB DDR3 | 2*250GB HDD @ RAID1 | 4TB HDD
Laptop: Thinkpad X220 4291-QF6

Permalänk
Medlem
Skrivet av Tobberoth:

Problemet är att du försöker använda en variabel för både index och max antal, vilket inte fungerar, index måste öka med ett för varje loop medans max antalet måste vara samma hela loopen.

Testa skriva om detta:

$i = $_POST["antal"]; for ($i = 1; $i <= 10; $i++) {

Till detta:

$maxloops = $_POST["antal"]; for ($i = 1; $i <= $maxloops; $i++) {

Nu löser du hans läxor.. Hur tänkte du där?

Visa signatur

WS: MSI B350M Mortar | AMD Ryzen 7 1700 | PH-TC14PE | 32GB DDR4 3000MHz | 1TB Kingston NV2 | Intel Arc A750 8GB | 2*BenQ G2420HDB
Router: Gigabyte GA-870-UD3 | AMD Phenom II x6 1055t @ 2600MHz, 1.25V | 12GB DDR3 | 2*250GB HDD @ RAID1 | 4TB HDD
Laptop: Thinkpad X220 4291-QF6

Permalänk

Nu när jag ser era svar samt det svaret "Tobberoth" skrev så gick det upp för mig att jag inte bara kan ta bort det i parantesen utan måste ha en ny variabel som loopen räknar upp till. Helt logiskt, känner mig rätt korkad som inte lyckades lösa det själv haha. Har helt fel tänk men börjar förstå mer och mer nu.

Tack för att ni tar er tid och svarar

Permalänk
Medlem
Skrivet av Dracc:

Nu löser du hans läxor.. Hur tänkte du där?

Han bad specifikt om hur man ska lägga in det i for loopen, jag ser det som givet att han utnyttjar den kunskapen för att få förståelse för vad han gjorde fel.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5