Autor Zpráva
Duchaplny
Profil
Zdravím,

snažím sa spraviť si hodnotenie v PHP, ktoré funguje, ale neukladá mi to do DB podľa predstáv, a neviem prísť na to, v čom je problém alebo ako to urobiť inak..

Mám niečo takéto:
<?php

$rank=0;

$stmt = $db->query("SELECT vyrobok, pocet FROM tabulka ORDER BY pocet DESC");
while ($zaznam = $stmt->fetch(PDO::FETCH_ASSOC)) {

$rank++;
echo $rank.". ".$zaznam["vyrobok"]." - ".$zaznam["pocet"]."<br />";

$uloz = $db->prepare("UPDATE tabulka SET rank=:rank");
$uloz->execute(array(':rank' => $rank));

                                                 }
?>

Výsledné číslovanie z PHP je ok, ale do DB sa uloží len posledné číslo.. napr. keď je ich dokopy 20, tak miesto 1, 2, 3, 4, 5..., sa všade uloží číslo 20, aj keď je to v tom WHILE.

Robím to preto, bo mám stránku priamo s výrobkom a tam uvádzam ten rank, niečo ako toto je 5/20 naj výrobok na stránke, a rank hodnotia užívatelia, takže sa tie ranky menia.. nevie niekto poradiť ako to upraviť, príp. k tomu inak pristúpiť ?
Tori
Profil
Možná tohle by pomohlo: http://www.php.net/manual/en/pdostatement.closecursor.php
Duchaplny
Profil
Tori:
Možná tohle by pomohlo
hm, nepomohlo..
keď použijem: $stmt->closeCursor();, tak PHP mi vypíše len 1 riadok a do DB sa všade vypíše prvé číslo, čiže 1.. keď použijem $uloz->closeCursor();, tak sa nič nezmení a všade uloží posledné číslo.
Kajman
Profil
V update chybí where část, která by omezila úpravu např. jen na jeden řádek podle primárního klíče.
Duchaplny
Profil
Kajman:
v UPDATE nechýba WHERE, zámerne tam nie je, pretože potrebujem urobiť úpravu na všetkých riadkoch, nie len na jednom..
han5vk
Profil
Ale chýba. Ty v každom opakovaní while prepíšeš všetky hodnoty tou, ktorú máš teraz. Teda logicky, nakoniec ti tam všade ostane to posledné číslo. Potrebuješ upraviť len ten výrobok, cez ktorý práve prechádzaš. Za predpokladu že stĺpec výrobok je unikátny, tak ten update by bol asi takto:

$uloz = $db->prepare("UPDATE tabulka SET rank=:rank WHERE vyrobok=:vyrobok");
$uloz->execute(array(':rank' => $rank,':vyrobok'=>$zaznam['vyrobok']));

Prípadne ak nie je unikátny, tak použiť nejaké to ID.
Duchaplny
Profil
han5vk:
aha už chápem.. tým, že tam nebolo WHERE sa za každým cyklom prepísali čísla na aktuálne číslo, až to skončilo posledným.. to ma nenapadlo, a s tým WHERE to funguje, vďaka..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: