it-swarm.com.de

PHP Das Kontaktformular gibt eine Warnung im Text-Widget zurück

Ich habe ein Kontaktformular erstellt (mit viel Hilfe von euch hier) und möchte es auf Seiten und in Text-Widgets über einen Shortcode (für Seitenleisten usw.) verwenden können. Es funktioniert perfekt auf beiden, außer wenn das Formular gesendet wird, bekomme ich Illegal string offset nur in der Seitenleisten-Widget-Form. Das Seitenformular funktioniert jedoch einwandfrei. Ich versuche, das Feld "Name" aus dem Formular zu ziehen, um den Benutzernamen wiederzugeben, wenn das Formular erfolgreich gesendet wurde. Die Codezeile, die die Warnung ausgibt, lautet wie folgt:

echo '<p>Thank you for contacting us '.$_POST['cf-name'].', a member of our team will be in touch with you shortly.</p>';

Ich habe auch versucht:

echo '<p>Thank you for contacting us '.(isset($_POST[ 'cf-name' ])).', a member of our team will be in touch with you shortly.</p>';

Wenn Sie das zweite Beispiel verwenden, wird die Warnung entfernt, der Benutzername wird jedoch bei der Übermittlung des Formulars nicht angezeigt, und die letztere Option zeigt 1 im Seitenkontaktformular an, als es noch nicht funktioniert hat. Irgendwelche Ideen, wie man das behebt?

Die volle Funktion ist:

function my_form_message()
{
    global $errors;
    if (is_wp_error($errors) && empty($errors->errors)) {
        echo '<section class="alertbox-success">';
        echo '<div class="cf-success">';
        echo '<p>Thank you for contacting us '.$_POST['cf-name'].', a member of our team will be in touch with you shortly.</p>';
        echo '</div>';
        echo '</section>';

    //Empty $_POST because we already sent email
    $_POST = '';
    } else {
        if (is_wp_error($errors) && !empty($errors->errors)) {
            $error_messages = $errors->get_error_messages();
            foreach ($error_messages as $k => $message) {
                echo '<section class="alertbox-error">';
                echo '<div class="cf-error '.$k.'">';
                echo '<p>'.$message.'</p>';
                echo '</div>';
                echo '</section>';
            }
        }
    }
}

Weiß nicht, ob das hilft oder nicht. Irgendwelche Ideen wären sehr dankbar. Danke im Voraus

EDIT: Dies ist die vollständige Warnung:

/Applications/MAMP/htdocs/centenary-framework/wp-content/themes/cent_framework/assets/inc/core/contact-form.php on line 113

Notice: Uninitialized string offset: 0 in /Applications/MAMP/htdocs/centenary-framework/wp-content/themes/cent_framework/assets/inc/core/contact-form.php on line 113
Thank you for contacting us , a member of our team will be in touch with you shortly.

BEARBEITEN:

Vollständiger Code:

<?php

// Form markup
 function cf_form_code()
 {
     ?>
<div class="cf-contact-form">
 <form action="<?php esc_url($_SERVER['REQUEST_URI']);
     ?>" method="post">
   <p>
     <input type="text" name="cf-name" placeholder="Name (required)" pattern="[a-zA-Z0-9 ]+" value="<?php isset($_POST['cf-name']) ? esc_attr($_POST['cf-name']) : '';
     ?><?php if (isset($_POST['cf-name'])) {
    echo htmlentities($_POST['cf-name']);
}
     ?>" size="40" />
   </p>
   <p>
     <input type="email" name="cf-email" placeholder="Email (required)" value="<?php isset($_POST['cf-email']) ? esc_attr($_POST['cf-email']) : '';
     ?><?php if (isset($_POST['cf-email'])) {
    echo htmlentities($_POST['cf-email']);
}
     ?>" size="40" />
   </p>
   <p>
     <input type="tel" name="cf-tel" placeholder="Telephone" pattern="^\s*\(?(020[7,8]{1}\)?[ ]?[1-9]{1}[0-9{2}[ ]?[0-9]{4})|(0[1-8]{1}[0-9]{3}\)?[ ]?[1-9]{1}[0-9]{2}[ ]?[0-9]{3})\s*$" value="<?php isset($_POST['cf-tel']) ? esc_attr($_POST['cf-tel']) : '';
     ?><?php if (isset($_POST['cf-tel'])) {
    echo htmlentities($_POST['cf-tel']);
}
     ?>" size="40" />
   </p>
   <p>
     <textarea class="cf-message" rows="10" cols="35" name="cf-message" placeholder="Message (required)" onkeyup="adjust_textarea(this)"><?php isset($_POST['cf-message']) ? esc_attr($_POST['cf-message']) : '';
     ?><?php if (isset($_POST['cf-message'])) {
    echo htmlentities($_POST['cf-message']);
}
     ?></textarea>
   </p>
   <p><input type="text" name="content" id="content" value="" class="hpot" /></p>
   <p><input type="submit" name="cf-submitted" value="Send"/></p>
 </form>
</div>
 <?php

 }

