Tämännäköisellä koodinpätkällä yritän tallentaa MySQL-tietokantaan käyttäjän muokkaamaa tietoa kahteen tauluun yhtä aikaa, mutta huonolla menestyksellä.
Vastaus on aina vaan "Tietuetta EI muokattu" ja kaikenlaista on jo kokeiltu. Joku tarkka voi huomata että 4 muuttujaa jää tallentamatta, mutta ne ovat lomakkeella "hidden"-kentissä, jottei kayttäjä voi niitä muokata. Osaako kukaan opastaa oikeaan suuntaan? Kiitokset etukäteen.
Koodi:
//Tietueen päivittäminen function paivita_tietue($user_id, $tunnus, $salasana, $last_load, $istunto, $level, $company_id, $name, $address, $zip, $city, $phone, $fax, $internet, $email, $support) { $sql = "UPDATE users, companies SET users.tunnus='$tunnus', users.salasana='$salasana', users.level='$level', companies.name='$name', companies.address='$address', companies.zip='$zip', companies.city='$city', companies.phone='$phone', companies.fax='$fax' companies.internet='$internet', companies.email='$email', companies.support='$support', WHERE users.user_id='$user_id' AND companies.userid='$user_id'"; $result = query($sql); if (mysql_affected_rows() > 0) { echo "Tietue muokattiin onnistuneesti.<br>\n"; echo "'$tunnus', '$salasana', '$level', '$name', '$address', '$zip', '$city', '$phone', '$fax', '$internet', '$email', '$support' \n"; } else { echo "Tietuetta EI muokattu<br>\n"; } }
Mod. lisäsi kooditagit
(tässä oli virheellistä tietoa)
Ensinnäkin on turha laittaa kyselyyn niitä kenttiä, jotka eivät muutu. Erityisesti user_id:n muuttaminen näyttää pahalta kyselyssä. Lisäksi kyselyssäsi asettaisit kaikille käyttäjään viittaaville companies-taulun riveille nuo samat tiedot, onko tämä tosiaan tarkoitus? Järki sanoisi, että haluat päivittää tietyn users-rivin ja tietyn companies-rivin, jolloin tulisit hyvin toimeen kahdella erillisellä kyselyllä.
SQL-debuggauksen perusteet: katso, mitä SELECT sanoo samoilla tauluilla ja ehdoilla.
En tuosta Grezin sanomasta tiedä, mutta tein testitauluuni vastaavan kyselyn, joka kyllä toimi oikein hyvin. Kas näin:
SELECT * FROM hylly, tuotteet WHERE tuotteet.koodi = 1 AND hylly.koodi = tuotteet.koodi; +-------------+-------------+----------------+-----------------+ | hylly.koodi | hylly.maara | tuotteet.koodi | tuotteet.nimike | | 1 | 10 | 1 | peruna | +-------------+-------------+----------------+-----------------+
UPDATE hylly, tuotteet SET hylly.maara = 20, tuotteet.nimike = 'bataatti' WHERE tuotteet.koodi = 1 AND hylly.koodi = tuotteet.koodi;
SELECT * FROM hylly, tuotteet WHERE tuotteet.koodi = 1 AND hylly.koodi = tuotteet.koodi; +-------------+-------------+----------------+-----------------+ | hylly.koodi | hylly.maara | tuotteet.koodi | tuotteet.nimike | | 1 | 20 | 1 | bataatti | +-------------+-------------+----------------+-----------------+
Ah joo, ajattelin taas jotain muuta tietokantamoottoria kuin MySQL:ää ja MySQLstä sitten varmistin niin tuli vastaan ensin vaan tuo "Single-table syntax" ja sitten on näköjään erikseen "multiple-table syntax". Eli pahoittelut väärästä tiedosta, MySQL:ssä on sittenkin mahdollista päivittää useampaa taulua yhdellä UPDATElla. Kannattaa kuitenkin huomata, että voi rajoittaa porttaamista toisille kannoille jos tuota käyttää.
Sain onnistumaan, kiitos avusta!
Aihe on jo aika vanha, joten et voi enää vastata siihen.