[php] array uit POST geeft foute waarde

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik trek wat data uit de database en laat die doormiddel van een lus zien. Gebruikers kunnen dan doormiddel van checkboxjes instellingen maken.

De bedoeling als ik het zaakje doormiddel van een button update dat hij verschillende rijen moet gaan updaten. Kheb daarvoor een hidden field gemaakt met het id erin.

Khoop dat ik 't goed ga uit leggen want tis redelijk ingewikkeld :). Als er nu bijv. 2 rijen uit de database komen en ik zet in de onderste rij een vinkje wordt hij geupdate in de allereerste rij. Als ik alle rijen selecteer lukt het wel gewoon. Ik heb met print_r mijn array bekeken en daar zie ik al 't probleem. Waar ik ook een waarde zet in die array komt de eerste altijd op$_POST['status'][0] terwijl de rest van de gegevens die ik update helemaal niet op 0 zitten maar bijv. bij rij 10. Kortom hij gooit de gegevens door elkaar. Tis een redelijk ingewikkeld verhaal als ik 't zo terug lees maar wie weet kunnen jullie er wat mee.

Onderstaand de code die ik gebruik:
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
<?
$sql = mysql_query("SELECT * FROM moderator ORDER by nickID");
while ($result = mysql_fetch_array($sql)) {
?>
        <tr>
            <td><? username($result['nickID'], true, false, false); ?>
            <input type="hidden" name="mod_id[]" value="<? echo $result['nickID']; ?>"></td>
            <td><select name="status[]">
            <option value="admin"<? if ($result['status'] == "admin") echo " selected"; ?>>Administrator
            <option value="mod"<? if ($result['status'] == "mod") echo " selected"; ?>>Moderator
            <option value="forum"<? if ($result['status'] == "forum") echo " selected"; ?>>Forum Moderator
            </select></td>
            <td><input type="checkbox" name="wp[]" value="x" <? if ($result['wp']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="vp[]" value="x" <? if ($result['vp']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="ws[]" value="x" <? if ($result['ws']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="ban[]" value="x" <? if ($result['ban']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="fa[]" value="x" <? if ($result['fa']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="pb[]" value="x" <? if ($result['pb']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="sb[]" value="x" <? if ($result['sb']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="vb[]" value="x" <? if ($result['vb']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="bb[]" value="x" <? if ($result['bb']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="no[]" value="x" <? if ($result['no']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="pmis[]" value="x" <? if ($result['pmis']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="rmis[]" value="x" <? if ($result['rmis']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="pp[]" value="x" <? if ($result['pp']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="pw[]" value="x" <? if ($result['pw']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="wb[]" value="x" <? if ($result['wb']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="ww[]" value="x" <? if ($result['ww']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="mt[]" value="x" <? if ($result['mt']) echo "checked"; ?>></td>
            <td><input type="checkbox" name="mw[]" value="x" <? if ($result['mw']) echo "checked"; ?>></td>
        </tr>
<?
}
?>


En onderstaande is de lus die ik maak om strax alles te kunnen updaten:

PHP:
1
2
3
4
5
6
7
for($i = 0; $i < count($_POST['mod_id']); $i++) {

  echo "<PRE>";
  print_r($_POST);
  echo "</PRE>";

}

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Natuurlijk gooit hij gegevens door elkaar. Je hebt immers nergens afgedwongen welk veld bij welk veld hoort. Wanneer je zelf geen indez opgeeft gaat hij zelf tellen in volgorde van binnenkomst. Combineer je dit met het feit dat een checkbox alleen wordt meegezonden wanneer deze aangevinkt is dan begrijp je dat alles als het ware naar boven verplaatst.

Je maakt het jezelf een stuk makkelijker wanneer je in je veldnamen ook de index opneemt en de [] dus niet leeg laat. Goede kandidaat zou je userId kunnen zijn ;).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jah okeej dan geef ik ze het nummer 't id

Bijv. value=status[<? $result['mod_id']; ?>]

Maar hoe moet mijn lus er dan uit zien want ik moet tenslotte zeggen op welke plek het id moet komen. Geen idee hoe je dit zou moeten verweselijken. Want nu gebruik $i maar dat heeft nix met de info uit de post te maken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ehm...Janoz doelt op het "name" attribuut van je checkboxes hoor. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Excuses dat value hoort name te zijn zo staat het ook in mijn scripts alleen bij het invullen van m'n post heb ik schijnbaar perongelijk value getypt. Maar dit heb ik idd dus goed staan.

Heb verder al met een foreach lus zitten klooien maar ik weet simpelweg niet hoe ik het voor elkaar moet krijgen. Ik wil ook geen kant en klaar antwoord maar eventueel een link naar een soort gelijk probleem of meer informatie over hoe dit te werk gaat.

Zelf script ik al een paar jaar maar heb nooit een post hoeven te gebruiken icm een array dus zou echt niet weten hoe of wat.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je zal in je evaluatiepagina moeten kijken voor welke id's er allemaal een checkbox kan bestaan. Daarvoor heb je je mod_id array al, dus dat lukt wel. Je gaat dus voor elk mod_id kijken of de bijbehorende checkboxes verstuurd zijn (met isset bijvoorbeeld), en zo ja: dan is ie aangevinkt, zo nee, dan staat ie uit. Moet geen probleem zijn, toch?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1