Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Dilemma php:n ja mysql:n kanssa

opazz [22.12.2006 11:56:55]

#

Mulla on sellanen erikoinen ongelma että tietokantaan laittaminen välillä toimii ja välillä ei...syytä en keksi millään..Kuitenkin tälläsen error:in se antaa kun laittaminen epäonnistuu..

1064: You have an error in your SQL syntax.

Olga [22.12.2006 12:08:21]

#

Syntaksivirhe SQL-lauseessa. Pistä tuohon virhetulostuksen yhteyteen myös se yrittämäsi SQL-lause, jolloin virhe löytyypi.

opazz [22.12.2006 12:23:58]

#

Tossa sen on:

<?php
$tietoja = mysql_query("Insert Into tilauskanta(Tilaustunnus,Matkatunnus,Matkakohde,Majoitus,Mkesto,Mlahto, Mpaluu,Asiakastunnus,Etunimi,Sukunimi,Osoite,Pnumero,Ppaikka,Sposti, Puhelin,Tunnus,Vahvistus,Ehdot,LMatkustajaA,LMatkustajaATunnus, LMatkustajaB,LMatkustajaBTunnus,LMatkustajaC,LMatkustajaCTunnus, Myhteensa,Tila)VALUES('$uusiarvo','$ida','$kohde','$majoitus', '$mkesto','$mlahto.','$mpaluu','$uusiarvoB','$enimi','$snimi', '$osoite','$numero','$paikka','$posti','$puhelin','$tunnus', '$vahvistan','$ehdotan','$lisaA','$lisaAtunnus','$lisaB', '$lisaBtunnus','$lisaC','$lisaCtunnus','$yhteensa','$tila')");
?>

Kokeilin tässä omalta koneelta laittaa suoraan samalla sql-lauseella tiedot tietokantaan ja se meni läpi että heilahti. Mut ku kokeilin tolta ulkopuoliselta serveriltä niin homma vaan ei toiminu.

Mod. edit. kooditagit

ajv [22.12.2006 12:37:10]

#

Pistä toi tietokantakysely ensin muuttujaan ja tulosta se, niin näet sen kyselyn, mitä kantaan yritetään ajaa:

<?php
$sql = "Insert Into tilauskanta(Tilaustunnus,Matkatunnus,Matkakohde,Majoitus,Mkesto,Mlahto, Mpaluu,Asiakastunnus,Etunimi,Sukunimi,Osoite,Pnumero,Ppaikka,Sposti, Puhelin,Tunnus,Vahvistus,Ehdot,LMatkustajaA,LMatkustajaATunnus, LMatkustajaB,LMatkustajaBTunnus,LMatkustajaC,LMatkustajaCTunnus, Myhteensa,Tila)VALUES('$uusiarvo','$ida','$kohde','$majoitus', '$mkesto','$mlahto.','$mpaluu','$uusiarvoB','$enimi','$snimi', '$osoite','$numero','$paikka','$posti','$puhelin','$tunnus', '$vahvistan','$ehdotan','$lisaA','$lisaAtunnus','$lisaB', '$lisaBtunnus','$lisaC','$lisaCtunnus','$yhteensa','$tila')";

$tietoja = mysql_query($sql) or die(mysql_error() . " SQL: " . $sql);
?>

Veikkauksia, miksi ei toimi:
- olettaen että tiedot tulevat lomakkeelta, niin palvelimella register_globals off, kotonasi päällä. Ratkaisu: käytä $_GET ja $_POST -taulukoita
- antamasi tiedot sisältävät SQL:n kannalta haitallisia merkkejä, esim. hipsuja. Ratkaisu: mysql_real_escape_string()

opazz [22.12.2006 12:46:16]

#

Se on paljon mahdollista että tiedot sisältävät haitallisia merkkejä koska ne on salattu Mcrypt_Rijdael_256 avulla....

Mut laiton noi salatut muuttujat vielä ton base64_encode() sisään niin johan rupes tietokantakin valittamasta.

ajv [22.12.2006 14:21:25]

#

Kannattaa noista muuttujista silti parsia ("escapettaa", mitenköhän tämänkin suomentaisi) haitalliset merkit pois kaiken varalta:
http://wiki.mureakuha.com/wiki/SQL-injektio

opazz [22.12.2006 14:32:56]

#

Oot ihan oikeassa. Laitoin kyllä sen kans saman tien tonne olion funktioksi jos sattuu käymään tietojen laittajalla virhe..

Vastaus

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

Tietoa sivustosta