$_POST als je niet weet hoeveel post

Status
Niet open voor verdere reacties.

gebruiker78

Gebruiker
Lid geworden
29 jun 2010
Berichten
428
Hallo,
ik kom hier niet uit, maar als je weet hoe het anders kan hoor ik dat graag =).
ik heb bijv:
david
david1
david2
david3
david <input type='text' value='david' name='postnaam'>
dat snap ik wel dan gewoon als je het submit dit neerzetten:
$naam = $_POST['postnaam'];

maar wat als ik niet weet hoeveel resultaten er zijn en voor elk resultaat hetzelfde als hierboven wil maken en in een keer in mijn database zetten:
$naam (david tot en met david3) <input type='text' value='<?php echo $naam; ?>' name='postnaam'>

maar hoe post ik dat dan? want postnaam is al gebruikt dus ik dacht ik maak er een while loop van:
PHP:
<?php
$i = 0;
$query = mysql_query("SELECT u.easyname,f.group FROM users as u,usersf as f WHERE f.id='" . mysql_real_escape_string( $id ) . "' and f.friends=u.id");
while($row = mysql_fetch_assoc($query)){
$easyname = htmlentities($row['easyname'], ENT_QUOTES, "UTF-8" );
$group = htmlentities($row['group'], ENT_QUOTES, "UTF-8" );
?>
<tr>
<td><?php echo $easyname; ?></td><td><input name="<?php echo 'easyname'.$i; ?>" maxlength='25' onkeyup="this.value = this.value.replace (/\D+/, '')" value="<?php echo $group; ?>"></td>
</tr>
<?php
$i++;
}
?>
maarja hoe zet ik voor elk rijtje het apart in mijn database?
want ik kan niet zoiets doen:
PHP:
while(
$_POST['easyname$i']
)
dat werkt niet.
 
Je kunt gebruik maken van een array en die uitlezen. HTML ondersteunt ook arrays.

HTML:
<input type="text" name="usernames[]" />

Dan krijg je $_POST['usernames'] als een array binnen met alle values die een veld met die naam opgegeven zijn.
 
Bedankt maar ik kom toch aan met een probleem:
PHP:
$group = $_POST['group'];
foreach($group[0] as $test){
echo 'test:'.$test.'<br />';
}
als ik print_r() gebruik ziet het eruit als een array maar toch geeft hij dit aan:
Warning: Invalid argument supplied for foreach() in

en dan nog een vraagje nou heb ik netjes alles in een array maar hoe weet ik zeker dat hij bij de goeie persoon aan komt?

stel je voor:
david
david1
david2
en ik gebruik:
Code:
<td><?php echo $name; ?></td><td><input name="group[]" maxlength='25' onkeyup="this.value = this.value.replace (/\D+/, '')" value="<?php echo $group; ?>"></td>
dus dan staat er bijv.
david (inputveld: )01
david1 12
david2 45

dat dan 01 bij david terecht komt en dat bij david1 12 terecht komt. hoe krijg ik dat gedaan dan als ik die array heb?

hier is de echte code die ik gebruik maar ik geef deze voorbeelden aangezien ik niet zeker weet of je dit script begrijpt:
PHP:
<?php
if ($_SERVER['REQUEST_METHOD']=='POST' and isset($_GET['e']) and $_GET['change']=='ok') {
$group = $_POST['group'];
foreach($group[0] as $test){
echo 'test:'.$test.'<br />'; // dit geeft voorlopig nog een error, het is nog een test
}
}
?>
<form action='?e=circles&change=ok' method='POST'>
<table>
<?php
$query = mysql_query("SELECT u.easyname,f.group FROM users as u,usersf as f WHERE f.id='" . mysql_real_escape_string( $id ) . "' and f.friends=u.id");
while($row = mysql_fetch_assoc($query)){
$easyname = htmlentities($row['easyname'], ENT_QUOTES, "UTF-8" );
$group = htmlentities($row['group'], ENT_QUOTES, "UTF-8" );
?>
<tr>
<td><?php echo $easyname; ?></td><td><input name="group[]" maxlength='25' onkeyup="this.value = this.value.replace (/\D+/, '')" value="<?php echo $group; ?>"></td>
</tr>
<?php
}
?>
</table>
<input type='submit' name='submitp' value='Edit circles' class="button">
</form>
 
De array is $_POST['group'], niet $_POST['group'][0], daarom krijg je foreach problemen. Je moet direct over $group foreach'en.

Waarom is het relevant of iets bij david, david2, david3, etc terecht komt? Ik dacht dat je keys alleen bestonden omdat je niet wist dat je ze in een array kon zetten. Als dat usernames zijn dan kun je geen array gebruiken, maar dan snap ik ook niet waarom je de velden bouwt met een for loop zodat alle usernames hetzelfde lijken.

Als het je puur gaat om de volgorde dan is die nog steeds hetzelfde binnen de array, de keys zijn genummerd van 0 tot X. Als je de keys wil weten kun je die in de foreach in een variabele laten zetten:

PHP:
foreach( $array as $key => $value ) {}

Dan kun je de getallen gebruiken.
 
bekijk veranderingen enkel ter voorbeeld hoe je die ook assosiatief kan maken voor nadien

PHP:
<?php
if ($_SERVER['REQUEST_METHOD']=='POST' and isset($_GET['e']) and $_GET['change']=='ok') {
    $group = $_POST['group'];
    foreach($group[0] as $test){
        echo 'test:'.$test.'<br />'; // dit geeft voorlopig nog een error, het is nog een test
    }
}
?>
<form action='?e=circles&change=ok' method='POST'><a><!-- die vraagteken zal mogelijk niet juist zijn zie ook $_SERVER["PHP_SELF"] -->
    <table><?php
            $query = mysql_query("SELECT u.easyname,f.group FROM users as u,usersf as f WHERE f.id='" . mysql_real_escape_string( $id ) . "' and f.friends=u.id");
            while($row = mysql_fetch_assoc($query)){
                $easyname = htmlentities($row['easyname'], ENT_QUOTES, "UTF-8" );
                $group = htmlentities($row['group'], ENT_QUOTES, "UTF-8" );
                ?><tr><td>
                    <?php echo $easyname; ?></td><td><input name="group[0]" maxlength='25' onkeyup="this.value = this.value.replace (/\D+/, '')" value="<?php echo $group; ?>">
                    <?php echo $easyname; ?></td><td><input name="group[1]" maxlength='25' onkeyup="this.value = this.value.replace (/\D+/, '')" value="<?php echo $group; ?>">
                </td></tr><?php
            }
    ?></table>
    <input type='submit' name='submitp' value='Edit circles' class="button">
</form>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan