0

Building a contact form. I have required input fields Your Name, E-mail and phone. Person has to enter information in these fields or else they will get error message. My fourth field is a message text box. In that field using placeholder= I have a default message I am interested in: "get_the_title (of the post)". Working as I hoped. My problem is I do not want to force person filling form to have to input text in this field and if they don't add any additional text in the message text box it will send the contact form email with the default text I put there using the "placeholder" text I default generated as mentioned above. Right now my code is forcing text to be input in the message box to send.

enter image description here

Here is the code I am using:

echo '<form action="' . esc_url( $_SERVER['REQUEST_URI'] ) . '" method="post">';
                                echo '<h5>';
                                echo 'Ask a question <br/>';
                                echo '</h5>';
                                echo '<p>';
                                echo '<input style="margin-left: 15px;" type="text" placeholder="Your Name (required)" name="cf-name" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["cf-name"] ) ? esc_attr( $_POST["cf-name"] ) : '' ) . '" size="29" />';
                                echo '</p>';
                                echo '<p>';
                                echo '<input style="margin-left: 15px;" type="email" placeholder="E-mail (required)" name="cf-email" value="' . ( isset( $_POST["cf-email"] ) ? esc_attr( $_POST["cf-email"] ) : '' ) . '" size="29" />';
                                echo '</p>';
                                echo '<p>';
                                echo '<input style="margin-left: 15px;" type="text" placeholder="Phone (required)" name="cf-subject" pattern="[0-9-() ]+" value="' . ( isset( $_POST["cf-subject"] ) ? esc_attr( $_POST["cf-subject"] ) : '' ) . '" size="29" />';
                                echo '</p>';
                                echo '<p>';
                                echo '<textarea style="margin-left: 15px; width: 246px;" rows="3" cols="28" placeholder="I am interested in: '.get_the_title().' " name="cf-message">' . ( isset( $_POST["cf-message"] ) ? esc_attr( $_POST["cf-message"] ) : '' ) . '</textarea>';
                                echo '</p>';
                                echo '<p><input type="submit" name="cf-submitted" value="Contact Agent" style="border-radius: 5px; color: #fff; margin-left: 15px; width: 247px; height: 38px; background-color: #27ae60;"></p>';
                                echo '</form>';
                                echo '<p style="font-size: x-small; font-weight: bold; margin-left: 22px;">';
                                echo 'By sending a request you agree to our Privacy Policy';
                                echo '</p>';


                                // if the submit button is clicked, send the email
                                if ( isset( $_POST['cf-submitted'] ) ) {

                                    // sanitize form values
                                    $name    = sanitize_text_field( $_POST["cf-name"] );
                                    $email   = sanitize_email( $_POST["cf-email"] );
                                    $subject = sanitize_text_field( $_POST["cf-subject"] );
                                    $message = esc_textarea( $_POST["cf-message"] );

                                    // get the blog administrator's email address
                                    $to = get_option( 'admin_email' );

                                    $headers = "From: $name <$email>" . "\r\n";

                                    // If email has been process for sending, display a success message
                                    if ( wp_mail( $to, $subject, $message, $headers ) ) {
                                    echo '<div>';
                                    echo '<h5>Thanks for contacting us, expect a response soon.</h5>';
                                    echo '</div>';
                                    } 
                                    else {
                                    echo '<h5>An unexpected error occurred.</h5>';
                                    }
                                }
  • The way I see it you have 2 options: Use a value instead of a placeholder for the default value, or in your submission script detect if the message is empty and if it is just include the same value that you use for the placeholder. – Jacob Peattie Jun 30 '18 at 16:40
  • Hi Jacob, thank for answering. I am a hack and a bit lost. Can you suggest a script? – Joe Jun 30 '18 at 18:50
0

This is what I changed to and worked perfectly.

    echo '<textarea style="margin-left: 15px; width: 246px;" rows="3" cols="28" name="cf-message">' . 
( isset( $_POST["cf-message"] ) ? esc_attr( $_POST["cf-message"] ) : 'I am interested in: '.get_the_title() ) . 
'</textarea>';
  • Why don’t you escape the title? ;) – Krzysiek Dróżdż Jul 1 '18 at 6:11
  • Hi Krzysiek, thank you for commenting. I am a hack at this and don't know what I don't know. Could you explain more your comment and if I my script is going to do something bad. thanks – Joe Jul 1 '18 at 12:31
  • Everything you print on the site should be escaped. In your case, if title contains </textarea> string, your textarea tag will be closed and rest of the title will be printed outside of it. And even worse - you use esc_attr to print textareas content - so again, it's incorrect. For escaping textareas you should use esc_textarea (codex.wordpress.org/Function_Reference/esc_textarea). – Krzysiek Dróżdż Jul 1 '18 at 12:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.