Προς το περιεχόμενο

Multi step php form


varemarious

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα θέλω να φτιάξω μία φόρμα η οποία να συμπεριλαμβάνει βήματα..

 

επόμενο -> επόμενο -> επόμενο ->υποβολή

 

σκέφτηκα να το κάνω σε κομμάτια δηλ. να φτιάξω 3 σελίδες διαφορετικές *.php και στο action της φόρμας να δώσω link την επόμενη σελίδα οπότε με το submit να με μεταφέρει...

 

μετά όμως πως θα μπορέσω να τραβάω τα στοιχεία στο sendmail.php για να μου έρθει στο τέλος ένα mail με όλα τα στοιχεία που έχουν καταχωρηθεί..(σκέφτηκα ότι μπορεί να τα τραβάω από φόρμα σε φόρμα με hidden)

 

είναι σωστός αυτός ο τρόπος ;

 

υπάρχει κάποιος καλύτερος ; (σίγουρα ναι)

 

επίσης πως θα λύσω το θέμα ότι αν κάποιος κάνει λάθος σε ένα πεδίο και πατήσει πίσω να πάει στο προηγούμενο βήμα να μην χάνονται οι καταχωρήσεις..

 

αυτά τα ολίγα ..

 

ευχαριστώ προκαταβολικά.

Δημοσ.

Μπορείς να βάλεις τα δεδομένα από κάθε φόρμα σου σε έναν πίνακα και να κάνεις post κάθε φορά αυτόν τον πίνακα(σε hidden πεδίο).

 

Μπορείς να χρησιμοποιήσεις και δισδιάστατο και θα είναι της μορφής

>
array[first_form][name] = "Γιώργος"
array[second_form][name] = "Πέτρος"

Δημοσ.

μπορείς να το κάνεις σε μία σελίδα, χρησιμοποιώντας μια κρυφή μεταβλητή στη φόρμα σου, που θα κρατάει σε ποια "σελίδα" της φόρμας είσαι.

Στον κώδικα που θα έχεις να εμφανίζει τη φόρμα θα βάλεις ενα if (ή case οτι σε βολεύει) που θα ελέγχει σε ποια "σελίδα" είσαι οπότε θα εμφανίζεις ανάλογα και το κομμάτι της φόρμας που θέλεις.

Δημοσ.

Όπως το σκέφτομαι με το φτωχό μου μυαλό βλέπω μερικές επιλογές...

η μία είναι ότι όπως θα πηγαίνεις από φόρμα σε φόρμα, θα έχεις

>
foreach($_POST as $key => $value)
   echo "<input type=\"hidden\" name=\"$key\" value=\"$value\" />";

και εδώ τίθεται το ερώτημα για πίσω, εκεί θα μπορείς να κάνεις κάτι αντίστοιχο, και απλά να ελέγχει αν έχει γίνει ήδη $_POST το input που έχεις

κάπως έτσι:

>
<form name="form1" method="post" action="next.php">
<?php
if(!isset($_POST['username'])){
?><input type="text" name="username" />
<?php } 
else { 
?><input type="text" name="username" value="<?php echo $_POST['username']; ?>" /> /* Αν θέλεις το κάνεις και disabled */
<?php } ?>
<input type="submit" value="next" /></form>

 

Επειδή ίσως αυτό γίνει κουραστικό, μπορείς να κάνεις μια συνάρτηση για συντομία...

>
function field($name, $type = "text", $disabled = false){
   if(!isset($_POST[$name])){
   ?><input type="text" name="<?php echo $name; ?>" />
   <?php }
    else { 
   ?><input type="text" name="<?php echo $name; ?>" value="<?php echo $_POST[$name]; ?>" <?php if($disabled) echo "DISABLED"; ?>/> 
    <?php } 
}

 

Και θα την καλείς:

>
field("username");
field("password", "password");
field("recommended", "text", true);

 

Η άλλη ιδέα μου είναι κατά τη διαδικασία να τα γράφεις όλα σε μεταβλητές $_SESSION, ώστε να έχεις πιο εύκολη τη μετάβαση από τη μια φόρμα στην άλλη, θα μπορούσες να έχεις ένα αναγνωριστικό για κάθε φόρμα, να υπάρχει ένα αρχείο που θα καταγράφει της μεταβλητές στη συνεδρία, και να τον επιστρέφει στην επόμενη φόρμα και πάλι θα ελέγχεις αν έχει οριστεί η μεταβλητή και αν έχει κάποιο λάθος απλά θα διαγράφεις αυτή τη μεταβλητή.

Πιστεύω να βοήθησα σε αυτό που θες να κάνεις...

Δημοσ.

Εγω αποθηκευω στο SESSION.

Πιστευω πως ειναι καλος τροπος διοτι δεν εχεις να ξερνας τα δεδομένα καθε φορα στη φορμα.. ως Hidden

Θα μπορουσες να τα κανεις serialize βεβαια αλλα δεν ξερω αν ειναι καλη πρακτικη

κατι που θα ηταν προβλημα αν ειναι παρα πολλα..

Επισης σκεψου και το πατερναλιστή http://en.wikipedia.org/wiki/Post/Redirect/Get

Δηλαδη κανεις post γραφεις τα data και κανεις redirect.. ετσι οταν πας να κανεις refresh δεν υπαρχει θεμα με τη βαση...

Τελος χρειαζεται καμια ασφαλεια τυπου token για να μην γινουν διπλο εγγραφες στη βαση

Δημοσ.

Εγώ σε ένα ερωτηματολόγιο που το έκανα αυτό χρησιμοποίησα Sessions. Επίσης είχα session και στη σελιδοποίηση γιατί δεν ήθελα να κάνουν skip κάποια σελίδα αλλάζοντας αριθμό σελίδας στο url

Δημοσ.

Επίσης είχα session και στη σελιδοποίηση γιατί δεν ήθελα να κάνουν skip κάποια σελίδα αλλάζοντας αριθμό σελίδας στο url

Θα μπορούσες πολύ πιο απλά να χρησιμοποιήσεις την post αντί της get

Δημοσ.

Το έβαζα σε session γιατί εκτός του ότι είχα back button (μπορούσες να πας πίσω αλλά αν δεν είχε πλήρη τη φόρμα τη φόρμα της σελίδας δε μπορούσες να πας μπροστά), το ερωτηματολόγιο δεν ήταν standard μεγέθους, αλλά οι σελίδες άλλαζαν δυναμικά.

Πάντως δε σκέφτηκα καθόλου αν θα μπορούσα να το κάνω αυτό με post :rolleyes:

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...