Olen yrittänyt saada semmoista skriptiä, että formiin kirjoitetaan nimi ja joku luku. Sitten haetaan php:llä tietokannasta nimeä vastaava rivi ja lisätään formiin annettu luku "luku" -sarakkeeseen. Alla oleva skripti ei muuta lukua nollasta miksikään, miksei?
<?php //HAETAAN LUKU //muodostetaan yhteys tietokantapalvelimeen $yhteys = mysql_connect("localhost", "******", "******") or die ("Yhdistäminen ei onnistunut!"); // valitaan tietokanta "test" mysql_select_db("test", $yhteys) or die ("Tietokantaa ei löytynyt!"); $kysely = "SELECT luku FROM taulukko WHERE name = '{$_POST['formname']}' "; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys) or die ("Virhe kyselyssä!"); //käydään taulukko läpi for ($i = 0; $i < mysql_num_rows($haku); $i++) { //haetaan goals muuttujiin $lukuvar = mysql_result($haku, $i, "luku"); } $lukuvar = $lukuvar + {$_POST['formluku']}; //TALLENNETAAN PÄIVITETYT TIEDOT TIETOKANTAAN mysql_select_db("test", $yhteys) or die ("Tietokantaa ei löytynyt"); mysql_query("UPDATE taulukko SET luku = $lukuvar WHERE name = '{$_POST['formname']}' "); //suljetaan yhteys mysql_close($yhteys); ?>
Miksi tuo ei toimi, missä kohtaa on virhe?
Olisiko tuohon muuten jotain vaihtoehtoista, yksinkertaisempaa tapaa tehdä hakemani asia?
Eli miss
En ole varma, mutta muistelisin että muuttujissa pitäs käyttää heittomerkkejä?
mysql_query("UPDATE taulukko SET luku = '$lukuvar' WHERE name = '{$_POST['formname']}' ");
Eihän nyt integereihin laiteta heittomerkkejä?
Siis tuon $lukuvar:n pitäisi olla vanha luku + formiin käyttäjän kirjoittama luku.
Testaamatonta koodia:
<?php //HAETAAN LUKU //muodostetaan yhteys tietokantapalvelimeen $yhteys = mysql_connect("localhost", "******", "******") or die ("Yhdistäminen ei onnistunut!"); // valitaan tietokanta "test" mysql_select_db("test", $yhteys) or die ("Tietokantaa ei löytynyt!"); $kysely = "SELECT luku FROM taulukko WHERE name = '".$_POST['formname']."'"; //suoritetaan kysely $haku = mysql_query($kysely, $yhteys) or die ("Virhe kyselyssä!"); //käydään taulukko läpi for ($i = 0; $i < mysql_num_rows($haku); $i++) { //haetaan goals muuttujiin $lukuvar = mysql_result($haku, $i, "luku"); } mysql_query("UPDATE taulukko SET luku = ".$lukuvar + $_POST['formluku']." WHERE name='" . $_POST['formname']."'"); //suljetaan yhteys mysql_close($yhteys); ?>
Biotank kirjoitti:
Eihän nyt integereihin laiteta heittomerkkejä?
Muuttujiin ei tule ikinä, oli ne mitä tyyppiä tahansa. Ainoastaa alustettaessa. Eikä kaarisulkeita, jos ei stringin sisällä.
Et tarvitse kuin yhden sql-lauseen:
UPDATE taulukko SET luku = luku + '{$_POST['formluku']}' WHERE name = '{$_POST['formname']}'
Jos ei toimi niin tarkista että lomakkeen kentät on nimetty oikein.
$lukuvar = mysql_result($haku, $i, "luku");
Mitä itse asiassa tuo $i tuossa? Siis se on muuttuja jonka arvo kasvaa tuossa silmukassa, mutta... kyllä ymmärrettiin varmaan. php.netistä on paha mennä mitään sanomaan kun enkun kanssa on vähän onkelmia.
Tai kun ei toimi :/
Se $i merkkaa haettavan rivin numeroa. Sillä tuo for käy sen läpi rivi riviltä ja tuo $i kertoo tuolle mysql_result miltä riviltä se tieto haetaan.
Kokeileppa vielä sellaista että otat nuo SQL-lausekkeissa käytettävät $_POST muuttujat tavallisiin muuttujiin ennen niiden käyttöä lauseessa. Itselläni ainakin joskus ilmeni niiden kanssa ongelmia, jollei näin tehnyt. Tiedä sitten, kuhan vain ideoita heittelen.
Edit: Niin ja nuo kyselyt kannattaa echotella ja katsoa näyttävätkö ne oikeilta je meneeko niihin sellaisia arvoja joita haitkin.
Edelleenkään en näe mitään syytä noin monimutkaiseen koodiin, luvun lisääminen jo tietokannassa olevaan arvoon kun onnistuu yhdellä UPDATE-lauseella:
<?php $yhteys = mysql_connect("", "", "") or die ("Yhdistäminen ei onnistunut!"); mysql_select_db("", $yhteys) or die ("Tietokantaa ei löytynyt!"); $kysely = "UPDATE taulukko SET luku = luku + '{$_POST['formluku']}' WHERE name = '{$_POST['formname']}'"; // echo '<pre>sql: ',$kysely,'</pre>'; mysql_query($kysely, $yhteys) or die ("Virhe kyselyssä!"); mysql_close($yhteys); ?>
Oii... oot meedio!
Vitsi tunnen itseni laiskaksi, tyhmäksi lusmuksi nyt :/
Miksi tuo minun ei toiminut?
Aihe on jo aika vanha, joten et voi enää vastata siihen.