![]() |
Form validation problem
Har ett problem som jag verkligen måste lösa snabbt, och behöver er hjälp eftersom jag inte är så haj på detta.
Jag har hittat ett script för form validation som ser ut som följande lite förenklat: <?php include("validering.php"); ?> <form name="cart" id="cart" method='post' action=''> Namn: <input name="namn" type="text" id="namn" size="30" value="<?php echo $valid_namn; ?>" /> <?php echo $error_namn; ?> E-post: <input name="email" type="text" id="email" size="30" value="<?php echo $valid_email; ?>"> <?php echo $error_email; ?> Telefon: <input name="telefon" type="text" id="telefon" size="30" value="<?php echo $valid_telefon; ?>"> <?php echo $error_telefon; ?> <input type="image" name="submit" id="order" src="jcart/images/submit.gif" /> När jag har det på detta vis fungerar form validation som den ska, men jag skickas inte vidare till min gateway, som jag vanligtvis gör när jag har action='jcart/gateway.php' (låter ju ganska logiskt!). Men när jag istället har min action='jcart/gateway.php' inlagd så fungerar inte form validation eftersom den direkt skickar vidare till gateway utan att kontrollera fälten. Jag behöver båda! Snälla hjälp mig, jag blir snart tokig på detta så som jag försökt. :P Jag har prövat att lägga in kontrollen i gatewayen, men det blir bara fel och fungerar inte. Jag hamnar på en blank sida med samma adress som gatewayen, men skickas inte vidare till tacksidan eller får mejlet ivägskickat. Så jag undviker helst att lägga in någon ytterligare kod i gatewayen! Allra bäst vore om det gick att lösa direkt på formulärsidan. Uppskattar verkligen er hjälp här, och tänk på att jag inte är duktig på detta, så förklara tydligt utan avancerade termer tack! ;) Här kommer hela koden till validering.php: <?php if($_POST) { $namn = $_POST['namn']; $email = $_POST['email']; $telefon = $_POST['telefon']; // Namn if (eregi('^[A-Za-z0-9 ]{3,20}$',$namn)) { $valid_namn=$namn; } else { $error_namn='Fyll i ditt namn korrekt.'; } if (eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$', $email)) { $valid_email=$email; } else { $error_email='E-postadressen måste vara korrekt ifylld.'; } // Telefon min 6 char max 20 char if (eregi('^[A-Za-z0-9!@#$%^&*()_]{6,20}$',$telefon)) { $valid_telefon=$telefon; } else { $error_telefon='Ange ett giltigt telefonnummer.'; } if((strlen($valid_namn)>0)&&(strlen($valid_email)> 0) &&(strlen($valid_telefon)>0) && $valid_leverans>0 ) { header("Location: jcart/gateway.php"); } else{ } } ?> |
$valid_leverans verkar inte sättas någonstans...?
|
Citat:
Kan jag lägga in någon annan kod i valideringen här: if((strlen($valid_namn)>0)&&(strlen($valid_email)> 0)&&(strlen($valid_telefon)>0)) {header("Location: jcart/gateway.php");} För tydligen verkar det inte funka på samma sätt med en header-location än via action i formuläret? Jag skulle liksom vilja lägga in if((strlen($valid_namn)>0)&&(strlen($valid_email)> 0)&&(strlen($valid_telefon)>0)) {form action='jcart/gateway.php'} om ni förstår mig, men förstår ju såklart att det inte funkar på det sättet. ;) Men det kanske går att fixa till det på något liknande sätt? |
Jag testade nu att lägga in hela koden från jcart/gateway.php i if-taggen då alla fält är korrekt ifyllda i validering.php. Då fungerar valideringen som den ska men jag antar att när jag klickar på beställ så tar kontrollen i jcart.php vid, som gör att jag skickas tillbaks till formulärsidan eftersom den antar att formulärsidan inte är den riktiga "checkouten". Ni kan se här (från jcart.php som ligger inkluderad i gateway.php och alltså nu även i validering.php):
// Determine if this is the checkout page /* First we check the request uri against the config checkout (set when the visitor first clicks checkout), then check for the hidden input sent with Ajax request (set when visitor has javascript enabled and updates an item quantity). */ $isCheckout = strpos(request_uri(), $checkout); if ($isCheckout !== false || $_REQUEST['jcartIsCheckout'] == 'true') { $isCheckout = true; } else { $isCheckout = false; } // Overwrite the form action to post to gateway.php instead of posting back to checkout page if ($isCheckout === true) { // Sanititze config path $path = filter_var($config['jcartPath'], FILTER_SANITIZE_URL); // Trim trailing slash if necessary $path = rtrim($path, '/'); $checkout = $path . '/gateway.php'; } Jag har testat att byta till validering.php istället för gateway.php men det hjälper inte. Det kanske inte ens är detta det beror på? Hmm, jag går bet på detta! ;) |
Det som finns i $_POST följer inte med om du gör en redirect som du gör.
Enklast är väl att flytta all kod från formulärsidan till jcart/gateway.php (eller tvärtom), annars får du hitta ett sätt att spara ner all data från $_POST och sedan ladda in det i jcart/gateway.php.. ordentlig fullösning (enl. mig i.a.f.): PHP-kod:
|
Alla tider är GMT +2. Klockan är nu 21:27. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson