Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: $_POST, Mysql ja PHP: tulee kaksi tietuetta

Sivun loppuun

Rutja [08.06.2004 13:36:49]

#

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

suski78 [08.06.2004 14:20:46]

#

En ihan ymmärtänyt ongelmaa..
Tuleeko $_POST inputteja kaksin kappalein formin submittauksen jälkeen php:lle vai meneekö kantaan kaksi riviä samaa tietoa?

Rutja [08.06.2004 14:24:28]

#

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

suski78 [08.06.2004 15:01:41]

#

Saatko koodin tähän? Tuntuisi, että ongelmana on suoritusjärjestys.

Rutja [08.06.2004 15:15:45]

#

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

ajv [08.06.2004 22:19:11]

#

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

Rutja [09.06.2004 12:03:37]

#

ei, kyllä ne ovat eri tiedostoissa.

mikä on magic_quotes_gpc? :)

Pitää kai etsiä netistä...

Rutja [09.06.2004 12:07:31]

#

Joo, on mulla magic_quotes_gpc päällä.

ajv [09.06.2004 12:12:28]

#

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'];

Sivun alkuun

Vastaus

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

Tietoa sivustosta