Gå til innhold

[Løst] Undefined variable - HTML form med dropdown-liste


Anbefalte innlegg

Har et skjema som postes til php for å sende mail, alt funker bra bortsett fra en dropdown-liste.. Virker ikke som den tar med dataene fra det man velger.

Noen som har peiling?

<p>Type<br />
<select name="type">
  <option value=""></option>
  <option value="none">None</option>
  <option value="this">This</option>
  <option value="that">That</option>
</select></p>

$type = $_POST['type'];
Lenke til kommentar
Videoannonse
Annonse

Hmm.. Litt større utdrag, fjernet en del overflødig.


<!DOCTYPE html>
<html>
<head>
<title></title>
<LINK href="stylesheet.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="header">
<img src="logo.gif" />
</div>

<div class="container">
<form name="htmlform" method="post" action="mailsend.php">

<p>Type<br />
<select name="type">
<option value=""></option>
<option value="none">None</option>
<option value="this">This</option>
<option value="that">That</option>
</select></p>

<label for="comments">Comments</label><br/>
<textarea name="comments" maxlength="1000" cols="25" rows="4"></textarea>
<br />


<input type="submit" value="Submit">

</form>

</div>


</body>

</html>

<?php

if(isset($_POST['type'])) {

$email_to = "";
$email_from = "";

function died($error) {
// your error code can go here
echo "We are very sorry, but there were error(s) found with the form you submitted. ";
echo "These errors appear below.<br /><br />";
echo $error."<br /><br />";
echo "Please go back and fix these errors.<br /><br />";
die();
}

$type = $_POST['type']; // required
$comments = $_POST['comments']; // not required


$error_message = "";
$string_exp = "/^[A-ZÆØÅa-zæøå0-9 .'-]+$/";

if(strlen($type) == 0) {
$error_message .= 'Error<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}

$email_message = "Form details below.\n\n";

function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}

$email_message .= "type: ".clean_string($type)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";


$email_subject = "";

// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
?>

<html>
<head>
</head>
<body>
<p></p>
<br />
<p><a href="><a></p>
</body>
</html>

<?php
}
die();
?>
Endret av Kakeshoma
Lenke til kommentar

For å debugge legg til

echo '<pre>'.print_r($_POST,true).<'/pre>';
I starten av php scriptet for å se hva som ligger i $_POST. Kan ikke se noen opplagte feil.

 

I stedet for died funksjonen ville jeg tatt i bruk try/catch og exceptions.

 

 

<?php

try {
    if (isset($_POST['type'])) {

        $email_to = "";
        $email_from = "";

        // input bør filtreres, ta en titt på filter_input() eller filter_var()
        $type = filter_input(INPUT_POST,'type'); // required
        $comments = (isset($_POST['comments']) ? filter_input(INPUT_POST,'comments') : ''); // not required


        $error_message = "";
        $string_exp = "/^[A-ZÆØÅa-zæøå0-9 .'-]+$/";

        if (strlen($type) == 0) $error_message .= 'Error<br />'; 
        if (strlen($error_message) > 0)    throw new exception ($error_message);
        

        $email_message = "Form details below.\n\n";

        function clean_string($string) {
            $bad = array("content-type", "bcc:", "to:", "cc:", "href");
            return str_replace($bad, "", $string);
        }

        $email_message .= "type: " . clean_string($type) . "\n";
        $email_message .= "Comments: " . clean_string($comments) . "\n";


        $email_subject = "";

        // create email headers
        $headers = 'From: ' . $email_from . "\r\n" .
            'Reply-To: ' . $email_from . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
        @mail($email_to, $email_subject, $email_message, $headers);
    }
}
catch (Exception $e){
    echo "We are very sorry, but there were error(s) found with the form you submitted. ";
    echo "These errors appear below.<br /><br />";
    echo $e->getMessage() . "<br /><br />";
    echo "Please go back and fix these errors.<br /><br />";
}

 

 

Hvis du bruker UTF-8, så bruk mb_strlen() i stedet for strlen()

 

I stedet for å "finne opp hjulet på nytt" så kan det være verdt å ta i bruk PHPMailer i stedet for. Så får man mye ferdig.

  • Liker 1
Lenke til kommentar

Det er det rareste.. Nå fungerte det plutselig. Smart den echoen forresten!

 

Skal nilese koden fra i går, og etter endringene jeg gjorde i dag for å se om det er noe forskjell, men prøvde alle verdens kombinasjoner i går..

Har brukt et php-skjema fra nettet og endret på det, men skal se på phpmailer, sikker bedre enn det jeg har brukt. Takk for tips!

 

edit. er ingen forskjell så vidt jeg kan se, så da aner jeg ikke hva problemet var.. Bare glad det funker jeg :)

 

Skal teste den gamle koden igjen senere i dag.

Endret av Kakeshoma
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...