2016-08-09 2 views
0

Ich hielt mich selbst ziemlich geschickt in PHP und Formularverarbeitung vor diesem. Jetzt bin ich auf ein Problem gestoßen und kann es nicht herausfinden, obwohl ich meinen Code immer und immer wieder durchgegangen bin. Natürlich habe ich StackOverflow durchsucht und bin vielen Beispielen so nah wie möglich gefolgt, aber nichts hat mein Problem gelöst, also scheint mir etwas zu fehlen.Problem mit mehreren Kontrollkästchen in einem Formular

Das Formular ruft überprüfte Materialien vom Benutzer als ein Array ab und legt sie in einem E-Mail-Körper, oder zumindest sollte es.

Das HTML-Formular mit einer Checkbox-Array:

<div id="contact" class="form-container"> 
    <fieldset> 
    <div id="message"></div> 
    <form method="post" action="get-quote.php" name="contactform" id="contactform"> 
     <div class="form-group"> 
     <input name="name" id="name" type="text" value="" placeholder="Name" class="form-control"> 
     </div> 
     <div class="form-group"> 
     <input name="email" id="email" type="text" value="" placeholder="Email" class="form-control"> 
     </div> 
     <div class="form-group"> 
     <input name="phone" id="phone" type="text" value="" placeholder="Phone" class="form-control"> 
     </div> 
     <div class="form-group"> 
     <label>Job Type/Material</label> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="sand"> 
      Sand 
      </label> 
     </div> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="select_fill"> 
      Select Fill 
      </label> 
     </div> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="common_fill"> 
      Common Fill 
      </label> 
     </div> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="top_soil"> 
      Top Soil 
      </label> 
     </div> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="stabilized_sand"> 
      Stabilized Sand 
      </label> 
     </div> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="crushed_concrete"> 
      Crushed Concrete 
      </label> 
     </div> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="milled_asphalt"> 
      Milled Asphalt 
      </label> 
     </div> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" name="material[]" value="bull_rock"> 
      Bull Rock 
      </label> 
     </div> 
     </div> 
     <div class="form-group"> 
     <textarea name="comments" id="comments" class="form-control" rows="3" placeholder="Message"></textarea> 
     <div class="editContent"> 
      <p class="small text-muted"><span class="guardsman">* All fields are required.</span> Once we receive your message we will respond as soon as possible.</p> 
     </div> 
     </div> 
     <div class="form-group"> 
     <button class="btn btn-primary" type="submit" id="cf-submit" name="submit">Send</button> 
     </div> 
    </form> 
    </fieldset> 
</div><!-- /.form-container --> 

Und die PHP:

<?php 

if(!$_POST) exit; 

// Email address verification, do not edit. 
function isEmail($email) { 
    return(preg_match("/^[-_.[:alnum:]][email protected]((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email)); 
} 

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n"); 

$name  = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$comments = $_POST['comments']; 

if(trim($name) == '') { 
    echo '<div class="error_message">Please enter your name.</div>'; 
    exit(); 
} else if(trim($email) == '') { 
    echo '<div class="error_message">Please enter a valid email address.</div>'; 
    exit(); 
} else if(trim($phone) == '') { 
    echo '<div class="error_message">Please enter a valid phone number.</div>'; 
    exit(); 
} else if(!is_numeric($phone)) { 
    echo '<div class="error_message">Phone number can only contain digits.</div>'; 
    exit(); 
} else if(!isEmail($email)) { 
    echo '<div class="error_message">You have entered an invalid e-mail address, try again.</div>'; 
    exit(); 
} 

if(trim($comments) == '') { 
    echo '<div class="error_message">Please enter your message.</div>'; 
    exit(); 
} 

if(get_magic_quotes_gpc()) { 
    $comments = stripslashes($comments); 
} 

$materials = isset($_POST['material']) ? implode(', ', $_POST['material']) : 'none'; 

// Configuration option. 
// Enter the email address that you want to emails to be sent to. 
// Example $address = "[email protected]"; 

$address = "[email protected]"; 


// Configuration option. 
// i.e. The standard subject will appear as, "You've been contacted by John Doe." 

// Example, $e_subject = '$name . ' has contacted you via Your Website.'; 

$e_subject = 'You\'ve been contacted by ' . $name . '.'; 


// Configuration option. 
// You can change this if you feel that you need to. 
// Developers, you may wish to add more fields to the form, in which case you must be sure to add them here. 

$e_body = "You have been contacted by $name from your website, their message is as follows." . PHP_EOL . PHP_EOL; 
$e_content = "\"$comments\"" . PHP_EOL . PHP_EOL; 
$e_materials = "They specified the following materials: " . $materials . "." . PHP_EOL . PHP_EOL; 
$e_reply = "You can contact $name by email, $email or by phone $phone"; 

$msg = wordwrap($e_body . $e_content . $e_material . $e_reply, 70); 

$headers = "From: $email" . PHP_EOL; 
$headers .= "Reply-To: $email" . PHP_EOL; 
$headers .= "MIME-Version: 1.0" . PHP_EOL; 
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL; 
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL; 

if(mail($address, $e_subject, $msg, $headers)) { 

    // Email has sent successfully, echo a success page. 

    echo "<fieldset>"; 
    echo "<div id='success_page'>"; 
    echo "<h2>Email Sent Successfully.</h2>"; 
    echo "<p>Thank you <strong>$name</strong>, your message has been sent to us.</p>"; 
    echo "</div>"; 
    echo "</fieldset>"; 

} else { 

    echo 'ERROR!'; 

} 

ich das ganze Formular oder E-Mail-Skript nicht gebaut, ich habe nur die Kontrollkästchen erhalten gebeten, arbeiten. Und alles, aber die Checkboxen funktionieren. Das Ausführen eines var_dump für $ _POST ['material'] gibt NULL zurück, unabhängig davon, ob die Kontrollkästchen aktiviert sind oder nicht.

Jede Hilfe würde geschätzt werden, da ich das viele Male übergangen habe, ohne ein Problem mit dem Code zu sehen.

+0

ich dieses Skript auf meinem Rechner lief, und ich habe diese POST-Dump Werte bekam: 'Array (size = 6) 'name' => string 'SFSD' (Länge = 4) 'email' => Zeichenfolge '[email protected]' (Länge = 11) 'Telefon' => Zeichenfolge '' (Länge = 0) 'Material' => Array (Größe = 3) 0 => String 'sand' (Länge = 4) 1 => String 'select_fill' (Länge = 11) 2 => String 'common_fill' (Länge = 11) 'Kommentare' => String '' (l ength = 0) 'submit' => string '' (length = 0) 'Alles sieht korrekt aus –

+0

Das dachte ich mir - ich konnte kein einziges Problem finden. Ich habe keine Ahnung, warum das bei mir nicht funktioniert. Vielleicht hat es mit dem Webserver zu tun. –

+0

Was bekommen Sie, wenn Sie 'var_dump ($ _ POST)'? – Will

Antwort

0

Ich bekomme auch das Material wie Rafal Kozlowski anzuzeigen.

Überprüfen Sie, ob Werte gesendet werden. Wenn für die Kontrollkästchen keine Werte gesendet werden, gibt es für sie keinen POST-Wert. Selbst ein leeres Array wird nicht gesendet.

if(!isset($_POST['material'])) { 
    // No checkboxes were selected 
} 

Mehr Infos hier: Submit an HTML form with empty checkboxes

+0

Ich habe mehrere Male und Weisen "isset" ausprobiert, und es sendet definitiv die Werte nicht, da bedingte Anweisungen die '! Isset' Route gehen. Das Problem ist, ich habe keine Ahnung, warum es das Array nicht sendet, besonders da der Rest des Formulars funktioniert gut. –

Verwandte Themen