Textbox input wegschrijven in array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ewergreen php

ewergreen php

24/08/2010 14:45:09
Quote Anchor link
Met onderstaande scriptje had ik gehoopt al de antwoorden in een array -->$question[$count]<-- te plaatsen. Dit werkt blijkbaar niet. Iemand enig idee hoe ik dit wél aanpak?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
             <form action='poll_array.php' method='POST'>
             Vul hieronder de antwoorden in:<br />
                for($count = 1 $count <= $NumberOfOptions $count++) {//Print desired amount of options
                 Antwoord optie #.$count.: <input name='$question[$count]' type='text'><br />
                }
             <
input type='submit' value='Submit option'>
             <
/form>
             <
/div>
?>
 
PHP hulp

PHP hulp

21/05/2024 05:17:02
 
B a s
Beheerder

B a s

24/08/2010 14:48:38
Quote Anchor link
Even wat meer code plaatsen. Hoe kom je aan $NumberOfOptions? Wat bedoel je met textbox? Een textarea? Gebruik ook echo's e.d. voor highlighting want zo snapt niemand er wat van.
 
Dalando De Zuil

Dalando De Zuil

24/08/2010 14:52:09
Quote Anchor link
PHP EN HTML KAN NIET DOOR ELKAAR!!!

Neem eerst even dit door:

http://phptuts.nl/view/39

en doe het eens zo!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<form action='poll_array.php' method='POST'>
Vul hieronder de antwoorden in:<br />
<?php

for($count = 1 $count <= $NumberOfOptions $count++)
{

    echo "Antwoord optie ".$count.": <input name='".$question[$count]."' type='text'><br />";
}

?>

<input type='submit' value='Submit option'>
</form>
</div>
 
Ewergreen php

ewergreen php

24/08/2010 15:05:17
Quote Anchor link
Bas Kreleger op 24/08/2010 14:48:38:
Even wat meer code plaatsen. Hoe kom je aan $NumberOfOptions? Wat bedoel je met textbox? Een textarea? Gebruik ook echo's e.d. voor highlighting want zo snapt niemand er wat van.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
if(!isset($_POST['NumberOfOptions'])){
    echo "Vul hieronder het aantal antwoorden in:<br />";
    echo "<form action='poll_array.php' method='post'>";
    echo "<input type='text' name='NumberOfOptions'>";
    echo "<input type='submit' value='Maak poll'>";
    echo "</form>";
}
else{
    if(isset($_POST['NumberOfOptions'])){
        $NumberOfOptions = $_POST['NumberOfOptions'];
    }

        if ($NumberOfOptions <= 1){ //Check for at least 2 answers.
            echo "Please choose at least two options.";
        }
else{
            $question;
            echo "<div id='ShowOptions'>";
            echo "<form action='poll_array.php' method='POST'>";
            echo "Vul hieronder de antwoorden in:<br />";
                for($count = 1; $count <= $NumberOfOptions; $count++) {//Print desired amount of options
                echo "Antwoord optie #".$count.": <input name='$question[$count]' type='text'><br />";
                }

            echo "<input type='submit' value='Submit option'>";
            echo "</form>";
            echo "</div>";
             }

    
                if (!empty($_POST['question1'])){
                    foreach( $question as $number => $option){
                    echo "Toon optie ".$number.": ".$option." <br />";
                    }
                }
    }

?>




Toevoeging op 24/08/2010 15:10:16:

Dalando De Zuil op 24/08/2010 14:52:09:
echo "Antwoord optie ".$count.": <input name='".$question[$count]."'


De HTML output blijft met deze oplossing leeg: <input name=''>
 
- Mark -

- Mark -

24/08/2010 15:19:03
Quote Anchor link
- Je bent Nederlands en Engels door elkaar aan het halen.
- Je controle of er een numerieke waarde is ingevoerd is niet echt veilig.
- Je formulier afhandeling is ook niet echt super te noemen.
- Je mag er best wel wat meer commentaar aan toevoegen.
- HTML hoort met " en niet met ' Gebruik echo ''; om HTML weer te geven zodat je niet hoeft te escapen.
 
Mark L

Mark L

24/08/2010 17:05:40
Quote Anchor link
Van regel 8 tm 32 weet je dat !isset($_POST['NumberOfOptions']) false is. Wat betekend dat de if-statement van regel 9-11 ALTIJD true is. Dit betekend dat je em niet hoeft te vragen.

Daarbij komt dat het zetten van $NumberOfOptions zinloos is, want je kunt ook gewoon de variabele $_POST['NumberOfOptions'] gebruiken.
Misschien leuk om regel 10 te vervangen voor $NumberOfOptions = (int)$_POST['NumberOfOptions']; Dan heeft het WEL nut.

Wat is jouw plan op regel 15?

Misschien een dollar-teken ($) teveel op regel 20... (bij je name="$question[$count]"...

Op regel 27 vraag je naar $_POST['question1'], terwijl deze nooit zal bestaan. Je probeert namelijk een array aan te maken.. dat zou dan dus zijn $_POST['question'][1]. Daarbij ga je door een onbestaande variabele loopen in regel 28. $question bestaat niet. Dit zou $_POST['question'] moeten zijn. Maar ook deze bestaat niet, vanwege het dollarteken (zoals eerder aangegeven) op regel 20

Bij je form-tag gebruik je method="POST", hoewel dit niet verkeerd is, word "post" (met kleine letters) meer gewaardeerd door validators.

Dit is een kleine analyse van jouw script. Ik heb het nog niet over netheid gehad, want daar hadden mijn voorgangers het al over...
Dit is niet om je af te kraken, maar om je logisch te laten nadenken en je te helpen.
 
Ewergreen php

ewergreen php

24/08/2010 17:08:11
Quote Anchor link
Mark Coenen op 24/08/2010 15:19:03:
- Je bent Nederlands en Engels door elkaar aan het halen.
- Je controle of er een numerieke waarde is ingevoerd is niet echt veilig.
- Je formulier afhandeling is ook niet echt super te noemen.
- Je mag er best wel wat meer commentaar aan toevoegen.
- HTML hoort met " en niet met ' Gebruik echo ''; om HTML weer te geven zodat je niet hoeft te escapen.


- NL/EN is aangepast.
- Controle op numerieke waarde is aangepast, maar ik hoor graag hoe het nog beter kan. Let wel, ik ben puur voor mezelf bezig. Dit komt nooit online of iets dergelijks.
- Ik heb meer commentaar toegevoegd.
- " i.p.v. ' is volgens mij niet nodig? Maar ik hoor het graag als het echt zo is.


Verder heb ik mijn code een beetje aangepast en ben ik iets verder geraakt. Helaas wilt hij nog altijd geen "output" geven op het einde. De waarden worden wel goed weggeschreven (zag ik d.m.v. GET te gebruiken).

Iemand nog ideeën?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
if(!is_numeric($_POST['NumberOfOptions'])){ //If numerical input was given, don't show the form
    echo "Vul hieronder het aantal antwoorden in:<br />";
    echo "<form action='poll_array2.php' method='post'>";
    echo "<input type='text' name='NumberOfOptions'>";
    echo "<input type='submit' value='Maak poll'>";
    echo "</form>";
}
else{
        $NumberOfOptions = (int)$_POST['NumberOfOptions'];
        if ($NumberOfOptions <= 1){ //Check for at least 2 answers.
            echo 'Kies minstens twee opties.';
        }
else{
            echo '<div id="ShowOptions">';
            echo "<form action='poll_array2.php' method='post'>";
            echo "Vul hieronder de antwoorden in:<br />";
                for($count = 1; $count <= $NumberOfOptions; $count++) {//Print desired amount of input options
                echo "Antwoord optie #".$count.": <input name='question$count' type='text'><br />";
                }

            echo "<input type='submit' value='Submit optie'>"; //Remember the given options
            echo "</form>";
            echo "</div>";
             }

                for ($count = 1; $count <= $NumberOfOptions; $count++) { //Show the options that were just written down! - NOT WORKING YET
                    if (isset($_POST['question'.$count]) && !is_empty($_POST['question'.$count])) {
                            echo "<input type='radio' name='optie$count' value='$count'>". $_POST['question'.$count]."<br>";
                    }
                }
        }

?>



Toevoeging op 24/08/2010 17:19:22:

@ Mark L
Goeie opmerkingen, bedankt! Ik heb het hierboven al gedeeltelijk gewijzigd. Ik neem alles zeker mee! Ben volop aan't leren en dan kan je het beter direct goed doen.
Gewijzigd op 24/08/2010 17:41:13 door ewergreen php
 
Mark L

Mark L

24/08/2010 17:55:18
Quote Anchor link
De functie 'is_empty' bestaat niet. Dit moet zijn empty (of isset). Onthoud dat als de variabele leeg is, of 0 is, dat bij gebruik van empty deze als leeg beschouwd word en bij isset als gezet. Hier zit dus wel een verschil in.

Je gebruikt geen quotes (' of ") bij de string 'question' in $_POST[question.$count]. Dit moet dus zijn $_POST['question'.$count]

Houd variabelen a.u.b. buiten quotes. Op die manier zijn ze makkelijker te herkennen, te ontdekken en is je code dus makkelijker te begrijpen.
Dit doe je zo (regel 25):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<input type="radio" name="optie' . $count . '" value="' . $count . '"> ' . $_POST['question' . $count]. '<br />';
?>

Daarbij komt dat voor strings vaak single-quotes gebruikt worden, wat zou betekenen dat regel 21 zou worden echo '</div>';

Je array-oplossing was super! Echt goed! Maar je hebt het nu veranderd. Eerst maakte je een array d.m.v. inputs. Dit is heel makkelijk te behandelen en raad ik je ook zeker aan.
Dit houd dus in dat je op regel 17 weer name="questions[' . $count . ']" krijgt.
Dan kun je onderaan in je code controleren: if(!empty($_POST['questions'])) en als dat true oplevert (dus als hij NIET leeg is) dan kun je d.m.v. een foreach-loopje door deze array gaan.

Nog één ding over HTML. Je maakt nu per 'vraag' één radio-button. Deze geef je echter elk een andere naam: name='optie$count' De eerste word optie1, de tweede optie2. Dit zorgt ervoor dat ze door een browser als individuele radio-buttons gezien worden. Dit houd dus in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
[ ] Vraag 1
[ ] Vraag 2
[ ] Vraag 3


Als vraag 3 aangaat krijg je:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
[ ] Vraag 1
[ ] Vraag 2
[x] Vraag 3


Word tóch voor vraag 2 gekozen krijg je:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
[ ] Vraag 1
[x] Vraag 2
[x] Vraag 3


Nu zijn er dus 2 gekozen! Dat wil je niet. Maar dit komt omdat elke vraag een apart radiobutton-lijstje krijgt, waarbij per lijstje dus maar één button hoort.

Radiobuttons die bij elkaar horen, moeten dezelfde naam krijgen.
Dus het stukje $count in je name moet weg. Je krijgt dus: name="optie". Je value laat dan zien welke optie gekozen is ;)


Ook heb ik even je tabs wat beter leesbaar neergezet hieronder. Zoals je kunt zien word het er leesbaarder op. Elke tab staat voor een verandering in accolade. Let op: bovenstaande regelnummers heb ik gebaseerd op JOUW stuk, niet op onderstaand stuk.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
if(!is_numeric($_POST['NumberOfOptions'])){ //If numerical input was given, don't show the form
    echo "Vul hieronder het aantal antwoorden in:<br />";
    echo "<form action='poll_array.php' method='post'>";
    echo "<input type='text' name='NumberOfOptions'>";
    echo "<input type='submit' value='Maak poll'>";
    echo "</form>";
}

else {
    $NumberOfOptions = (int)$_POST['NumberOfOptions'];
    if ($NumberOfOptions <= 1){ //Check for at least 2 answers.
        echo 'Kies minstens twee opties.';
    }

    else {
        echo '<div id="ShowOptions">';
        echo "<form action='poll_array.php' method='post'>";
        echo "Vul hieronder de antwoorden in:<br />";
        for($count = 1; $count <= $NumberOfOptions; $count++) {//Print desired amount of input options
            echo "Antwoord optie #".$count.": <input name='question$count' type='text'><br />";
        }

        echo "<input type='submit' value='Submit optie'>"; //Remember the given options
        echo "</form>";
        echo "</div>";
    }

    for ($count = 1; $count <= $NumberOfOptions; $count++) { //Show the options that were just written down! - NOT WORKING YET
        if (isset($_POST[question.$count]) && !is_empty($_POST[question.$count])) {
            echo "<input type='radio' name='optie$count' value='$count'> $_POST[question$count]<br>";
        }
    }
}

?>


P.S. ik heb geen veranderingen in je code aangebracht in bovenstaande stukje code. Dat mag je zelf doen.
Gewijzigd op 24/08/2010 17:56:06 door Mark L
 
- Mark -

- Mark -

24/08/2010 18:59:47
Quote Anchor link
Hoe groot is de gehele pagina als ik vragen mag? Als ik dit zo zie allemaal dan gok ik dat je een heel vreemde/verkeerde opbouw hebt.

Quote:
- Controle op numerieke waarde is aangepast, maar ik hoor graag hoe het nog beter kan. Let wel, ik ben puur voor mezelf bezig. Dit komt nooit online of iets dergelijks.


Regel nummer 1 is nooit input vertrouwen. Het maakt niet uit of deze van jezelf is of van iemand anders. Jij kunt ook fouten maken en dan zit je met de gebakken peren als je script er van uit gaat dat je hem alleen maar correcte waardes voert.

Ik gebruik ctype_digit() voor het controleren daarvoor.
 
Ewergreen php

ewergreen php

24/08/2010 19:32:47
Quote Anchor link
Damn, bedankt! Daar kan ik een héél stuk mee verder!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.