// Form validation
 function cf_validate_form()
 {
     $errors = new WP_Error();

     if (isset($_POST[ 'content' ]) && $_POST[ 'content' ] !== '') {
         $errors->add('bot', 'Sorry, this field should not be filled in. Robots only');
     }

     if (isset($_POST[ 'cf-name' ]) && $_POST[ 'cf-name' ] == '') {
         $errors->add('name_error', 'Please fill in a valid name.');
     }

     if (isset($_POST[ 'cf-email' ]) && $_POST[ 'cf-email' ] == '') {
         $errors->add('email_error', 'Please fill in a valid email.');
     }

     if (isset($_POST[ 'cf-message' ]) && $_POST[ 'cf-message' ] == '') {
         $errors->add('message_error', 'Please fill in a valid message.');
     }

     return $errors;
 }

// Form delivery
 function deliver_mail($args = array())
 {

  // This $default array is a way to initialize some default values that will be overwritten by our $args array.
  // We could add more keys as we see fit and it's a Nice way to see what parameter we are using in our function.
  // It will only be overwritten with the values of our $args array if the keys are present in $args.
  // This uses WP wp_parse_args() function.
  $defaults = array(
    'name' => '',
    'email' => '',
    'tel' => '',
    'message' => '',
    'to' => get_option('admin_email'), // get the administrator's email address
  );

     $args = wp_parse_args($args, $defaults);

     $headers = "From: {$args['name']}  <{$args['email']}>"."\r\n";

  // Send email returns true on success, false otherwise
  if (wp_mail($args['to'], $args['tel'], $args['message'], $headers)) {
      return;
  } else {
      return false;
  }
 }

// Form sanitize
function cf_sanitize_field($input)
{
    return trim(stripslashes(sanitize_text_field($input)));
}

// Form succsess message
function cf_form_message()
{
    global $errors;
    if (is_wp_error($errors) && empty($errors->errors)) {
        echo '<section class="alertbox-success">';
        echo '<div class="cf-success">';
        echo '<p>Thank you for contacting us '.$_POST['cf-name'].', a member of our team will be in touch with you shortly.</p>';
        echo '</div>';
        echo '</section>';

    //Empty $_POST because we already sent email
    $_POST = '';
    } else {
        if (is_wp_error($errors) && !empty($errors->errors)) {
            $error_messages = $errors->get_error_messages();
            foreach ($error_messages as $k => $message) {
                echo '<section class="alertbox-error">';
                echo '<div class="cf-error '.$k.'">';
                echo '<p>'.$message.'</p>';
                echo '</div>';
                echo '</section>';
            }
        }
    }
}

// Form shortcode
add_shortcode('contact_form', 'cf_contact_form');
function cf_contact_form()
{
    ob_start();

    cf_form_message();
    cf_form_code();

    return ob_get_clean();
}

// Error validation
add_action('init', 'cf_cf_form');
function cf_cf_form()
{
    if (isset($_POST['cf-submitted'])) {
        global $errors;
        $errors = cf_validate_form();
        if (empty($errors->errors)) {
            $args = array(
         'name' => cf_sanitize_field($_POST['cf-name']),
         'email' => cf_sanitize_field($_POST['cf-email']),
         'tel' => cf_sanitize_field($_POST['cf-tel']),
         'message' => cf_sanitize_field($_POST['cf-message']),
       );
            deliver_mail($args);
        } else {
            return $errors;
        }
    }
}
2
user53340

Nicht initialisierter Zeichenfolgenoffset: 0

Dieser Fehler wird angezeigt, weil ein leerer Wert vorhanden ist. Prüfen Sie zunächst, ob der Wert !empty() (nicht leer) ist. Hier ist der Quellcode, den Sie in Ihrer Frage mit meinem Update angeben.

function cf_form_message() {
    global $errors;
    if ( is_wp_error( $errors ) && empty( $errors -> errors ) ) {
        ?>
        <section class="alertbox-success">
            <div class="cf-success">
                <p>Thank you for contacting us <?php if ( isset( $_POST['cf-name'] ) && !empty( $_POST['cf-name'] ) ) { echo $_POST['cf-name']; } else { echo 'NO_NAME'; } ?>, a member of our team will be in touch with you shortly.</p>
            </div>
        </section>
        <?php
        //Empty $_POST because we already sent email
        $_POST = '';
    }
    else {
        if ( is_wp_error( $errors ) && !empty( $errors -> errors ) ) {
            $error_messages = $errors -> get_error_messages();
            foreach ( $error_messages as $k => $message ) {
                ?>
                <section class="alertbox-error">
                    <div class="cf-error <?php echo $k; ?>">
                        <p><?php echo $message ?></p>
                    </div>
                </section>
                <?php
            }
        }
    }
}