[Form e invio dei dati] Come evitare ridigitazione dei dati in form prolisso.

Buonasera a tutti,

ho una pagina php che agisce su se stessa con un form che contiene diversi campi. Vi mostro prima il codice:

<?php
session_start();
?>

<html>
<body>

<form action="" method="post"> <!-- nessuna action per il form -->

<!--

  in questo spazio ci sono diverse input per inserimento di Nome, Cognome, Telefono, ecc...

-->

</form>

<?php

// Inizia lo script per il recupero e il controllo dei dati

if(isset($_POST['pulsante_conferma'])) {

$email = $_POST['email']; // Recupero il dato passato
// E recupero il resto dei dati..


$modale_di_errore = "<script type="text/javascript"> ..io sono una modale che contengo come messaggio il tipo di errore commesso...ed appaio e scompaio tramite effetto 'fade'</script>";


// Adesso inizio i controlli..

  if ($email == "") {

     echo $modale_di_errore; // Hai lasciato lo spazio vuoto..
  
  } elseif ($email != "diversa da espressione regolare") {

    echo $modale_di_errore; // Inserisci un indirizzo email valido..

  } // seguono il resto dei controlli..
}
?>

</body>
</html>

Come potete vedere tutto viene svolto sulla stessa pagina. Il problema che vorrei risolvere è: rivisualizzare i dati (errati) che l'utente ha digitato in caso di errore....questo per evitare appunto di far reinserire all'utente stesso tutti i dati nel form. Come posso fare?

Grazie mille.

inviato 5 anni fa
wartpro
X 0 X

La parte del codice HTML dovrebbe andare alla fine dello script.

Nella prima parte devi inizializzare delle variabili $nome, $cognome, ecc. con delle stringhe vuote ($nome = '').

Poi se è stato inviato il form (if($_POST)), assegni a queste variabili il valore inserito ($nome = $_POST['nome']).

Infine nella sezione HTML utilizzi queste variabili per avvalorare i dati del form:

<input type="text" name="nome" value="<?=htmlentities($nome)?>" />

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Gianni ti ringrazio tantissimo. Ora faccio come mi hai detto e riferisco. :)

risposto 5 anni fa
wartpro
X 0 X

Ho provato come mi hai suggerito: non funziona.

Ho fatto come dici tu:

1) Variabili vuote all'inizio: $nome = "";

2) if($_POST['conferma'])

3) Valorizzare le variabili: $nome = $_POST['nome'];

4) Mettere quel breve pezzo di Php nelle value delle mie input.

...e succede questo:

1) Apro la pagina php in questione con il form...e nell'input/text trovo la scritta modificabile: "<?php=htmlentitles($nome)?>"

2) Invece la textarea non visualizza tutto ciò.

..e 3), se digito qualche dato, mi da anche un Fatal error perchè ho un cotrollo Recaptcha (di Google) da inserire.

...in sostanza niente.  ???

Grazie.

risposto 5 anni fa
wartpro
X 0 X

Hai inserito <?php=htmlentitles o <?=htmlentitles ?

Se hai messo la seconda versione allora verifica che nel php.ini siano abilitati i tag brevi

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Ho messo la prima versione Gianni...

risposto 5 anni fa
wartpro
X 0 X

allora devi mettere <?php echo htmlentitles

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Peggio che peggio. Ti ringrazio cmq.

risposto 5 anni fa
wartpro
X 0 X

riporta lo script

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Questa è la pagina allo stato attuale. Grazie per la disponibilità e la pazienza Gianni!

<?php
session_start();

$nome = ""; // ..come mi hai consigliato tu, prima inserisco la variabile vuota.
$cognome = "";
// altre variabili che conterranno altri dati..

if (isset($_POST['invia_dati'])) { // Quando clicco sul pulsante invia..

  $nome = $_POST['nome']; // ..raccolgo i dati passati nel form..
  $cognome = $_POST['cognome'];
  // Idem come sopra, altre variabili che conterranno altri dati

  //-------------------------------------------------------------------------- | Metto questo divisore per scandire il codice

  $modale = "<script type=\"text/javascript\"> ..io sono una modale in jqueri che appaio e scompaio in caso di errore riscontrato nel form.. </script>";

  // -------------------------------------------------------------------------- |

  // Iniziano i controlli..citerò solo un caso per abbreviare e semplificare il tutto..

  if (!preg_match('/^[a-zA-Z]+$/i', $nome)) { // Se il nome non rispetta l'espressione regolare..o se anche un altra input/text non supera i controlli..

  echo $modale; // ..allora apparirà la modale in jQuery con il messaggio "Errore nel form"..
  // ...e qui...in caso di errore...dovrei far riapparire le input/text digitate precedentemente per evitare che si ricompili tutto il form..

  } else { // ..se invece tutti i dati vengono digitati correttamente..

       // ..svolgi il resto delle operazioni da fare..

  }
}
?>
<html> <!-- Come mi è stato suggerito: prima il codice PHP con le variabili vuote e poi, in caso di invio, riempite..poi il resto della pagina in HTML.. -->
<body>

  <form action="" method="post" enctype="multipart/form-data">

     <input type="text" name="nome" value="<?php echo htmlentitles($nome)?>" /> <!-- ..oppure le altre soluzioni nella value seguente proposte in questo thread.. -->

        <input type="submit" name="invia_dati" value="Invia dati" />

  </form>

</body>
</html>

<?php
session_destroy();
?>

Come vedete ho fatto un riassunto. Questo è lo script: prima variabili vuote, poi il tasto che invia, poi la raccolta dei dati, poi i controlli e....se l'utente sbaglia....dovrei evitare di svuotare le input precedentemente riempite. Quindi effettuare i controlli, segnalare l'errore con la modale e far permanere stampati a video i dati digitati precedentemente.

Grazie per la pazienza e la disponibilità.

risposto 5 anni fa
wartpro
X 0 X

c'è un errore: htmlentitles deve essere htmlentities

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni! Ora lo script funziona..e cioè che se sbaglio a scrivere qualche dato la pagina si ricarica e riappare il testo sbagliato nella relativa input.

..ma c'è un'altro problema. Dopo l'invio dei dati (errati)...non mi si visualizza la modale jQuery che dovrebbe essere generata da PHP, così:

<?php

if ($nome == "") {

   echo $modale_jquery; // Che visualizzerà una roba del tipo: Campo obbligatorio..
}
?>

Grazie infinite.

risposto 5 anni fa
wartpro
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda