Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL UPDATE

Sivun loppuun

Biotank [22.03.2005 17:00:47]

#

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

Gugu [22.03.2005 17:09:13]

#

En ole varma, mutta muistelisin että muuttujissa pitäs käyttää heittomerkkejä?

mysql_query("UPDATE taulukko SET luku = '$lukuvar'  WHERE name = '{$_POST['formname']}' ");

Biotank [22.03.2005 17:47:59]

#

Eihän nyt integereihin laiteta heittomerkkejä?

Siis tuon $lukuvar:n pitäisi olla vanha luku + formiin käyttäjän kirjoittama luku.

Juice [22.03.2005 18:41:09]

#

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

folio [22.03.2005 18:44:14]

#

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.

Biotank [22.03.2005 21:10:55]

#

$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 :/

raezel [23.03.2005 08:51:26]

#

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.

folio [23.03.2005 12:26:42]

#

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);
?>

Biotank [23.03.2005 18:15:43]

#

Oii... oot meedio!

Vitsi tunnen itseni laiskaksi, tyhmäksi lusmuksi nyt :/

Miksi tuo minun ei toiminut?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta