Afisare date pe aceeași pagină cu formular fără reîncărcare
Nu sunt sigur dacă este vorba despre WordPress sau despre ceea ce fac eu, dar nu reușesc să fac tutorialele online să funcționeze atunci când le implementez într-un template de pagină. De exemplu, acest http://www.computersneaker.com/submit-a-form-without-page-refresh-in-php-using-jquery/ tutorial cu modificarea $query și apelul mysql pentru a afișa doar $name; Voi explica problema mea actuală și poate cineva va înțelege greșeala mea.
Titlul acestui post sună similar Ajaxify Form That Submits To Same Page To Display Post Data dar în afară de lipsa răspunsului, conținutul pare diferit.
Ceea ce încerc să fac este să am un formular cu diferite input-uri. Utilizatorul apasă un buton de trimitere, iar apoi un tabel pe aceeași pagină este actualizat. Practic, datele introduse sunt căutate într-o bază de date, se fac unele calcule, iar rezultatul este afișat în tabel. Folosesc multe array-uri și conexiuni la baza de date cu $wpdb->get_results.
Folosesc do_shortcode și POST, dacă asta schimbă ceva.
Structura mea a fost să fac totul în aceeași pagină:
<form action ="" method="post">
Introdu vârsta ta <input type="number" min="1" name="age" style="width:50px;">
Selectează câmpul
<select name="field">
<option value="P">Câmp P</option>
<option value="M">Câmp M</option>
<option value="C">Câmp C</option>
</select>
<div class="input_fields_wrap">
<button class="add_field_button">Adaugă câmp</button><br><br>
<div>Nume câmp: <input type="text" name="fieldname[]">
Total Datum:</td><td><input style="width:50px;" name="datum[]" type="number" min="1" id="datum">
</div>
<input type="submit" name="test" value="Calculează"/>
</form>
Sub acesta, încerc apoi să parsez variabilele:
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"];
}
Apoi fac unele operații algoritmice comparând variabilele cu rezultatele din $wpdb->get_results.
În final, pun rezultatele în tabelul de pe pagină.
Acest lucru funcționează acum, dar când butonul de trimitere este apăsat, pagina se reîncarcă, datele introduse de utilizator dispar, dar tabelul se actualizează corect. Am dificultăți în a găsi informații despre cum să fac acest lucru. Când caut cum să opresc reîncărcarea paginii, tutorialele sunt toate despre trimiterea datelor către o bază de date și punerea codului într-un fișier diferit. Am nevoie ca tabelul să fie mereu pe pagină, doar plin cu 0-uri până când sunt introduse date. Apoi să păstrez valorile în formular și să actualizez tabelul la apăsarea butonului. Este posibil să fac acest lucru în același fișier sau înțeleg greșit o problemă fundamentală?
Dacă am înțeles corect
- ai nevoie ca formularul original să afișeze valorile care tocmai au fost trimise prin POST.
- De asemenea, ai nevoie ca tabelul să afișeze 0 pe valorile care nu au fost calculate încă.
- În acest moment, tabelul calculează informațiile perfect cu un submit care reîmprospătează pagina.
Poți folosi variabila if(isset($_POST["fieldname"])){
pe care o ai mai sus pentru a face acest lucru.
if(isset($_POST["fieldname"])){ echo $_POST["fieldname"]
ar afișa valoarea care a fost trimisă, adică textul dintr-un căsuță de text. În cazul tău este un checkbox, așa că folosești ceva de genul acesta:
<input type="checkbox" name="txtCheck" value="your value" <?php if(isset($_POST['txtCheck'])) echo "checked='checked'"; ?> />
Poți face același lucru și cu tabelul. Dacă vrei să fie 0 înainte de calcul (fără a vedea codul tău pentru tabel)
Ceva de genul acesta în celula ta:
if (empty($cellvalue)) echo '0'; //Dacă nu există date de afișat, arată 0
else echo $cellvalue;

Se reîmprospătează în continuare pagina, dar doar afișează valoarea înapoi în câmpul de text? Cele 3 puncte ale tale sunt corecte, ceea ce am acum este atât zero cât și calculul (tabelul se actualizează corect), problema este doar la reîmprospătare. Caut modalitatea de a evita reîmprospătarea, astfel încât elementele de pe pagină să nu se modifice. Poate trebuie să adaug o editare la întrebare, dar câmpul textbox fieldname folosește o funcție jQuery pentru a adăuga dinamic mai multe (toate valorile sunt stocate într-un array și apoi folosite cu foreach). Așadar, când are loc o reîmprospătare, câmpul original rămâne, dar cele adiționale sunt eliminate.

Ah, în regulă, deci vrei să spui că câmpurile jQuery adiționale sunt eliminate când pagina se reîmprospătează, dar datele sunt încă acolo? Dacă da, ai putea să te uiți la AJAX, care trimite date fără reîmprospătare, dar cu siguranță nu este domeniul meu de expertiză. Nu văd scriptul, dar din codul de mai sus, toate se numesc fieldname[1]
sau fieldname[2]
etc pe măsură ce sunt create?
