Eli sain ihan järjettömän errorin kun lisään riviä PDO:lla tietokantaan:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'' in /home/web00439/public_html/gameheaven/the_gangster/luodaan_tunnus.php:19 Stack trace: #0 /home/web00439/public_html/gameheaven/the_gangster/luodaan_tunnus.php(19): PDOStatement->execute(Array) #1 {main}
<?php $rivi_lisaa = $connection->prepare("INSERT INTO the_gangster (Kayttaja, ID, Arvo, Rahaa, Kultaa, Pro, Voima, Nopeus, Terveys, Kestävyys, Taso, Kokemus, Parannus_pisteet, max_kokemus, Pilvea, Sijainti, Ryostaminen, max_reppu, Hyokkays, Puolustus, Pilvifarmin_taso, talli_max, max_terveys, Mieliala, Paa, Tarkkuus, Tekniikka) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $rivi_lisaa->execute(array($username, $tempid, "Uusi kasvo", 500, 20, 7, 1, 1, 100, 10, 1, 1, 2, 25, 1, "Suomi", 1, 1, 1, 1, 1, 1, 100, 100, 1, 1, 1));
Eli rivi 19 johon errori viittaa on tuo: execute(array(jnejne));
Mistähän tuo johtuu kun ei ole itselläni mitään käryä?
Yrität tallentaa kantaan toisen rivin samalla PRIMARY KEY -arvolla (1). Ei ole sallittua.
Älä aseta ID:tä itse. Tee sarakkeesta AUTO_INCREMENT-sarake, jätä ID kokonaan pois kyselystä ja hae automaattisesti luotu ID lisäyksen jälkeen funktiolla $connection->lastInsertId().
Mutta kun sivustooni rekisteröityy käyttäjä saa itselleen ID:n. Kun hän menee pelaaman tehdään hänelle pelin omaan tietokantaan omat tiedot. Eikös systeemit mene aika sekaisiksi jos joka pelissä on eri ID?
Systeemi menee juuri sekaisin jos joka pelaajalla/pelissä on sama ID.
Mikä tuo $tempid sitten on, jos se ei ole käyttäjän ikioma, yksilöllinen ID? Mitään ongelmaa ei ole, jos käyttäjällä on oma ID ja jokainen käyttäjä on tuossa taulussa vain kerran.
Ei.. tuntuuko minusta vain että selitän asiat vaikeasti. :D
Pelaaja Pertti rekisteröityy tehogamesiin. Hän on ensimmäinen ja sää ID 1.
Pelaaja Pena rekisteröityy toisena ja saa ID 2.
Sitten Pena menee pelaamaan peliä The Gangster ja systeemi havaitsee, että hänellä ei ole the gangsterissa vielä tietoja joten ne tehdään. Eli käyttäjä ohjataan luodaan_tunnus.php sivulle.
Tässä kohtaa tietokantaan tulee ensin perus tiedot eli:
Käyttäjänimi: Pena
ID: 2
sitten TheGangsterin jutut perään.
No jos teenkin sen niin, että Thegangsterinkin tietokannassa ID on auto increment niin tilannehan on se, että penan tunnus on ID:llä 2 mutta kun hän menee pelaamaan TheGangsteria ID onkin 1.. eli hänet kirjataan pihalle koska istunto tarkistukset luulevat hänen kaapanneen toisen tunnuksen.
EDIT:
<?php $tempid = $_SESSION["id"]; $username = $_SESSION["username"];
siinä on $tempid. Se on istunnon tulos. Kun käyttäjä kirjautuu sisälle tarkistetaan käyttäjätunnus ja salasana. Sen jälkeen etsitään niihin sopiva tunnus tietokannasta ja sieltä ID ja lisätään istuntoon.
No tietenkään et tee thegangsteriin pelaajaId kenttää autoincrementiksi. Mutta jos määrität pelaajaId kentän Primary Keyksi, niin sitten pidät huolen siitä, että et myöskään lisää samaa käyttäjää sinne kahteen kertaan.
Ja löysin vian. Kiitos. Löysin hieman pintaa syvemmältä väärän sivuohjauksen ja se yritti todellakin ajattaa kokoajan samaa henkilö samaan tietokantaan monta monta kertaa. :D
Kiitos. =)
Aihe on jo aika vanha, joten et voi enää vastata siihen.