a kétszer küldött űrlap esete
Sziasztok.
Adott egy űrlap aminek az adatait le szeretném menteni. Ezzel nincs is probléma, a gond ott kezdődik, hogy ez a mentés kétszer történik meg. Szeretném a segítségeteket kérni, annak megoldásában, hogy miért lehet ez és mi lehet rá a megoldás.
Az elküldés gombra kattintva (a form így néz ki) végrehajtódik ez a script: . A feladata az lenne, hogy leellenőrizze, minden szükséges mező ki lett-e töltve, ha igen átdobja a látogatót a hirdetes.php oldalra, ahol a következő script fut le: . A végeredmény egy txt file lenne. Csakhogy mind az űrlap elküldése, mind a txt file létrehozása kétszer történik meg.
Kérlek segítsetek. Előre is köszönöm!
■ Adott egy űrlap aminek az adatait le szeretném menteni. Ezzel nincs is probléma, a gond ott kezdődik, hogy ez a mentés kétszer történik meg. Szeretném a segítségeteket kérni, annak megoldásában, hogy miért lehet ez és mi lehet rá a megoldás.
Az elküldés gombra kattintva (a form így néz ki
form name="adat" method="post" enctype="application/x-www-form-urlencoded" onsubmit="return formCheck(this);"
function formCheck(formobj){
var fieldRequired = Array("megr_nev", "megr_cim", "penz", "megnev", "elerhet");
var fieldDescription = Array("Megrendelő neve", "Megrendelő címe", "Pénzfeladás módja", "Megnevezés", "Elérhetőség");
var alertMsg = "Kérem töltse ki az alábbi mező(ke)t:\n";
var l_Msg = alertMsg.length;
for (var i = 0; i < fieldRequired.length; i++){
var obj = formobj.elements[fieldRequired[i]];
if (obj){
switch(obj.type){
case "select-one":
if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){
alertMsg += " - " + fieldDescription[i] + "\n";
}
break;
case "select-multiple":
if (obj.selectedIndex == -1){
alertMsg += " - " + fieldDescription[i] + "\n";
}
break;
case "text":
case "textarea":
if (obj.value == "" || obj.value == null){
alertMsg += " - " + fieldDescription[i] + "\n";
}
break;
default:
}
if (obj.type == undefined){
var blnchecked = false;
for (var j = 0; j < obj.length; j++){
if (obj[j].checked){
blnchecked = true;
}
}
if (!blnchecked){
alertMsg += " - " + fieldDescription[i] + "\n";
}
}
}
}
if (alertMsg.length == l_Msg){
formobj.action = "hirdetes.php";
formobj.submit();
return true;
}else{
alert(alertMsg);
return false;
}
}
<?php
$id = strftime("%c", time());
$tovabb = "hird-felt.html";
$keys = array_keys($_POST);
$count = count($_POST);
for ( $array_index=0; $array_index<=($count-1); $array_index++ )
{
if ($array_index==0)
{$szovege = "A(z) ".$keys[$array_index]." mező értéke: ".$_POST[$keys[$array_index]]."\n";}
else
{$szovege .= "A(z) ".$keys[$array_index]." mező értéke: ".$_POST[$keys[$array_index]]."\n";}
}
$fname = "hirdetesek/szoveges".$id.".txt";
$szoveges = fopen($fname, "a");
fwrite($szoveges, $szovege);
fclose($szoveges);
unset($_POST);
unset($_SESSION['upload']);
unset($_SESSION['return']);
unset($_SESSION);
echo "<script>window.location.replace('".$tovabb."');</script>";
?>
Kérlek segítsetek. Előre is köszönöm!
tipp
szerintem kikapcsolt javascripttel is próbáld ki, ha úgy is kétszer kapsz meg mindent, akkor máshol van a hiba, de ha úgy jó, akkor a js-ben van a gond. és a gond szerintem a submit és a return true. a submitot kihagyhatod, ha igazzal térsz vissza akkor is megtörténik a submit esemény /végülis egy submit gombra kattintasz/.
gex
köszönöm!
server oldalon kötelező ellenőrizni
Felhő
js nélkül
php oldalon még figyelmedbe ajánlanám a foreach vezérlési szerkezetet, nagyon hasznos tud lenni.
gex
megfogadom
Köszi a figyelmeztetést
tévhit
Nincs ilyen megkötés. Arra kell csak figyelni, hogy a parancs kiadása előtt még ne legyen a scriptnek kimenete, de még ez sem gond, ha esetleg az output buffering be van kapcsolva.
Szóval használd bátran. Persze ez igényelheti akár kódjaid átszervezését is, de megéri. Pl. egy tisztességes PHP oldal csak egyszer ír a kimnetre.
Felhő
Kivéve...
biztos?
Nem...
Login..
nem túl valószínű
Ha megnézel pár szélesebb körben használt keretrendszert, akkor azt fogod látni, hogy a kimenet kiírása kb. az utolsó sor, ott már nem nagyon fordulhat elő kivétel.
Ilyet nem lehet csinálni.
Felhő
Jogos...
Kivétel