2016-05-27 12 views
0

Ich versuche, ein PHP-Formular zu einer Website hinzuzufügen, an der ich arbeite. Nicht wirklich vertraut mit PHP, aber ich habe die Datei in den Ordner upload im CMS abgelegt.CMS einfach gemacht - Hinzufügen eines PHP-Formulars

Ich denke, ich habe die jQuery und andere Dateien korrekt verknüpft, und ich habe die PHP-Datei bearbeitet in E-Mails etc. Dieser ruft auch eine andere PHP-Validierungsdatei auf.

Wie auch immer es zeigt sich normal und ich kann es ausfüllen, aber es geht auf eine 404 Seite und funktioniert nicht.

Meine Frage ist, welche Verknüpfungskonvention verwende ich, um mit der PHP-Datei zu verknüpfen, und ist es an der richtigen Stelle? Ich benutze cPanel, wo der CMS installiert ist.

Anstatt zu setzen: action="url([[root_url]]/uploads/scripts/form-to-email.php" sollte ich einfach setzen: action="uploads/scripts/form-to-email.php"?

Die Seite in Frage ist hier: www.edelweiss-web-design.com.au/captainkilowatt/

Auch wissen jemand eine gute captcha ich mit ihm integrieren können ...? Vielen Dank! Hier

<div class="contact-form"> 
    <h1>Contact Us</h1> 
    <form id="contact-form" method="POST" action="uploads/scripts/form-to-email.php"> 

     <div class="control-group"> 
      <label>Your Name</label> 
      <input class="fullname" type="text" name="fullname" /> 
     </div> 

     <div class="control-group"> 
      <label>Email</label> 
      <input class="email" type="text" name="email" /> 
     </div> 

     <div class="control-group"> 
      <label>Phone (optional)</label> 
      <input class="phone" type="text" name="phone" /> 
     </div> 

     <div class="control-group"> 
      <label>Message</label> 
      <textarea class="message" name="message"></textarea> 
     </div> 

     <div id="errors"></div> 

     <div class="control-group no-margin"> 
      <input type="submit" name="submit" value="Submit" id="submit" /> 
     </div> 

    </form> 
    <div id='msg_submitting'><h2>Submitting ...</h2></div> 
    <div id='msg_submitted'><h2>Thank you !<br> The form was submitted Successfully.</h2></div> 
</div> 

ist die php:

<?php 
/* 
Configuration 
You are to edit these configuration values. Not all of them need to be edited. 
However, the first few obviously need to be edited. 
EMAIL_RECIPIENTS - your email address where you want to get the form submission. 

*/ 

$email_recipients = "[email protected]";//<<=== enter your email address here 
//$email_recipients = "[email protected],[email protected]"; <<=== more than one recipients like this 


$visitors_email_field = 'email';//The name of the field where your user enters their email address 
//This is handy when you want to reply to your users via email 
//The script will set the reply-to header of the email to this email 
//Leave blank if there is no email field in your form 
$email_subject = "New Form submission"; 

$enable_auto_response = true;//Make this false if you donot want auto-response. 

//Update the following auto-response to the user 
$auto_response_subj = "Thanks for contacting us"; 
$auto_response =" 
Hi 

Thanks for contacting us. We will get back to you soon! 

Regards 
Captain Kilowatt 
"; 

/*optional settings. better leave it as is for the first time*/ 
$email_from = ''; /*From address for the emails*/ 
$thank_you_url = 'http://www.edelweiss-web-design.com.au/captainkilowatt.html';/*URL to redirect to, after successful form submission*/ 

/* 
This is the PHP back-end script that processes the form submission. 
It first validates the input and then emails the form submission. 
The variable $_POST contains the form submission data. 
*/ 
if(!isset($_POST['submit'])) 
{ 
// note that our submit button's name is 'submit' 
// We are checking whether submit button is pressed 
// This page should not be accessed directly. Need to submit the form. 
echo "error; you need to submit the form!".print_r($_POST,true); 
exit; 
} 

require_once "http://edelweiss-web-design.com.au/captainkilowatt/upload/scripts/formvalidator.php"; 
//Setup Validations 
$validator = new FormValidator(); 
$validator->addValidation("fullname","req","Please fill in Name"); 
$validator->addValidation("email","req","Please fill in Email"); 
//Now, validate the form 
if(false == $validator->ValidateForm()) 
{ 
echo "<B>Validation Errors:</B>"; 

$error_hash = $validator->GetErrors(); 
foreach($error_hash as $inpname => $inp_err) 
{ 
echo "<p>$inpname : $inp_err</p>\n"; 
} 
exit; 
} 
$visitor_email=''; 
if(!empty($visitors_email_field)) 
{ 
$visitor_email = $_POST[$visitors_email_field]; 
} 

if(empty($email_from)) 
{ 
$host = $_SERVER['SERVER_NAME']; 
$email_from ="[email protected]$host"; 
} 

$fieldtable = ''; 
foreach ($_POST as $field => $value) 
{ 
if($field == 'submit') 
{ 
continue; 
} 
if(is_array($value)) 
{ 
$value = implode(", ", $value); 
} 
$fieldtable .= "$field: $value\n"; 
} 

$extra_info = "User's IP Address: ".$_SERVER['REMOTE_ADDR']."\n"; 

$email_body = "You have received a new form submission. Details below:\n$fieldtable\n $extra_info"; 

$headers = "From: $email_from \r\n"; 
$headers .= "Reply-To: $visitor_email \r\n"; 
//Send the email! 
@mail(/*to*/$email_recipients, $email_subject, $email_body,$headers); 

//Now send an auto-response to the user who submitted the form 
if($enable_auto_response == true && !empty($visitor_email)) 
{ 
$headers = "From: $email_from \r\n"; 
@mail(/*to*/$visitor_email, $auto_response_subj, $auto_response,$headers); 
} 

//done. 
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') 
{ 
//This is an ajax form. So we return success as a signal of succesful processing 
echo "success"; 
} 
else 
{ 
//This is not an ajax form. we redirect the user to a Thank you page 
header('Location: '.$thank_you_url); 
} 
?><?php 
/* 
Configuration 
You are to edit these configuration values. Not all of them need to be edited. 
However, the first few obviously need to be edited. 
EMAIL_RECIPIENTS - your email address where you want to get the form submission. 

*/ 

$email_recipients = "[email protected]";//<<=== enter your email address here 
//$email_recipients = "[email protected],[email protected]"; <<=== more than one recipients like this 


$visitors_email_field = 'email';//The name of the field where your user enters their email address 
//This is handy when you want to reply to your users via email 
//The script will set the reply-to header of the email to this email 
//Leave blank if there is no email field in your form 
$email_subject = "New Form submission"; 

$enable_auto_response = true;//Make this false if you donot want auto-response. 

//Update the following auto-response to the user 
$auto_response_subj = "Thanks for contacting us"; 
$auto_response =" 
Hi 

Thanks for contacting us. We will get back to you soon! 

Regards 
Captain Kilowatt 
"; 

/*optional settings. better leave it as is for the first time*/ 
$email_from = ''; /*From address for the emails*/ 
$thank_you_url = 'http://www.edelweiss-web-design.com.au/captainkilowatt.html';/*URL to redirect to, after successful form submission*/ 

/* 
This is the PHP back-end script that processes the form submission. 
It first validates the input and then emails the form submission. 
The variable $_POST contains the form submission data. 
*/ 
if(!isset($_POST['submit'])) 
{ 
// note that our submit button's name is 'submit' 
// We are checking whether submit button is pressed 
// This page should not be accessed directly. Need to submit the form. 
echo "error; you need to submit the form!".print_r($_POST,true); 
exit; 
} 

require_once "http://www.edelweiss-web-design.com.au/captainkilowatt/upload/scripts/formvalidator.php"; 
//Setup Validations 
$validator = new FormValidator(); 
$validator->addValidation("fullname","req","Please fill in Name"); 
$validator->addValidation("email","req","Please fill in Email"); 
//Now, validate the form 
if(false == $validator->ValidateForm()) 
{ 
echo "<B>Validation Errors:</B>"; 

$error_hash = $validator->GetErrors(); 
foreach($error_hash as $inpname => $inp_err) 
{ 
echo "<p>$inpname : $inp_err</p>\n"; 
} 
exit; 
} 
$visitor_email=''; 
if(!empty($visitors_email_field)) 
{ 
$visitor_email = $_POST[$visitors_email_field]; 
} 

if(empty($email_from)) 
{ 
$host = $_SERVER['SERVER_NAME']; 
$email_from ="[email protected]$host"; 
} 

$fieldtable = ''; 
foreach ($_POST as $field => $value) 
{ 
if($field == 'submit') 
{ 
continue; 
} 
if(is_array($value)) 
{ 
$value = implode(", ", $value); 
} 
$fieldtable .= "$field: $value\n"; 
} 

$extra_info = "User's IP Address: ".$_SERVER['REMOTE_ADDR']."\n"; 

$email_body = "You have received a new form submission. Details below:\n$fieldtable\n $extra_info"; 

$headers = "From: $email_from \r\n"; 
$headers .= "Reply-To: $visitor_email \r\n"; 
//Send the email! 
@mail(/*to*/$email_recipients, $email_subject, $email_body,$headers); 

