hoe na implode elementen in input formulier zetten?
Tot en met het imploden lukt het wel, maar daarna wil ik t/m 5 invoer velden zien en daar de waarden inzetten.
Gewijzigd op 26/09/2015 14:07:37 door Johan West
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach(array_slice($_POST, ($c = count($_POST)) < 5 ? $c : 5)) as $key => $value){
echo '<input type="text" name="'.$key.'" value="'.$value.'" readonly>';
}
?>
foreach(array_slice($_POST, ($c = count($_POST)) < 5 ? $c : 5)) as $key => $value){
echo '<input type="text" name="'.$key.'" value="'.$value.'" readonly>';
}
?>
Zoiets? Dit voorbeeld is alleen niet echt veilig gebruik het dus niet in jouw code maar als dit is wat je bedoelt escape dan de waarde "$value".
Gewijzigd op 25/09/2015 20:48:50 door Johan K
Just be sure, je kan ook nog $key escapen.
PHP Maarten op 26/09/2015 09:09:56:
Just be sure, je kan ook nog $key escapen.
$key zou je eigenlijk moeten whitelisten.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$keys = ['name', 'password', 'email', 'etc'];
foreach($_POST as $k => $v){
if(!array_key_exists($k, $keys)){
die('someone has been messing with the html code..');
}
}
?>
$keys = ['name', 'password', 'email', 'etc'];
foreach($_POST as $k => $v){
if(!array_key_exists($k, $keys)){
die('someone has been messing with the html code..');
}
}
?>
Je hebt de waarden al binnen, blijkbaar is er de wens om deze -tijdelijk- te onthouden (worden readonly velden gePOST trouwens? volgens mij niet?) waarom zet je deze niet in $_SESSION (na controle op correctheid en volledigheid, uiteraard)?
Terug naar wat de intentie is van het script.
nadat de gebruiker inputvelden invult (dit is 1 t/m 5 naar keuze) wordt dit gevalideerd. (daarna gaat het naar de database)
De validatie gebeurt op een validatie pagina die de input velden opnieuw laat zien, maar dan read only.
Het lukt me wel om dit met 1 input veld te doen en dan door te zenden, maar de gebruiker heeft de keuze uit tot 5 invoervelden (x2 dus linknaam en webadres).
Wat de gebruiker de 1e keer invult is gewoon handmatige invoer, maar in dit validatie script wordt de invoer uit het vorige script gehaald dit is nu met $_POST ik zie niet 1 waarom ik dit moet aanpassen naar $_SESSION. Kan dat worden toegelicht?
In ieder geval nu is de situatie zo dat ik met var_dump een reeks krijg, maar deze reeks gaat niet vanzelf in een input veld staan. Dan moet ik op de plaats van value of een ander html attribute bepaalde php code plaatsen maar de manier waarop is me onbekend.
Kan iemand die hiermee bekend is bepaalde voorbeelden geven waardoor het duidelijker wordt?
We zijn hier al een hele tijd aan het mijmeren over mogelijke aanpakken maar het lijkt mij gewoon een stuk handiger als je je relevante code hier (weer eens) plaatst.
De hoeveelheid moeite die het jou en ons op deze manier kost om hier voortgang in te boeken staat niet in verhouding tot de complexiteit van dit probleem (een formulier met een aantal velden met linkjes, really?).
Ergo: doe eens praktisch en wees een concreet. Dit zet zo geen zoden aan de dijk.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
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
34
35
36
37
38
39
40
41
42
43
44
45
46
<html>
<?php
$linkadd = implode(" " , $_POST['linkadd']);
$linkoms = implode (" ", $_POST['linkoms']);
// $num = $_POST['aantal']; // kies tussen 1 en 5 links invoeren
$num = $_SESSION['aantal'];
$linkoms = $_POST['linkoms'];
$linkadd = $_POST['linkadd'];
echo "<center>";
echo "voer de volgende " . $num . " waarden in";
echo "</center>";
for ($i=0; $i < $num ; $i++) {
?>
<p><center>
<label for="linkoms_<?php echo $i ?>">
Omschrijving: <?php echo ($i + 1) ?>
</label>
<input type="text" name="linkoms[]"
id="linkoms_<?php echo $i ?>" value = "<?php echo $linkoms; ?>" readonly/> <br> <br>
<label for="linkadd_<?php echo $i ?>">
Het webadres <?php echo ($i + 1) ?>
</label>
<input type="text" name="linkadd[]"
id="linkadd_<?php echo $i ?>" value = "<?php $linkadd; ?>" readonly/><br><br>
</center>
</p>
<?php
}
?>
</html>
<?php
$linkadd = implode(" " , $_POST['linkadd']);
$linkoms = implode (" ", $_POST['linkoms']);
// $num = $_POST['aantal']; // kies tussen 1 en 5 links invoeren
$num = $_SESSION['aantal'];
$linkoms = $_POST['linkoms'];
$linkadd = $_POST['linkadd'];
echo "<center>";
echo "voer de volgende " . $num . " waarden in";
echo "</center>";
for ($i=0; $i < $num ; $i++) {
?>
<p><center>
<label for="linkoms_<?php echo $i ?>">
Omschrijving: <?php echo ($i + 1) ?>
</label>
<input type="text" name="linkoms[]"
id="linkoms_<?php echo $i ?>" value = "<?php echo $linkoms; ?>" readonly/> <br> <br>
<label for="linkadd_<?php echo $i ?>">
Het webadres <?php echo ($i + 1) ?>
</label>
<input type="text" name="linkadd[]"
id="linkadd_<?php echo $i ?>" value = "<?php $linkadd; ?>" readonly/><br><br>
</center>
</p>
<?php
}
?>
</html>
De output is op dit moment als volgt:
Gewijzigd op 26/09/2015 17:59:33 door Johan West
$linkadd = implode(" " , $_POST['linkadd']);
$linkadd = $_POST['linkadd'];
De tweede overschrijft uiteraard de eerste regel.
Welke wil je nou gebruiken?
Haal die andere dan ook weg.
Toevoeging op 26/09/2015 18:36:30:
na zoeken kom ik bij list() uit, maar weet niet of dit op een array of string toegepast mag/moet worden. Kan iemand dat vertellen?
Gewijzigd op 26/09/2015 18:24:13 door Johan West
- SanThe - op 26/09/2015 20:49:11:
Dat is te summier.
Het vertelt niet veel over wat je kunt met list().
Voor beginners is het niet direct duidelijk.
PHP ziet arrays anders dan strings, maar een string kan een reeks waarden bevatten.
List() is (kennelijk) een methode om een reeks waarden als afzonderlijke elementen te behandelen, maar het aantal elementen kan variëren is dit niet eenvoudig. Variabele variabelen !
Ik vermoed dat list() zou kunnen werken maar wil het aantal waarden ook kunnen instellen. Is er iemand die dat vaker heeft gedaan en deze methode wil uitleggen middels een script? (tenzij jullie denken dat dit niet de goede methode is voor mijn probleemstelling)
Gewijzigd op 26/09/2015 23:07:34 door Johan West
$_POST['linkadd'] is blijkbaar een array().
Dan kan je toch elk element apart gebruiken.
Bijvoorbeeld het eerste element uit het array().
echo $_POST['linkadd'][0];
De derde: echo $_POST['linkadd'][2];
Gewijzigd op 26/09/2015 23:26:07 door - SanThe -
ok goede tip TheSan