Pregunta sobre Developing with WordPress de Wordpress:

Publicar variables de una página a otra

Un usuario preguntó 👇

Quiero pasar un valor más allá de un formulario html a otra página después de hacer clic en el botón enviar. No es necesario almacenar este valor en la base de datos, sino utilizarlo temporalmente para mostrar al usuario una selección de datos de productos de la base de datos en la página siguiente. La salida html del formulario funciona como se esperaba y el valor aparece en el valor de la opción, no puedo hacer que publique ese valor y «obtenerlo» de la página dos usando POST. Pero si cambio POST a GET. Funciona como se esperaba. Me han dicho que es mejor usar POST, ¿pero parece que no me funciona?:

Formulario mostrado en la página 1:

<?php

echo '<form method="post" action="/page2">';
echo '<select name="selectProduct">';
echo '<option value="" disabled selected>--select--</option>';
foreach ( $getInfo as $product ) {
    echo '<option value="' . esc_html( $product->id ) . '">'.esc_html($product->product).'</option>';
}
echo '</select>';
echo '<div class="btnWrapper">';
    echo '<input class="btn border-width-0 btn-text-skin btn-color-jevc btn-square btn-icon-left adduserBtn" type="submit" name="btnSubmit" value="View specs">';
echo '</div>';
echo '</form>';

Salida en la página 2:

<?php
// ...
$selectedProduct = $_POST['selectProduct'];
echo '<div><b>YOU SELECTED:</b>' . esc_html( $selectedProduct ) .'</div>';

Mientras hace var_dump ($ _ POST); en la página 2, encuentro empty array(0){}

Mientras que php error al publicar: error al publicar:

Error de la base de datos de WordPress:

Columna desconocida ‘selectProduct’ en ‘lista de campos’ para actualizar la consulta myDBtable SET selectProduct = ’39’ DONDE id = 39

¿Dónde me equivoco?

(@ alegremente)

Hace 10 meses, 2 semanas

Este enlace muestra las funciones que afectan las variables de la consulta. WordPress elimina todas las variables desconocidas.

(@bcworkz)

Hace 10 meses, 2 semanas

De hecho, las query_vars desconocidas se eliminan, pero WP no borraría los valores en $ _POST.

Probé sus botones de código lo mejor que pude considerar no tener una lista de productos. Codifiqué valores arbitrarios según fuera necesario. Resultados de la segunda página DESPUÉS DE LA SELECCIÓN: 4444 como se esperaba ya que el valor de mi opción seleccionada era 4444. Var_dumping $ _POST genera en la página de destino los valores del elemento de formulario como se esperaba.

¿Existe una referencia entre el formulario y la página 2? Liberan valores que a veces se pasan. Un mensaje de error de la base de datos indica que se ha pasado un valor de «39», por lo que algo funciona a pesar de que var_dump () no muestra nada. Si su tabla no tiene una columna ‘selectProduct’, existe una pregunta sobre cómo se construye su consulta SQL.

(@ creativ3y3)

Hace 10 meses, 2 semanas

No sé si ocurrirá alguna desviación, pero es posible que tenga que investigar eso para ver si algo más podría estar sucediendo. Si elimino la acción en el formulario y publico un eco de $ selectedProduct en la misma página, funciona. Falla cuando se agrega la acción al formulario para ir a la segunda página. Cuando llego a esa página, obtengo: Variable no especificada: selectedProduct

(@ creativ3y3)

Hace 10 meses, 2 semanas

Acabo de notar en la segunda página que aterriza en un formulario con una acción de publicación y una función, si es un trabajo, parece contradictorio. Si elimino ese código «si es un trabajo», parece que funciona.

Entonces, supongo que eso significa que no puede haber otro «si publicación» en la página secundaria.

Esta respuesta fue modificada hace 10 meses, hace dos semanas por.

(@ creativ3y3)

Hace 10 meses, 2 semanas

Gracias por tu tiempo @bcworkz, me pusiste en camino para depurarlo. Parece estar relacionado con otra pieza de código en conflicto que impedía que la variable funcionara correctamente. La acción POST en la página 1 que va a la página 2 aterriza en una página que permite al usuario actualizar y enviar datos a la base de datos. Entonces, para obtener la identificación del producto de la página 1, paso la variable usando la publicación y en la página 2 uso:
$selectedProduct = $_POST['selectProduct'];
Utilizo esta información para consultar los datos a través de una identificación que funciona. Luego, si incluyo el código a continuación para permitir que el usuario actualice los datos (en la segunda página) se rompe porque la línea mencionada a continuación se está actualizando, si lo comento y lo envío, se rompe la actualización. después de insertar debido a lo anterior $selectedProduct ahora definiendo variables. A continuación se muestra el código actualizado:

if ($_POST) {
	$skipKeys = array(
                    'btnSubmit',
                    'id',
                    'Product',
                    'Series',
                    'selectProduct',
                 );

foreach($_POST as $key =>$value){
        if(!in_array($key,$skipKeys)){
            $myDB->query(
                $myDB->prepare(
                "UPDATE <code>my-table</code> SET ".$key."= %s WHERE id= %d", $value, $selectedProduct
                )
            );
        }    
}
//this line causes it not to work at all
//header ("location: " . $_SERVER['REQUEST_URI']);
}

¿Alguna idea de cómo solucionar esto? ¿Quizás probar una variable de sesión en su lugar?

Esta respuesta fue modificada hace 10 meses, hace dos semanas por.

(@autotutorial)

Hace 10 meses, 2 semanas

Debe usar isset para verificar la muestra isset isset ($ _ POST[‘key’]); está claro que $ _POST siempre está vacío a menos que use una clave y no tenga un valor, por ejemplo:

$_POST['product'] = '';
if( $_POST['product'] ) {
//this false never true
}
if( isset($_POST['product'] ) ) {
//true
}

, también en foreach puede crear variables de contenedor y usar echo cuando tenga todos los datos. Los detalles de POST solo aparecen en la página de destino, no puede redirigirlos. Utilice SESSION o tal vez $ selectedProduct global; para la función.

(@ creativ3y3)

Hace 10 meses, 2 semanas

@autotutorial Gracias por tu consejo, analizaré todas estas cosas. Intenté que una variable de sesión funcionara, funciona cuando no salgo de la página (sin acción de formulario) y publico el formulario, pero tan pronto como realizo una acción en el formulario para llevarlo a la segunda página, no no establezca la variable. La página 2 muestra la variable de sesión, pero no se ha actualizado desde la publicación en la página 1 (por lo que muestra los datos incorrectos).

En la página 1 hago lo siguiente:

if(!isset($_SESSION)) 
    { 
        session_start();
    } 

y:

if( isset($_POST['selectProduct'] ) ) {
$selectedProduct = $_POST['selectProduct'];
$_SESSION['selectedModel'] = $selectedProduct;
	echo $_SESSION['selectedModel'];
}

Luego, página 2:

if(!isset($_SESSION)) 
    { 
        session_start();
    } 
echo $_SESSION['selectedModel'];

¿Tengo la variable de sesión incorrecta?

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *