Avatar billede para7 Nybegynder
24. september 2009 - 14:59 Der er 12 kommentarer og
1 løsning

Enkel server side validering med postback

Hvorfor virker følgende ikke? Problemet er at siden går fast et sted...


//Enkel server side validering med postback
if($_POST['name']=="" || $_POST['tlf']=="" || $_POST['email']=="" || $_POST['mailtype']<1){
   
    if($_POST['mailtype']<1){
        $err_mailtype = "error";
    }
    if($_POST['email']==""){
        $err_email = "error";
    }
    if($_POST['tlf']==""){
        $err_tlf = "error";
    }
    if($_POST['name']==""){
        $err_name = "error";
    }

    $url = $_SERVER['HTTP_REFERER'];
    $referer_clean = substr($url,0,strpos($url,"?"));
    $postback = $referer_clean."?err_name=".$err_name."&err_tlf=".$err_tlf."&err_email=".$err_email."&err_mailtype=".$err_mailtype;
    header("Location: ".$postback);
   
}else{ //send mail
Avatar billede para7 Nybegynder
24. september 2009 - 15:10 #1
Jeg skal bruge $_SERVER['HTTP_REFERER']; da der er flere forms der sender til valideringssiden.
Avatar billede fbhzone Nybegynder
24. september 2009 - 15:34 #2
Du kan ikke regne med referals.  Det er ikke alle browsere der sender disse med og flere sikkerhedspakker som f.eks. Symantec blokerer så de ikke ryger med. Det vil så resultere i at brugeren ikke kommer nogen vegne.
Avatar billede para7 Nybegynder
24. september 2009 - 15:49 #3
Tak for tippet. Har altid brugt det i ASP, dog uden at opleve problemer. Er eneste mulighed så, at jeg må hardcode url'erne ind og lave en switch?
Avatar billede fbhzone Nybegynder
24. september 2009 - 15:59 #4
Du kan smide dit send-email script i en function og bruge den på hver side, så slipper du også for alt for meget frem og tilbage.

Utestet:
function sendEmail() {
    global $_POST;

    $return = "";
    $required = array(
    "name"         => "Navn",
    "phone"     => "Telefonnummer",
    "email"     => "E-mail adresse",
    "message"     => "Besked");

    foreach($required as $val => $key) {
        if(empty($_POST[$val])) {
            $return .= "$key skal udfyldes.<br />";
            $err = 1;
        }
    }
   
    if(!$err) {
        // Send e-mail og skriv "Din e-mail er sendt" eller lignende.
    }
   
    return $return;

}



og så kan du på siden:

<?php
if(!empty($_POST)) {
echo sendEmail();
}
?>


Det er ikke den pæneste måde at gøre det på, men det ser ud på den måde som du har lavet det til, at den vil fungere.
Avatar billede para7 Nybegynder
24. september 2009 - 16:08 #5
Tak for det, men det er noget jeg skal lave på eksisterende site, som jeg har overtaget udviklingen af, og vil helst beholde strukturen. der er een mail sende fil for en håndfuld sprog, der hver har deres sende form.
Avatar billede fbhzone Nybegynder
24. september 2009 - 16:17 #6
Okay, jamen så smid returnURL med i et hidden POST felt
Avatar billede para7 Nybegynder
24. september 2009 - 16:30 #7
Jammen det var da genialt og pointene værd, tak for nu :)
Avatar billede para7 Nybegynder
24. september 2009 - 16:32 #8
Hov, hvordan er det nu man kalder url'en med det hele, altså også filnavn og querystring?
Avatar billede para7 Nybegynder
24. september 2009 - 16:45 #9
Det bliver vel en lappeløsning:

http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']

Åbenbart ikke _URL med et I til slut :)
Avatar billede para7 Nybegynder
24. september 2009 - 17:04 #10
Jeg har problem med at overføre som hidden post felt. Jeg har følgende:

$form_elements = array(
    "FormTag"=>"DENNE KONTAKT FUNKTION ER UNDER KONSTRUKTION I ØJEBLIKKET, kontakt os venligst via telefon.<br><br><form id=\"theForm\" method=\"POST\" action=\"../../../mailsend.php/".$gtw_pageid."\" enctype=\"multipart/form-data\" name=\"entry\" onsubmit=\"//return validering(this);\">",
    "referal_url"=>"<input type =\"hidden\" name=\"referal_url\" value=\"http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."\"/>",
    "name"=>"<input name=\"name\" value=\"".$_GET['postback_name']."\" size=\"30\" style=\"width:250px;\"/>",
    "company"=>"<input name=\"company\" value=\"".$_GET['postback_company']."\" size=\"30\" style=\"width:250px;\"/>",
    "addr"=>"<input name=\"addr\" value=\"".$_GET['postback_addr']."\" size=\"30\" style=\"width:250px;\"/>",
    "city"=>"<input name=\"city\" value=\"".$_GET['postback_city']."\" size=\"30\" style=\"width:250px;\"/>",
    "tlf"=>"<input name=\"tlf\" value=\"".$_GET['postback_tlf']."\" size=\"10\" style=\"width:250px;\"/>",
    "spons"=>"<input name=\"spons\" value=\"".$_GET['postback_spons']."\" size=\"10\" style=\"width:50px;\"/> ".$lang['Lang_contact2_spons2'],
    "email"=>"<input name=\"email\" value=\"".$_GET['postback_email']."\" size=\"30\" style=\"width:250px;\"/>",
    "type"=>$mailtype_select,
    "desc1"=>"<textarea cols=\"39\" rows=\"5\" name=\"message\">".$_GET['postback_message'],
    "desc2"=>"</textarea>",
    "brochure"=>"<input type=\"checkbox\" name=\"brochure\" ".($mail_status=="broch" ? "checked" : "")." ".$_GET['postback_brochure']." value=\"JA\">",
    "fremvisningstur"=>"<input type=\"checkbox\" name=\"fremvisningstur\" ".($mail_status=="fremv" ? "checked" : "")." ".$_GET['postback_fremvisningstur']." value=\"JA\">",
    "ButtonTags"=>"<input type=\"submit\" value=\"Send\" name=\"Submit\" />"
);


Jeg modtager på mail sendesiden med:

$referal_url = $_POST['referal_url'];

$referal_url er tom...
Avatar billede dkfire Nybegynder
24. september 2009 - 18:44 #11
Hvordan ser kildekode ud til det html dokument som indeholder formen?? Er din hidden felt rigtig udfyldt ?

Hvad får du ud af print_r($_POST) ?
Avatar billede para7 Nybegynder
24. september 2009 - 23:00 #12
dkfire

Godt detektivarbejde. Selvfølgelig have jeg ikke tænkt på det. Jeg manglede bare at oprette tagget i mail tpl filen. Svar lige for point :)
Avatar billede dkfire Nybegynder
24. september 2009 - 23:42 #13
Det er altid godt lige at kigge alle koder igennem og skirve så meget ud som muligt når man søger efter fejl ;-)

Jeg kan desværre ikke lægge et svar, da du allerede har accepteret et svar til dette spørgsmål.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester