SitePoint Sponsor

User Tag List

Results 1 to 5 of 5

Hybrid View

  1. #1
    SitePoint Evangelist
    Join Date
    Oct 2000
    Posts
    430
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Hi & Happy N.Year

    I'm trying to make my own form processor by modifying Jack Formmail. What I want to do is have one processor to handle numerous forms on my site.

    The script doesn't handle a few things I wish to add. What I would like to be able to do is add some header and footer text to the email $content (as the e-mails are forwarded directly to a third party. These headers and footers also need to change, depending on which third party they are going to.


    I thought I could achieve this by adding other variables inside the script:-
    $introtext ="blah blah...";
    $footertext ="blah blah...";

    and then doing:
    $content = parse_form($introtext.$HTTP_POST_VARS.$footertext);
    However when doing this I get errors occuring within this function

    // parse the form and create the content string which we will send
    function parse_form($array) {
    // build reserved keyword array
    $reserved_keys[] = "MAX_FILE_SIZE";
    $reserved_keys[] = "required";
    $reserved_keys[] = "require";
    $reserved_keys[] = "path_to_file";
    $reserved_keys[] = "recipient";
    $reserved_keys[] = "subject";
    $reserved_keys[] = "bgcolor";
    $reserved_keys[] = "text_color";
    $reserved_keys[] = "link_color";
    $reserved_keys[] = "vlink_color";
    $reserved_keys[] = "alink_color";
    $reserved_keys[] = "title";
    $reserved_keys[] = "missing_fields_redirect";
    $reserved_keys[] = "env_report";
    if (count($array)) {
    while (list($key, $val) = each($array)) {
    // exclude reserved keywords
    $reserved_violation = 0;
    for ($ri=0; $ri<count($reserved_keys); $ri++) {
    if ($key == $reserved_keys[$ri]) {
    $reserved_violation = 1;
    }
    }
    // prepare content
    if ($reserved_violation != 1)
    $content .= "$key: $val\n";
    }
    }
    return $content;
    }


    The only way I can currently get this to work is by adding the $introtext and $footer text as hidden variables within the form (which I don't want to do as this is quite sensitive text).

    Could anyone figure out how I can alter this script so that I can add my own variables dictated within the script which get sent out within the $content of the outgoing e-mail?

    Thank for the help - the full script is as follows:







    <?
    /*
    ##############################################################################
    # PLEASE DO NOT REMOVE THIS HEADER!!!
    #
    # COPYRIGHT NOTICE
    #
    # FormMail.php v3.0
    # Copyright 2000,2001 Ai Graphics and Joe Lumbroso (c) All rights reserved.
    # Created 07/06/00 Last Modified 11/12/00
    # Joseph Lumbroso, http://www.aigraphics.com
    # http://www.lumbroso.com/scripts/
    ##############################################################################
    #
    # This cannot and will not be inforced but I would appreciate a link back
    # to any of these sites:
    # http://www.dtheatre.com
    # http://www.aigraphics.com
    # http://www.lumbroso.com/scripts/
    #
    # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
    # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    # OTHER DEALINGS IN THE SOFTWARE.
    #
    ##############################################################################
    */

    // referers.. domains/ips that you will allow forms to
    // reside on.
    $referers = array ('fileserver','10.0.0.1');

    // function to check the referer for security reasons.
    // contributed by some one who's name got lost.. Thanks
    // goes out to him any way.
    function check_referer($referers){
    if (count($referers)){
    $found = false;
    $temp = explode("/",getenv("HTTP_REFERER"));
    $referer = $temp[2];
    for ($x=0; $x < count($referers); $x++){
    if ($referers[$x] == $referer){
    $found = true;
    }
    }
    if (!$found){
    print_error("You are coming from an <b>unauthorized domain.</b>");
    error_log("[FormMail.php] Illegal Referer. (".getenv("HTTP_REFERER").")", 0);
    }
    return $found;
    } else {
    return true; //Not a good idea, if empty, it will allow it.
    }
    }
    if ($referers)
    check_referer($referers);

    // parse the form and create the content string which we will send
    function parse_form($array) {
    // build reserved keyword array
    $reserved_keys[] = "MAX_FILE_SIZE";
    $reserved_keys[] = "required";
    $reserved_keys[] = "require";
    $reserved_keys[] = "path_to_file";
    $reserved_keys[] = "recipient";
    $reserved_keys[] = "subject";
    $reserved_keys[] = "bgcolor";
    $reserved_keys[] = "text_color";
    $reserved_keys[] = "link_color";
    $reserved_keys[] = "vlink_color";
    $reserved_keys[] = "alink_color";
    $reserved_keys[] = "title";
    $reserved_keys[] = "missing_fields_redirect";
    $reserved_keys[] = "env_report";
    if (count($array)) {
    while (list($key, $val) = each($array)) {
    // exclude reserved keywords
    $reserved_violation = 0;
    for ($ri=0; $ri<count($reserved_keys); $ri++) {
    if ($key == $reserved_keys[$ri]) {
    $reserved_violation = 1;
    }
    }
    // prepare content
    if ($reserved_violation != 1)
    $content .= "$key: $val\n";
    }
    }
    return $content;
    }

    // mail the content we figure out in the following steps
    function mail_it($content, $subject, $email, $recipient) {
    mail($recipient, $subject, $content, "From: $email\r\nReply-To: email\r\nX-Mailer: DT_formmail");
    }

    // take in the body building arguments and build the body tag for page display
    function build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color) {
    if ($title)
    echo "<title>$title</title>";
    if (!$bgcolor)
    $bgcolor = "#FFFFFF";
    if (!$text_color)
    $text_color = "#000000";
    if (!$link_color)
    $link_color = "#0000FF";
    if (!$vlink_color)
    $vlink_color = "#FF0000";
    if (!$alink_color)
    $alink_color = "#000088";
    if ($background)
    $background = "background=\"$background\"";
    echo "<body bgcolor=\"$bgcolor\" text=\"$text_color\" link=\"$link_color\" vlink=\"$vlink_color\" alink=\"$alink_color\" $background>\n\n";
    }

    // our mighty error function..
    function print_error($reason,$type = 0) {
    build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color);
    // for missing required data
    if ($type == "missing") {
    ?>
    The form was not submitted for the following reasonsp>
    <ul><?
    echo $reason."\n";
    ?></ul>
    Please use your browser's back button to return to the form and try again.<?
    } else { // every other error
    ?>
    The form was not submitted because of the following reasonsp>
    <?
    }
    echo "<br><br>\n";
    exit;
    }

    // check for a recipient email address and check the validity of it
    // Thanks to Bradley miller (bradmiller@accesszone.com) for pointing
    // out the need for multiple recipient checking and providing the code.
    $recipient_in = split(',',$recipient);
    for ($i=0;$i<count($recipient_in);$i++) {
    $recipient_to_test = trim($recipient_in[$i]);
    if (!eregi("^[_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3}$", $recipient_to_test)) {
    print_error("<b>I NEED VALID RECIPIENT EMAIL ADDRESS ($recipient_to_test) TO CONTINUE</b>");
    }
    }

    // This is because I originally had it require but too many people
    // were used to Matt's Formmail.pl which used required instead.
    if ($required)
    $require = $required;
    // handle the required fields
    if ($require) {
    // seperate at the commas
    $require = ereg_replace( " +", "", $require);
    $required = split(",",$require);
    for ($i=0;$i<count($required);$i++) {
    $string = trim($required[$i]);
    // check if they exsist
    if((!(${$string})) || (!(${$string}))) {
    // if the missing_fields_redirect option is on: redirect them
    if ($missing_fields_redirect) {
    header ("Location: $missing_fields_redirect");
    exit;
    }
    $require;
    $missing_field_list .= "<b>Missing: $required[$i]</b><br>\n";
    }
    }
    // send error to our mighty error function
    if ($missing_field_list)
    print_error($missing_field_list,"missing");
    }

    // check the email fields for validity
    if (($email) || ($EMAIL)) {
    $email = trim($email);
    if ($EMAIL)
    $email = trim($EMAIL);
    if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $email)) {
    print_error("your <b>email address</b> is invalid");
    }
    $EMAIL = $email;
    }

    // check zipcodes for validity
    if (($ZIP_CODE) || ($zip_code)) {
    $zip_code = trim($zip_code);
    if ($ZIP_CODE)
    $zip_code = trim($ZIP_CODE);
    if (!ereg("(^[0-9]{5})-([0-9]{4}$)", trim($zip_code)) && (!ereg("^[a-zA-Z][0-9][a-zA-Z][[:space:]][0-9][a-zA-Z][0-9]$", trim($zip_code))) && (!ereg("(^[0-9]{5})", trim($zip_code)))) {
    print_error("your <b>zip/postal code</b> is invalid");
    }
    }

    // check phone for validity
    if (($PHONE_NO) || ($phone_no)) {
    $phone_no = trim($phone_no);
    if ($PHONE_NO)
    $phone_no = trim($PHONE_NO);
    if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $phone_no)) {
    print_error("your <b>phone number</b> is invalid");
    }
    }

    // check phone for validity
    if (($FAX_NO) || ($fax_no)) {
    $fax_no = trim($fax_no);
    if ($FAX_NO)
    $fax_no = trim($FAX_NO);
    if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $fax_no)) {
    print_error("your <b>fax number</b> is invalid");
    }
    }

    // prepare the content
    $content = parse_form($HTTP_POST_VARS);

    // check for a file if there is a file upload it
    if ($file_name) {
    if (!ereg("/$", $path_to_file))
    $path_to_file = $path_to_file."/";
    $location = $path_to_file.$file_name;
    copy($file,$location);
    unlink($file);
    $content .= "Uploaded File: ".$path_to_file.$file_name."\n";
    }

    // if the env_report option is on: get eviromental variables
    if ($env_report) {
    $env_report = ereg_replace( " +", "", $env_report);
    $env_reports = split(",",$env_report);
    $content .= "------ eviromental variables ------\n";
    for ($i=0;$i<count($env_reports);$i++) {
    $string = trim($env_reports[$i]);
    if ($env_reports[$i] == "REMOTE_HOST")
    $content .= "REMOTE HOST: ".$REMOTE_HOST."\n";
    else if ($env_reports[$i] == "REMOTE_USER")
    $content .= "REMOTE USER: ". $REMOTE_USER."\n";
    else if ($env_reports[$i] == "REMOTE_ADDR")
    $content .= "REMOTE ADDR: ". $REMOTE_ADDR."\n";
    else if ($env_reports[$i] == "HTTP_USER_AGENT")
    $content .= "BROWSER: ". $HTTP_USER_AGENT."\n";
    }
    }

    // if the subject option is not set: set the default
    if (!$subject)
    $subject = "Form submission";

    // send it off
    mail_it(stripslashes($content), stripslashes($subject), $email, $recipient);

    // if the redirect option is set: redirect them
    if ($redirect) {
    header ("Location: $redirect");
    exit;
    } else {
    print "Thank you for your submission\n";
    }

    // <---------- THE END ----------> //
    ?>

  2. #2
    SitePoint Evangelist
    Join Date
    Jul 2000
    Location
    Warwickshire, England
    Posts
    557
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I guess the easiest way is to modify the mail_it() function.

    function mail_it($content, $subject, $email, $recipient)
    {

    // $clientid would defined in your vars.

    if ($clientid == 1)
    {
    $content = $introtext1 . "\n" . $content . "\n" $footertext1;
    }

    if ($clientid == 2)
    {
    $content = $introtext2 . "\n" . $content . "\n" $footertext2;
    }

    elseif (!isset($clientid))
    {
    $content = $introtextdefault . "\n" . $content . "\n" $footertextdefault;

    }

    mail($recipient, $subject, $content, "From: $email\r\nReply-To: email\r\nX-Mailer: DT_formmail");
    }

    Would something like that be okay?

  3. #3
    Dumb PHP codin' cat
    Join Date
    Aug 2000
    Location
    San Diego, CA
    Posts
    5,460
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Or do it before calling the mail_it() function

    $content = $introtext.stripslashes($content).$footertext;
    // send it off
    mail_it($content, stripslashes($subject), $email, $recipient);
    Please don't PM me with questions.
    Use the forums, that is what they are here for.

  4. #4
    SitePoint Evangelist
    Join Date
    Oct 2000
    Posts
    430
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Cheers for the help Freddy.

    I worked something out my self which is along your lines:

    // prepare the content
    $content = parse_form($HTTP_POST_VARS);

    //###############################

    // Add some text to the content
    $content = "$intro\n\n.$content\n\n.$footer";


  5. #5
    Dumb PHP codin' cat
    Join Date
    Aug 2000
    Location
    San Diego, CA
    Posts
    5,460
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    That'll work too there ar eprobably hundreds of ways to incorporate it, gald you found one that suits your needs.
    Please don't PM me with questions.
    Use the forums, that is what they are here for.


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •