Mi a hiba a kódban, miért viszi fel a megadott érték többszörösét?
Már rengeteg hibát kijavítottam egy weboldalon és már csak pár van hátra, de egy dologra most nem jövök rá.
Meg van adva, hogyha rákattintok egy gombra egy értékhez, egyszerűség kedvéért 'állapot' adjon hozzá 'állapot' = 'állapot' +5 -öt. És vonjon le ugyanennyit a 'pénz' értékből, szintén a fentebbi módszerrel. Nemrég álltam át a MySQLi-re a sima query-kről és az egész értékfelvitel egy ilyen lekérdezésbe van ágyazva. Azaz mysqli bind lekérdezésen belül bind-es felvitel van (vagy több).
Viszont azt vettem észre hogy ahány sor van azonos id mezővel (nem a primary) annyiszor veszi le az értéket, hiába van külön választva a kódolás az egyes neveknél.
Azaz: pl. 1-es id név: Béla
1-es id név: Judit
Id és név szerint is meg van határozva a lekérdezés!! Alább a kód:
if($stmt = $mysqli->prepare("SELECT allapot,nev,penz FROM users WHERE id = ?")){
$stmt->bind_param('s',$_SESSION['FBID']);
$stmt->execute();
$stmt->store_result();
$num_of_rows = $stmt->num_rows;
$stmt->bind_result($allapot,$nev,$money);
while ($stmt->fetch()) {
$stmt2 = $mysqli->prepare("UPDATE users SET `allapot` = `allapot` + 5, `penz` = `penz` - 5 WHERE id = ? AND nev = ?");
$stmt2->bind_param("ss", $_SESSION['FBID'],$_GET['nev']);
$stmt2->execute();
$stmt2->close();
}
$stmt->free_result();
$stmt->close();
}
Már több kérdésem is volt a témában különböző oldalakon, kérlek ne szidjatok :)
Köszönet mindenkinek!
$stmt->bind_result($allapot,$nev,$money);
ezt a sort persze elírtam most...
helyette itt is:
$stmt->bind_result($allapot,$nev,$penz);
A gép pontosan azt csinálja, amit mondtál. Ha az id ismétlődik, akkor az elsődleges kulcsot kéne helyette megadni a WHERE után, amiből csak egy van. Tulajdonképpen meg is válaszoltad magadnak a kérdést.
Továbbá egyáltalán nem kéne id-nek hívni egy mezőt, ami nem elsődleges kulcs, és több egyforma lehet belőle. Ez az öngyilkosság egyik fajtája.
Oké ez idáig logikus :D
Csak azt nem értem hogyha egyszer WHERE id = ? AND nev = ? akkor nem mind a kettőnek teljesülnie kéne ahhoz hogy megkapja az értéket? Ugyanis a nevet pedig GET-el szerzem..
Tehát kiválasztom az id-t az adatbázisból, kapok 3 értéket 3 különböző névvel, eztán kéne már a név szerint tovább szelektálnia a 3-ból. Az is be van állítva, hogy 1 id-hez csak 1 db azonos név kerülhet.
Itt kéne az előzőleg kiválasztott id-hez társított névnél (ha létezik ez a név) frissíteni az értéket.
A WHERE id = ? lekérdezés újból pedig azért fontos mert különböző id-ekhez lehet ugyan az a név.
Tehát pl. lehetséges:
id=1 nev=Béla
id=2 nev=Béla
De lehetetlen:
id=1 nev=Béla
id=1 nev=Béla
"Tehát pl. lehetséges:
id=1 nev=Béla
id=2 nev=Béla
De lehetetlen:
id=1 nev=Béla
id=1 nev=Béla"
Ilyet nem csinálunk.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!