//Now send an auto-response to the user who submitted the form 
if($enable_auto_response == true && !empty($visitor_email)) 
{ 
$headers = "From: $email_from \r\n"; 
@mail(/*to*/$visitor_email, $auto_response_subj, $auto_response,$headers); 
} 

//done. 
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') 
{ 
//This is an ajax form. So we return success as a signal of succesful processing 
echo "success"; 
} 
else 
{ 
//This is not an ajax form. we redirect the user to a Thank you page 
header('Location: '.$thank_you_url); 
} 
?> 

ich die PHP-Datei hinzugefügt haben. Also, in der Aktion Teil, wenn ich das Formular absende, gibt es mir nicht mehr eine 404, sondern bringt mich auf eine leere Seite mit der 'Formular-zu-E-Mail.php' Seite. Das Skript funktioniert jedoch nicht von dem, was ich sagen kann. Auch hier weiß ich html und css und wenig javascipt, aber wie soll php arbeiten?

Was mache ich falsch?

+0

Willkommen bei Stackoverflow. Bitte stellen Sie sicher, dass Ihre Frage wie hier beschrieben ausführlicher ist: http://stackoverflow.com/help/mcve. Sie erhalten schnellere und bessere Antworten auf vollständige Fragen. – tfv

+0

Sie sollten Ihr Kontaktformular html in Ihre Frage stellen, aber Ihr Problem ist, dass Sie eine Reihe von URLs haben, die (wahrscheinlich) auf einer Art Ersatzschema oder Vorlagenbibliothek basieren, so dass Sie eine Reihe von schlechten URLs wie URL haben ([[root_url]]/uploads/scripts/form-to-email.php' wo '[[root_url]]' nicht so wie du willst analysierst – Rasclatt

+0

Hi Rasclatt, ich habe gerade meine Frage zu dem was du erwähnt hast bearbeitet. [ [root_url]] funktioniert aus dem CSS Stylesheet ganz gut in CMSMS, aber vielleicht nicht aus der Vorlage ... –

Antwort

2

Ich würde vorschlagen, eines der Module für CMS zu verwenden, anstatt zu versuchen, Formular in PHP von Grund auf neu zu erstellen. Es ist viel sicherer, CMS-Builtin-Funktionen zu verwenden, und das ist der Punkt, an dem das CMS überhaupt verwendet wird. Für CMS einfach gemacht das Formbuilder-Modul ist hier: http://dev.cmsmadesimple.org/projects/formbuilder

+0

Ich kann nicht Form Builder zur Arbeit bekommen. Das Cms_mailer-Modul wird abgeschrieben und der Form Builder stützt sich darauf. Ich habe versucht, manuell die neuesten Versionen hochzuladen, zu deinstallieren, neu zu installieren, ohne Erfolg. –

+0

Ok, das Formular sendet E-Mails - yipeee! Die Validierung funktioniert jedoch nicht. Die folgende Fehlermeldung wurde angezeigt: Warnung: require_once (formvalidator.php): Fehler beim Öffnen des Streams: Keine solche Datei oder kein Verzeichnis in /home/edelw250/public_html/captainkilowatt/uploads/scripts/form-to-email.php in Zeile 51 Schwerwiegender Fehler: require_once(): Fehlgeschlagenes Öffnen erforderlich 'formvalidator.php' (include_path = '.:/Usr/lib/php:/usr/lokal/lib/php') in/home/edelw250/public_html/captainkilowatt/uploads /scripts/form-to-email.php in Zeile 51 Ich nehme an, ich muss einen Pfad in der PHP-Datei ändern ...? –

+0

In den meisten Fällen sollten Sie nicht müssen. Finden Sie heraus, wo die Datei formvalidator.php ist und Sie sollten den include_path korrekt machen (möglicherweise fehlt/home/edelw250/public_html/captainkilowatt /). Alternativ versuchen Sie zuerst, die eine require_once zu ändern, um zu testen, ob die Validierung funktioniert (vorausgesetzt, dass formvalidator.php keine weiteren Klassen benötigt). –

0

Vielen Dank für alle Kommentare.

Ich habe ein anderes Formular mit einem Captcha (PHP) gefunden und die gesamte Struktur beibehalten, indem ich sie in den CMSMS Upload Ordner hochgeladen habe. Ich benutzte dann iframe, um das Formular auf meiner Seite einzubetten, änderte ein paar kleine Details mit dem CSS und der Benennung, und Bob ist dein Onkel, es funktioniert gut.

Für alle Interessierten, habe ich: www.html-form-guide.com/contact-form/creating-a-contact-form.html

Dies ist frei, und ich bin sicher versuchen, nicht auf Spam als Ich bin in keiner Weise mit dieser Website oder damit verbundenen Websites verbunden.

Verwandte Themen