Textbox input wegschrijven in array
Code (php)
1
2
3
4
5
6
7
8
9
10
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>
?>
<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>
?>
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.
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)
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
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 />";
}
}
}
?>
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=''>
- 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.
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.
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.
- 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)
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
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>";
}
}
}
?>
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
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)
1
2
3
2
3
<?php
echo '<input type="radio" name="optie' . $count . '" value="' . $count . '"> ' . $_POST['question' . $count]. '<br />';
?>
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:
Als vraag 3 aangaat krijg je:
Word tóch voor vraag 2 gekozen krijg je:
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)
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
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>";
}
}
}
?>
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
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.
Damn, bedankt! Daar kan ik een héél stuk mee verder!