PDA

Bekijk Volledige Versie : loop wordt slechts eenmaal doorlopen



bjorri
09/02/07, 17:32
Hoi groep,

PHP 5, MySQL 5, apache op een windoos2k

In een script gebruik ik de volgende constructie:

<code>
while ($i <= $rows){
$mensen=mysql_fetch_array($result);
$j=$mensen[id];
$check="check" . $j;
if ($_POST[$check]){
echo "<br>$i - $j - $check - $_POST[$check]";
}
$i++;
}
</code>

input:
<tr>
<td><input type='checkbox' name='check8' value='ja' checked>
<tr>
<td><input type='checkbox' name='check13' value='ja' checked>
enz....

output:
6 - 8 - check8 - ja
en verder nix.

De vraag:
Helaas wordt de if loop slechts 1 maal herkend, alleen de eerste keer
dat aan de voorwaarde wordt voldaan. De echo-regel boven de if (zonder
de $_POST) levert ook het verwachte resultaat op.

Is het mogelijk om een variabele in de $_POST te zetten? kennelijk wel
dus maar waar gaat het dan mis?

In ieder geval alvast bedankt voor de aandacht.

bjorri.

bjorri
09/02/07, 17:32
bjorri wrote:
> Hoi groep,
>
> Is het mogelijk om een variabele in de $_POST te zetten? kennelijk wel
> dus maar waar gaat het dan mis?
>
> In ieder geval alvast bedankt voor de aandacht.
>
> bjorri.

In zoverre opgelost dat het nu wel werkt als verwacht, de query die ik
er hier uitgeknipt heb zit kennelijk in de weg. Ga ik eerst zelf op
studeren natuurlijk.

Bedankt,

bjorri.

Rik
09/02/07, 17:32
bjorri <no@nl.invalid> wrote:

> bjorri wrote:
>> Hoi groep,
>> Is het mogelijk om een variabele in de $_POST te zetten? kennelijk wel
>> dus maar waar gaat het dan mis?
>> In ieder geval alvast bedankt voor de aandacht.
>> bjorri.
>
> In zoverre opgelost dat het nu wel werkt als verwacht, de query die ik
> er hier uitgeknipt heb zit kennelijk in de weg. Ga ik eerst zelf op
> studeren natuurlijk.

Joah, mijn eerste vraag was dan ook waar $rows vandaan komt.
mysql_num_rows() of wat?

Verder wat tips:
- Als je als naam van de inputs 'check[8]' en 'check[13]' gebruikt in
plaats van 'check8' & 'check13' maakt php een mooie array voor je:

_POST Array{
check => Array{
8 => 'ja',
13 => 'ja'
)
)

Dat maakt het leven server-side weer wat makkelijker bij het formulier
verwerken. Bijvoorbeeld alle rijen ophalen die geselecteerd zijn:

$ids = array_keys($_POST['check']);
$ids = array_map('intval',$ids); //voor de veiligheid
$query = 'SELECT * FROM `table` WHERE `id` IN ('.implode(',',$ids).')';

Verder zou ik dit nooit doen:
> $j=$mensen[id];

Dit _moet_ toch echt $j=$mensen['id']; zijn, de enige reden waarom het
goed gaat is dat PHP je fout zo goed als het kan probeert te herstellen.
Zou je echter om wat voor reden dan ook een define('id',0); (of wat voor
waarde dan ook ergens ervoor hebben staan dan loopt je code in de soep.
--
Rik Wasmus

bjorri
09/02/07, 17:32
Rik wrote:
> bjorri <no@nl.invalid> wrote:
>
>> bjorri wrote:
>>> Hoi groep,
>>> Is het mogelijk om een variabele in de $_POST te zetten? kennelijk
>>> wel dus maar waar gaat het dan mis?
>>> In ieder geval alvast bedankt voor de aandacht.
>>> bjorri.
>>
>> In zoverre opgelost dat het nu wel werkt als verwacht, de query die ik
>> er hier uitgeknipt heb zit kennelijk in de weg. Ga ik eerst zelf op
>> studeren natuurlijk.
>
> Joah, mijn eerste vraag was dan ook waar $rows vandaan komt.
> mysql_num_rows() of wat?
>
Klopt helemaal, ik probeerde zo veel mogelijk weg te laten om tot de
kern te komen.

> Verder wat tips:
> - Als je als naam van de inputs 'check[8]' en 'check[13]' gebruikt in
> plaats van 'check8' & 'check13' maakt php een mooie array voor je:
>
> _POST Array{
> check => Array{
> 8 => 'ja',
> 13 => 'ja'
> )
> )
>
> Dat maakt het leven server-side weer wat makkelijker bij het formulier
> verwerken. Bijvoorbeeld alle rijen ophalen die geselecteerd zijn:
>
> $ids = array_keys($_POST['check']);
> $ids = array_map('intval',$ids); //voor de veiligheid
> $query = 'SELECT * FROM `table` WHERE `id` IN ('.implode(',',$ids).')';
>
> Verder zou ik dit nooit doen:
>> $j=$mensen[id];
>
> Dit _moet_ toch echt $j=$mensen['id']; zijn, de enige reden waarom het
> goed gaat is dat PHP je fout zo goed als het kan probeert te herstellen.
> Zou je echter om wat voor reden dan ook een define('id',0); (of wat voor
> waarde dan ook ergens ervoor hebben staan dan loopt je code in de soep.
> --Rik Wasmus

Jouw(?) vorige advies (paar maanden terug) om overal `` en '' te
gebruiken heb ik zeer ter harte genomen, ik vind het nu zelfs veel
duidelijker staan. Dat ik hier weer de zelfde fout maak komt dus omdat
ik eigenlijk nog nix weet van arrays.

Toch blijft het vreemd dat als ik de query *in die loop* laat uitvoeren
dat het dan niet werkt en met //voor het uitvoeren van de query werkt
het wel naar verwachting. Is het een vreemde constructie om een query in
een loop te zetten en dus mogelijk tientallen keren achter elkaar te
laten draaien?

Eerst maar eens jouw tips gaan verwerken en zien wat er dan van komt. En
flink wat lezen natuurlijk over arrays.

Hartelijk dank weer!

bjorri.

bjorri
09/02/07, 17:32
bjorri wrote:
> Rik wrote:
<goede adviezen>
> Is het een vreemde constructie om een query in
> een loop te zetten en dus mogelijk tientallen keren achter elkaar te
> laten draaien?
>
> Eerst maar eens jouw tips gaan verwerken en zien wat er dan van komt. En
> flink wat lezen natuurlijk over arrays.
>
> Hartelijk dank weer!
>
> bjorri.

Rik,

Door mezelf deze vraag te stellen tijdens het bestuderen van je adviezen
ben ik op het juiste spoor gezet, met als gevolg een veel nettere
oplossing dan de eerdere versie.

Geweldig dus, ik heb nog heel veel te leren :-)

Bedankt, (ook namens het goede doel),

bjorri.