Visualizzare i dati nella stessa pagina del form senza ricaricare

30 set 2014, 12:26:11
Visualizzazioni: 16.5K
Voti: 1

Non sono sicuro se si tratti di qualcosa specifico di WordPress o di ciò che sto facendo, ma non riesco a far funzionare i tutorial online quando li implemento in un page template. Ad esempio questo http://www.computersneeker.com/submit-a-form-without-page-refresh-in-php-using-jquery/ Tutorial modificando la $query e la chiamata mysql per semplicemente fare echo $name; Spiegherò il mio problema effettivo e magari qualcuno potrà identificare il mio errore.

Il titolo di questo post sembra simile Ajaxify Form That Submits To Same Page To Display Post Data ma oltre a non avere risposta, il contenuto sembra diverso.

Quello che cerco di fare è avere un form con diversi input. L'utente clicca un pulsante di invio, e poi una tabella nella stessa pagina viene aggiornata. Fondamentalmente i dati inseriti vengono cercati in un database, vengono fatti alcuni calcoli, e poi il risultato viene mostrato nella tabella. Utilizzo molti array e la connessione al db con $wpdb->get_results.

Sto usando do_shortcode e POST, se questo cambia qualcosa.

La mia struttura è stata di farlo nella stessa pagina:

<form action ="" method="post">
Inserisci la tua età <input type="number" min="1" name="age" style="width:50px;">

Seleziona Campo
<select name="field">
    <option value="P">Campo P</option>
    <option value="M">Campo M</option>
    <option value="C">Campo C</option>
</select>
<div class="input_fields_wrap">
    <button class="add_field_button">Aggiungi Campo</button><br><br>
    <div>Nome Campo: <input type="text" name="fieldname[]">
Dato Totale:</td><td><input style="width:50px;" name="datum[]" type="number" min="1" id="datum">
</div>
<input type="submit" name="test" value="Calcola"/>
</form>

Sotto questo, poi provo a parsare le variabili

if(isset($_POST["fieldname"])){
    $capture_field_vals = "";
    foreach($_POST["fieldname"] as $key => $text_field){
        $capture_field_vals .= $text_field .", ";
    $dataset[] = $text_field;
    }
    foreach($_POST["field"] as $key => $text_field){
        $capture_field_vals .= $text_field .", ";
    $field[] = $text_field;
    }
    $field = $_POST["field"];
}

Poi faccio alcune operazioni algoritmiche confrontando le variabili con $wpdb->get_results.

Infine inserisco i risultati nella tabella nella pagina.

Attualmente questo funziona, ma quando il pulsante di invio viene premuto, la pagina si ricarica, i dati inseriti dall'utente spariscono, ma la tabella si aggiorna correttamente. Ho difficoltà a trovare informazioni su come fare questo. Quando cerco come evitare il refresh della pagina, i tutorial sono tutti su come inviare dati a un database e mettono il codice in un file separato. Ho bisogno che la tabella sia sempre nella pagina, piena di 0 finché non vengono inseriti dati. Poi mantenere i valori nel form, e aggiornare la tabella al click del pulsante. È possibile farlo nello stesso file o sto fraintendendo un problema fondamentale?

0
Tutte le risposte alla domanda 1
2

Se ho capito correttamente:

  • hai bisogno che il form originale mostri i valori di ciò che è stato appena inviato.
  • Hai anche bisogno che la tabella mostri 0 sui valori che non sono stati calcolati.
  • Al momento la tabella calcola le informazioni perfettamente con un submit che ricarica la pagina.

Puoi usare la variabile if(isset($_POST["fieldname"])){ che hai sopra per fare questo.

if(isset($_POST["fieldname"])){ echo $_POST["fieldname"]

mostrerebbe il valore di ciò che è stato inviato, ad esempio il testo in una casella di testo. Nel tuo caso è un checkbox quindi usi qualcosa come questo invece:

<input type="checkbox" name="txtCheck" value="your value" <?php if(isset($_POST['txtCheck'])) echo "checked='checked'"; ?>  />

Puoi fare lo stesso con la tabella. Se vuoi che mostri 0 prima del calcolo (senza vedere il tuo codice della tabella)

Qualcosa come questo nella tua cella:

if (empty($cellvalue)) echo '0'; //Se non ci sono dati da mostrare mostra 0 
else echo $cellvalue;
30 set 2014 17:15:30
Commenti

Questo aggiorna ancora la pagina, ma si limita a ripetere il valore nel campo di testo? I tuoi 3 punti sono corretti, quello che ho ora sia lo zero che il calcolo (la tabella si aggiorna correttamente), è solo un problema di refresh. Sto cercando come evitare il refresh in modo che gli elementi sulla pagina non cambino. Forse devo modificare la domanda, ma il textbox fieldname utilizza una funzione jQuery per aggiungere dinamicamente più di un campo (tutti i valori sono memorizzati in un array e poi utilizzati con foreach). Quindi quando avviene un refresh, il campo originale è ancora lì, ma quelli aggiuntivi vengono rimossi.

user-2147482637 user-2147482637
30 set 2014 17:52:32

Ah ok, quindi intendi che le tue caselle jQuery aggiuntive vengono rimosse quando la pagina viene aggiornata, ma i dati sono ancora presenti? Se è così, potresti considerare AJAX che invia i dati senza un refresh, ma certamente non è la mia area di competenza. Non posso vedere lo script ma dal codice sopra sono tutti chiamati fieldname[1] o fieldname[2] ecc. man mano che vengono creati?

Bysander Bysander
1 ott 2014 14:59:54