cómo enviar un formulario a otra página en el complemento de wordpress

6 minutos de lectura

avatar de usuario
Mushfiqul Tuhin

Estoy desarrollando un complemento de wordpress, que envía un formulario a otra página. Pero cuando trato de enviar el formulario a otra página, esa página devuelve un error de php. Mi código de formulario está debajo

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>";

Y este es mi código de otra página, que debe procesar el formulario. Pero desafortunadamente devuelve un error de php.

<?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
                        ));
 }

}

?>

  • Muestra el error de PHP. Habilite la depuración en wp-config y muestre esos errores también. También pegue los errores de su archivo de registro de errores de php

    – Anagio

    15 de noviembre de 2013 a las 9:41

  • Recibo este error donde envié el formulario, Aviso: Intentando obtener la propiedad de un objeto que no es en C:\wamp\www\wordpress_plugin\wp-content\plugins\wp_voting_poll\frontend_poll_process.php en la línea 7 Error fatal: llamar a una función miembro get_results() en un no objeto en C:\wamp\www\wordpress_plugin\wp-content\plugins\wp_voting_poll\frontend_poll_process.php en la línea 11

    – Mushfiqul Tuhin

    15 de noviembre de 2013 a las 10:02


  • Póngase en contacto con el desarrollador del complemento

    – Anagio

    15 de noviembre de 2013 a las 10:20

avatar de usuario
David Gard

WordPress tiene un controlador genérico para manejar todas las formas: admin-post.php.

Si incluye un campo oculto en su formulario llamado actionluego puede conectarse a una función de su elección con todas las bondades de wordpress incluidas.

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>";

Y luego en tu functions.php archivo (o cualquier otro php archivo que ha incluido a través de functions.php), puede utilizar este método.

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 }

}

No estoy seguro de si necesita una redirección una vez que llegue a su destino deseado, pero eso puede explicarse fácilmente si lo hace.

Y una pregunta final: ¿este formulario se encuentra en la parte delantera o en el área de administración? No es que deba hacer una diferencia que esta respuesta, solo tengo curiosidad …

  • Muchísimas gracias. Mi problema está resuelto. Mi formulario está en la parte delantera.

    – Mushfiqul Tuhin

    15 de noviembre de 2013 a las 15:39

  • De nada. Eso es genial sobre la parte delantera. Tenía curiosidad, como si estuviera en el área de administración, había algunas partes que podía hacer para que el envío de formularios fuera aún más fácil.

    – David Gard

    15 de noviembre de 2013 a las 16:56


avatar de usuario
rikesh

Su frontend_poll_process.php la página está siendo llamada fuera del entorno de WordPress, por lo tanto, devuelve un error en $wpdb->get_results().

Puede agregar su código a un complemento o functions.php usando ganchos:

<?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
      ) );
    }
  }
}

  • Gracias por su respuesta. Yo también lo he adivinado. Pero, ¿qué debo hacer para deshacerme de este problema? Conozco una solución, que es poner el código de procesamiento del formulario en la misma página donde se encuentra el formulario. Pero no quiero eso. Quiero procesar el código en una página diferente.

    – Mushfiqul Tuhin

    15/11/2013 a las 10:30

  • ha utilizado “after_setup_theme” en add_action. Pero no es un tema. Es un complemento. Lo que quiero hacer es que, cuando active el complemento, esta función (so_19997913) se ejecutará en el entorno wp.

    – Mushfiqul Tuhin

    15 de noviembre de 2013 a las 10:45

  • no importa. Lo pegué de un código que usé que también estaba en un complemento.

    – Rikesh

    15 de noviembre de 2013 a las 10:47

  • Todavía tengo el mismo problema. Error fatal: llamar a la función indefinida add_action() en C:\wamp\www\wordpress_plugin\wp-content\plugins\wp_voting_poll\frontend_poll_process.php en la línea 4 Y creo que es por la misma razón. add_action está fuera del entorno wp. pero no se la solucion 🙁

    – Mushfiqul Tuhin

    15 de noviembre de 2013 a las 10:53

  • Gracias por tratar de ayudarme. Pero si pongo mis códigos de procesamiento en el archivo del complemento principal, entonces obstaculiza mi objetivo. Necesito procesar el código en otra página.

    – Mushfiqul Tuhin

    15 de noviembre de 2013 a las 11:07

¿Ha sido útil esta solución?