So senden Sie ein Formular an eine andere Seite im WordPress-Plugin

Lesezeit: 6 Minuten

Benutzeravatar von Mushfiqul Tuhin
Mushfiqul Tuhin

Ich entwickle ein WordPress-Plugin, das ein Formular an eine andere Seite sendet. Aber wenn ich versuche, das Formular an eine andere Seite zu senden, gibt diese Seite einen PHP-Fehler zurück. Mein Formularcode ist unten

echo "<form action='".plugins_url()."/wp_voting_poll/frontend_poll_process.php'     method='post'>";
echo "<input type="hidden" name="hide" value="$ques" />";
        $total_vote_count = $wpdb->get_var( "SELECT COUNT(*) FROM $table_result WHERE question_uid='$ques'" );
        if($ques!=""){
        echo "<table>";

        foreach($ans_data as $ans_res){

         //   $ans=$ans_res->answer;
         $answer_id=$ans_res->id;
         $type=$ans_res->answer_type;


               $vote_count = $wpdb->get_var( "SELECT COUNT(*) FROM $table_result WHERE answer_id='$answer_id'" );
                if($vote_count==0){
                    error_reporting(0);
                }
                $vote_percent=($vote_count*100)/$total_vote_count;
             echo "<tr> <td>";  
           echo "<div class="answer_div">";    
               if($type==1){
             echo "<div class="input"><input type="radio" name="ans_name[]" value="$answer_id"/>".$ans_res->answer."<br/></div>";
             }
             elseif($type==0){

             echo "<div class="input"><input type="checkbox" name="ans_name[]" value="$answer_id"/>".$ans_res->answer."<br/></div>";
             }
             if($backend==0){
             echo "</td> <td>";


             echo "<h4> total vote counted $vote_percent% </h4>";

            // echo "<img src="https://stackoverflow.com/questions/19997913/$url" width="$width_img"/>";
             $bar=$vote_percent*5.9;
             echo "<img src="https://stackoverflow.com/questions/19997913/$url" height="10" width="$bar" />";        

             echo "</td></tr>";
             }
        }
        echo "</table>";

        echo "<input type="submit" value="Submit vote" />";
        echo "</form>";

Und das ist mein Code einer anderen Seite, die das Formular verarbeiten soll. Aber leider gibt es einen PHP-Fehler zurück.

<?php

require_once("function_ip.php");
$vote_result=$_POST['ans_name'];
$uid=uniqid();
global $wpdb;
$table_vote=$wpdb->prefix."poll_answer_result";
$count=count($vote_result);
 $hidden=$_POST['hide'];

$ans_data=$wpdb->get_results("SELECT  * FROM $table_vote WHERE question_id='$hidden'" );

if($count>0){
foreach($vote_result as $vote_arr){

    $wpdb->insert($table_vote,
                array('answer_id' => $vote_arr,
                      'ip' =>get_client_ip(),  
                      'question_uid' => $hidden
                        ));
 }

}

?>

  • Zeigt den PHP-Fehler an. Aktivieren Sie das Debuggen in wp-config und zeigen Sie diese Fehler ebenfalls an. Fügen Sie auch die Fehler aus Ihrer PHP-Fehlerprotokolldatei ein

    – Anagio

    15. November 2013 um 9:41 Uhr

  • Ich erhalte diesen Fehler, wenn ich das Formular gesendet habe, Hinweis: Versuchen, die Eigenschaft eines Nicht-Objekts in C:\wamp\www\wordpress_plugin\wp-content\plugins\wp_voting_poll\frontend_poll_process.php in Zeile 7 zu erhalten. Schwerwiegender Fehler: Aufruf an eine Member-Funktion get_results() auf einem Nicht-Objekt in C:\wamp\www\wordpress_plugin\wp-content\plugins\wp_voting_poll\frontend_poll_process.php in Zeile 11

    – Mushfiqul Tuhin

    15. November 2013 um 10:02 Uhr


  • Wenden Sie sich an den Plugin-Entwickler

    – Anagio

    15. November 2013 um 10:20 Uhr

Benutzeravatar von David Gard
David Gard

WordPress hat einen generischen Handler, um mit allen Formularen umzugehen – admin-post.php.

Wenn Sie ein verstecktes Feld in Ihr Formular mit dem Namen actionkönnen Sie sich dann mit allen Vorteilen von WordPress in eine Funktion Ihrer Wahl einklinken.

echo "<form action='".get_admin_url()."admin-post.php' method='post'>";

    echo "<input type="hidden" name="action" value="submit-form" />";
    echo "<input type="hidden" name="hide" value="$ques" />";

    { Enter the rest of your first block of code from above here }

echo "</form>";

Und dann in deiner functions.php Datei (oder eine andere php Datei, die Sie per eingebunden haben functions.php), können Sie diese Methode verwenden.

add_action('admin_post_submit-form', '_handle_form_action'); // If the user is logged in
add_action('admin_post_nopriv_submit-form', '_handle_form_action'); // If the user in not logged in
function _handle_form_action(){

    { Enter your second block of code from above here }

}

Ich bin mir nicht sicher, ob Sie eine Weiterleitung benötigen, sobald Sie Ihr gewünschtes Ziel erreicht haben, aber das kann leicht berücksichtigt werden, wenn Sie dies tun.

Und eine letzte Frage: Ist dieses Formular im Frontend oder im Admin-Bereich? Nicht, dass es einen Unterschied machen sollte, dass diese Antwort, ich bin nur neugierig …

  • Vielen Dank. Mein Problem ist gelöst. Mein Formular ist im Frontend.

    – Mushfiqul Tuhin

    15. November 2013 um 15:39 Uhr

  • Gern geschehen. Das mit dem Frontend ist cool. Ich war nur neugierig, als wäre es im Admin-Bereich, es gäbe einige Dinge, die Sie tun könnten, um das Absenden von Formularen noch einfacher zu machen.

    – David Gard

    15. November 2013 um 16:56 Uhr


Benutzeravatar von RRikesh
RRikesh

Dein frontend_poll_process.php Seite wird aus der WordPress-Umgebung aufgerufen und gibt daher einen Fehler zurück $wpdb->get_results().

Sie können Ihren Code zu einem Plugin hinzufügen oder functions.php Haken verwenden:

<?php
add_action( 'after_setup_theme', 'so_19997913' ); 

function so_19997913() {
  require_once("function_ip.php");
  $vote_result = $_POST['ans_name'];
  $uid = uniqid();
  global $wpdb;
  $table_vote = $wpdb->prefix . "poll_answer_result";
  $count = count( $vote_result );
  $hidden = $_POST['hide'];

  $ans_data = $wpdb->get_results( "SELECT  * FROM $table_vote WHERE question_id='$hidden'" );

  if ( $count > 0 ) {
    foreach ( $vote_result as $vote_arr ) {

      $wpdb->insert( $table_vote, array('answer_id' => $vote_arr,
        'ip' => get_client_ip(),
        'question_uid' => $hidden
      ) );
    }
  }
}

  • Danke für deine Antwort. Das habe ich auch schon vermutet. Aber was soll ich tun, um dieses Problem loszuwerden?? Ich kenne eine Lösung, die darin besteht, den Formularverarbeitungscode auf derselben Seite zu platzieren, auf der sich das Formular befindet. Aber das will ich nicht. Ich möchte den Code auf einer anderen Seite verarbeiten

    – Mushfiqul Tuhin

    15. November 2013 um 10:30 Uhr

  • Sie haben “after_setup_theme” in add_action verwendet. Aber es ist kein Thema. Es ist ein Plugin. Ich möchte, dass, wenn ich das Plugin aktiviere, diese Funktion (so_19997913) unter der wp-Umgebung ausgeführt wird.

    – Mushfiqul Tuhin

    15. November 2013 um 10:45 Uhr

  • es ist egal. Ich habe es aus einem von mir verwendeten Code eingefügt, der sich auch in einem Plugin befand.

    – RRikesh

    15. November 2013 um 10:47 Uhr

  • Ich habe das gleiche Problem, aber schwerwiegender Fehler: Aufruf der undefinierten Funktion add_action() in C:\wamp\www\wordpress_plugin\wp-content\plugins\wp_voting_poll\frontend_poll_process.php in Zeile 4 Und ich denke, es hat den gleichen Grund. add_action befindet sich außerhalb der wp-Umgebung. Weiß aber keine Lösung 🙁

    – Mushfiqul Tuhin

    15. November 2013 um 10:53 Uhr

  • Danke für den Versuch mir zu helfen. Aber wenn ich meine Verarbeitungscodes in die Haupt-Plugin-Datei stecke, behindert dies mein Ziel. Ich muss den Code auf einer anderen Seite verarbeiten.

    – Mushfiqul Tuhin

    15. November 2013 um 11:07 Uhr

1402050cookie-checkSo senden Sie ein Formular an eine andere Seite im WordPress-Plugin

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy