Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a kódban, miért...

Mi a hiba a kódban, miért viszi fel a megadott érték többszörösét?

Figyelt kérdés

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!



2018. jan. 19. 15:07
 1/5 A kérdező kommentje:

$stmt->bind_result($allapot,$nev,$money);

ezt a sort persze elírtam most...

helyette itt is:

$stmt->bind_result($allapot,$nev,$penz);

2018. jan. 19. 15:08
 2/5 anonim ***** válasza:

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.

2018. jan. 19. 15:37
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

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.

[link]

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

2018. jan. 19. 15:55
 4/5 anonim ***** válasza:
Most nem fogom mélyebben beleásni magam, de szerintem van egy while ciklusod, ami annyiszor fut, ahány van abból az id-ből. Hiába van egy id-név páros csak egyszer, mert ugyanarra a névre akkor is annyiszor fut a frissítés, ahányszor a while ciklus.
2018. jan. 19. 16:37
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

"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.

2018. jan. 19. 17:50
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!