webentwicklung-frage-antwort-db.com.de

Formulardaten werden nicht in der WordPress-Datenbank gespeichert

Ich habe zwei Seiten erstellt - Contribute Page & Checkout Page .

Auf Contribute Page habe ich folgenden Code:

<?php
if(isset($_POST['submitnow'])) {
        global $wpdb;
$wpdb->insert( 
    'wp9c_treetweet', 
    array( 
        'name' => $_POST['aname'], 
        'amt' => $_POST['aamt'],
        'dept' => $_POST['adept']
    ), 
    array( 
        '%s', 
        '%d',
                '%s' 
    )

);        
}    
?>

<form action="" method="POST" id="addcourse">
<label>Name:<input type="text" name="aname" size="30" required></label>
<label>Amount:<input type="text" name="aamt" size="30" required></label>
<label>Department:<input type="text" name="adept" size="30" required></label>

<input type="submit" name="submitnow" id="addcoursesubmit" value="Submit">
</form>

Dieser Code funktioniert einwandfrei und fügt die Formulardaten ordnungsgemäß in die Datenbank ein.

Um diese Seite zu Checkout Page umzuleiten, habe ich folgenden Code in functions.php hinzugefügt:

function redirect_from_checkout() {

   if( !isset( $_POST['submitnow'] ) )

       return;

         wp_redirect( home_url( '/checkout/' ) );

         exit;  
}

add_action( 'template_redirect', 'redirect_from_checkout' );

Nach dem Hinzufügen von Umleitungscode in functions.php funktioniert die Umleitung ordnungsgemäß, aber die Formulardaten werden nicht in die Datenbanktabelle eingefügt.

Bitte helfen Sie mir mit einer Lösung.

1
Minu

Laut WordPress Codex über den template_redirect hook:

Dieser Aktions-Hook wird ausgeführt, kurz bevor WordPress bestimmt, welche Vorlagenseite geladen werden soll.

Sie leiten den Benutzer also auf eine andere Seite um, bevor die Vorlage überhaupt geladen ist, und Ihr Formular wird überhaupt nicht geladen. Sie können einen anderen Hook verwenden, der nach template_redirect ausgeführt wird, z. B. wp_footer.

Sie können den Benutzer auch direkt nach dem Einfügen des Formulars in die Datenbank umleiten, indem Sie Ihren Code wie folgt ändern:

<?php
    if(isset($_POST['submitnow'])) {
        global $wpdb;
        $wpdb->insert( 
            'wp9c_treetweet', 
            array( 
                'name' => $_POST['aname'], 
                'amt' => $_POST['aamt'],
                'dept' => $_POST['adept']
            ), 
            array( 
                '%s', 
                '%d',
                        '%s' 
            )

        );
        wp_safe_redirect(home_url( '/checkout/' ));
        exit();
    }
?>

Auf diese Weise wird der Benutzer nach dem Einfügen des Formulars weitergeleitet.

1
Jack Johansson