Ugh!
mulla on lomake, joka työntää $_POSTilla tietoa php-tiedostolle. Sieltä $_postin tiedot lähtevät tietokantaan.
Ongelmana on se, että toisinaan tietueita tulee kaksi kappaletta. Mikä tähän on syynä? Johtuuko se esim. siitä, että samalla sivulla luen tietokannasta samaisen tietueen tiedot esiin saadakseni tallennetun id:n? (Vai onko mulla joku pahainen bugi myslissä tai php:ssä?)
En ihan ymmärtänyt ongelmaa..
Tuleeko $_POST inputteja kaksin kappalein formin submittauksen jälkeen php:lle vai meneekö kantaan kaksi riviä samaa tietoa?
kantaan menee kaksi riviä samaa tietoa. tuo ongelma esiintyy vain postia käyttäessä, getillä ei ole ongelmia, mutta getillä muuttujat näkyvät selaimessa joten pitäisi käyttää postia...
Saatko koodin tähän? Tuntuisi, että ongelmana on suoritusjärjestys.
Täältä tiedot tulevat:
echo(" <form action=\"vahvistus.php\" method=\"POST\"> <input type=\"hidden\" name=\"nimi\" value=\"$_POST[nimi]\"> <input type=\"hidden\" name=\"losoite\" value=\"$_POST[losoite]\"> <input type=\"hidden\" name=\"pnro\" value=\"$_POST[pnro]\"> <input type=\"hidden\" name=\"ptpaikka\" value=\"$_POST[ptpaikka]\"> <input type=\"hidden\" name=\"puhnro\" value=\"$_POST[puhnro]\"> <input type=\"hidden\" name=\"email\" value=\"$_POST[email]\"> <input type=\"hidden\" name=\"vari\" value=\"$_POST[vari]\"> <input type=\"hidden\" name=\"koko\" value=\"$_POST[koko]\"> <input type=\"hidden\" name=\"huomiot\" value=\"$_POST[huomiot]\"> <input type=\"hidden\" name=\"kaikkivarit\" value=\"$_POST[kaikkivarit]\"> <input type=\"hidden\" name=\"maksu\" value=\"$_POST[maksu]\"> <input type=\"hidden\" name=\"tapahtuma\" value=\"$_POST[tapahtuma]\"> ");
juttua ja tulostusta
<input type="submit" value="Vahvista" name="Submit" style="font-family: Verdana; font-size:8pt;"> </form>
Tämä syöttää tiedot kantaan...
$link = mysql_connect("localhost"); if (! $link) die( "Ei voi yhdistää MySQL-tietokantaan"); $db="tilaukset"; mysql_select_db($db); $tunku="INSERT INTO paidat(nimi, losoite, postinro, ptpaikka, puhnro, email, maara, vari, koko, huomiot, kaikkivarit, maksu, tapahtuma, tila) VALUES('$_POST[nimi]', '$_POST[losoite]', '$_POST[pnro]', '$_POST[ptpaikka]' , '$_POST[puhnro]', '$_POST[email]', '$_POST[maara]', '$_POST[vari]', '$_POST[koko]', '$_POST[huomiot]', '$_POST[kaikkivarit]', '$_POST[maksu]', '$_POST[tapahtuma]', 'käsittelemättä')"; mysql_query($tunku) or die ("Tietoa ei voitu sijoittaa tietokantaan: " .mysql_error() ); $id=mysql_insert_id(); $d=mysql_affected_rows(); if($d == 1); { echo("tässä on ilmoitus siitä, että tilaus meni kantaan"); ?>
No eipä tuossa syntaksissa näytä mitään vikaa olevan. Haiskahtaa siltä, että tuo alempi varsinainen koodinpätkä on samassa tiedostossa tuon ylemmän formin kanssa. Niin... ja olihan sulla palvelimella magic_quotes_gpc päällä? Jossei niin aijaijai...
ei, kyllä ne ovat eri tiedostoissa.
mikä on magic_quotes_gpc? :)
Pitää kai etsiä netistä...
Joo, on mulla magic_quotes_gpc päällä.
No siis tarkoitin lähinnä tuota tietoturva-aukkoa. Mitäs jos käyttäjä kirjoittaa vaikka osoite-kenttään
kääpäkuja 'DROB TABLE paidat
niin veikkaappa mitä käy. Eli kannattaa ajaa kaikki käyttäjän syöttämät tiedot esim mysql_escape_string() tai addslashes() -funktion läpi. ja numeeriset kentät voi "pakottaa" kokonaisluvuiksi:
$koko = (int) $_POST['koko'];
Aihe on jo aika vanha, joten et voi enää vastata siihen.