ελεγχος στην βάση...

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 15 Ιούλ 2013 12:10

Έχω φτιάξει μια φόρμα όπου με την χρήση ajax αυτά περνάνε στην βάση(έχω κάνει αναφορά σε αυτήν και σε άλλα posts).
Mέχρι τώρα(και για να αποφύγω να γράφω έξτρα κώδικα) αν ο χρήστης άλλαζε μόνο 1 από 3+ πεδία της φόρμας εγώ στην βάση ξαναέστελνα και τα άλλα 2-τα οποία δεν υπέστησαν αλλαγή.

Τώρα όμως εξετάζω το ενδεχόμενο να στέλνω μόνο αυτά που υπέστησαν αλλαγή.Kαι αυτό για να επιλέξω για ποιο θα στείλω e-mail verification στον χρήστης
Η ερώτηση είναι πως θα τσεκάρω αν τα πεδία σε μια φόρμα έχουν υποστεί αλλαγή ώστε τελικά να σταλθούν ή όχι στην βάση.

Εϊναι ερώτηση λογικής δηλαδή. Θα το τσέκαρα και client-side και server-side λέτε;
Να τα έστελνα με ajax όλα λέτε και να αναλάμβανε ένα php script να κάνει το τσεκάρισμα;

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

ελεγχος στην βάση...

Δημοσίευση από burnmind » 15 Ιούλ 2013 12:35

Κατά τη γνώμη μου, στο front-end θα συνεχίσεις απλά να κάνεις validation των πεδίων, δηλαδη αν είναι σωστό το format τους, αν έχουν συμπληρωθεί όλα τα απαιραίτητα πεδία, κλπ (εννοείται πως θα κάνεις το ίδιο και στο back-end).

Τα υπόλοιπα στο back-end. Η ερώτηση όμως είναι αν θέλεις να στείλεις information email (πχ "σε ενημερώνω πως άλλαξες επιτυχώς τη διεύθυνσή σου"), ή verification email (πχ "κάποιος άλλαξε τη διεύθυνσή σου, αν ήσουν εσύ κάνε click εδώ για επαλήθευση").

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

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 15 Ιούλ 2013 12:44

burnmind έγραψε:Κατά τη γνώμη μου, στο front-end θα συνεχίσεις απλά να κάνεις validation των πεδίων, δηλαδη αν είναι σωστό το format τους, αν έχουν συμπληρωθεί όλα τα απαιραίτητα πεδία, κλπ (εννοείται πως θα κάνεις το ίδιο και στο back-end).

Τα υπόλοιπα στο back-end. Η ερώτηση όμως είναι αν θέλεις να στείλεις information email (πχ "σε ενημερώνω πως άλλαξες επιτυχώς τη διεύθυνσή σου"), ή verification email (πχ "κάποιος άλλαξε τη διεύθυνσή σου, αν ήσουν εσύ κάνε click εδώ για επαλήθευση").
Θα στέλνω info e-mail στην περίπτωση αλλαγής του τηλεφώνου και verification e-mail στην περίπτωση αλλαγής του e-mail
burnmind έγραψε: Αν θες να κάνεις το 2ο, θα πρέπει να κρατάς κάπου τις νέες αλλαγές μέχρι να επαληθευτούν, καθώς και να επιλέξεις τι θα κάνεις στην περίπτωση που ο χρήστης προχωρήσει και σε άλλες αλλαγές πριν επαληθεύσει τις πρώτες και προσπαθήσει να τις επαληθεύσει αργότερα, κλπ.
Θα ξαναεπανέλθω σε αυτά που θίγεις καθώς είναι σημαντικά αλλά προς το παρόν θέλω να επικεντρωθώ στους ελέγχους.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

ελεγχος στην βάση...

Δημοσίευση από alou » 15 Ιούλ 2013 13:07

Σε ένα change event των input πρόσθεσε ένα class ή ένα data atrribute και κάνε post με αυτό το κριτήριο.

Ή, πιο σωστό μάλλον, πέρνα από την php ένα data attribute στο input με την αρχική τιμή και με ένα conditional στην js κάνεις ajax post ότι έχει αλλάξει.

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 15 Ιούλ 2013 13:54

alou έγραψε:Σε ένα change event των input πρόσθεσε ένα class ή ένα data atrribute και κάνε post με αυτό το κριτήριο.

Ή, πιο σωστό μάλλον, πέρνα από την php ένα data attribute στο input με την αρχική τιμή και με ένα conditional στην js κάνεις ajax post ότι έχει αλλάξει.
Δεν έχω ξαναχρησιμοποιήσει data attribute. Nα υποθέσω ότι θα βάλω στο input element κάτι τέτοιο(π.χ για το email ) data-email="value που παίρνω με PHP" και μετά συγκρίνω αυτό με αυτό που πάει να υποβάλλει ο χρήστης για να δω αν διαφέρουν.

Αυτό εννοείς;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

ελεγχος στην βάση...

Δημοσίευση από alou » 15 Ιούλ 2013 14:32

Ακριβώς, αλλά καλύτερα βάλε ένα όνομα που να είναι κοινό για όλα τα πεδία, ώστε να το τσεκάρεις με ένα function στο conditional. πχ

Κώδικας: Επιλογή όλων

<input name="email" value="<?php echo $item->email; ?>" data-currentval="<?php echo $item->email; ?>">
Μετά, φαντάζομαι, θα κάνεις ένα check το object.val() με το object.data('currentval') - γι'αυτό βολεύει να έχει πάντα το ίδιο όνομα το data attr - και με conditional θα προσθέτεις το πεδίο ή όχι στο data object που θα στείλεις με ajax.

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 15 Ιούλ 2013 15:56

alou έγραψε:Ακριβώς, αλλά καλύτερα βάλε ένα όνομα που να είναι κοινό για όλα τα πεδία, ώστε να το τσεκάρεις με ένα function στο conditional. πχ

Κώδικας: Επιλογή όλων

<input name="email" value="<?php echo $item->email; ?>" data-currentval="<?php echo $item->email; ?>">
Μετά, φαντάζομαι, θα κάνεις ένα check το object.val() με το object.data('currentval') - γι'αυτό βολεύει να έχει πάντα το ίδιο όνομα το data attr - και με conditional θα προσθέτεις το πεδίο ή όχι στο data object που θα στείλεις με ajax.
Εκεί που κολλάω είναι πως θα κάνω την σύγκριση από την στιγμή που που το όνομα του data θα είναι κοινό σε όλα τα πεδία.Πως θα "στοχεύω" ένα συγκεκριμένο input αν υπάρχει το ίδιο όνομα;
Ένα παράδειγμα θα βοηθούσε.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

ελεγχος στην βάση...

Δημοσίευση από alou » 15 Ιούλ 2013 16:39

Εξαρτάται από τη διαδικασία σου μέχρι εκείνη τη στιγμή. Βασικά δεν στοχεύεις κάτι, απλά τα τσεκάρεις όλα και αν έχουν αλλάξει τα κάνεις post, ή τουλάχιστον αυτό κατάλαβα ότι θες να κάνεις.

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

Κώδικας: Επιλογή όλων

$&#40;'form#someForm'&#41;.on&#40;'submit', function&#40;event&#41; &#123;
		event.preventDefault&#40;&#41;;
		ajaxPostData = '&#123;';
		var checkFirst = 0;
		$&#40;'input&#91;type="text"&#93;', this&#41;.each&#40;function&#40;&#41; &#123;
			var currentValue = $&#40;this&#41;.val&#40;&#41;;
			var originalValue = $&#40;this&#41;.attr&#40;'data-originalValue'&#41;;
			if &#40;currentValue != originalValue&#41; &#123;
				if &#40;checkFirst === 0&#41; &#123; checkFirst = 1; &#125;
				else &#123;ajaxPostData += ', '&#125;
				ajaxPostData += '"' + $&#40;this&#41;.attr&#40;'name'&#41; + '"&#58; "' + $&#40;this&#41;.val&#40;&#41; + '"';
			&#125;
		&#125;&#41;
		ajaxPostData += ' &#125;';
		//... go on with ajax post με data = parseJSON&#40;ajaxPostData&#41;;
	&#125;&#41;

Με αυτό τον τρόπο βέβαια τσεκάρεις τα input type=text (το έκανα έτσι για να μην πιάνει και το submit), για οτιδήποτε άλλο θα πρέπει να αναπροσαρμόσεις ανάλογα. Έχοντας στο μυαλό σου πως έχεις φτάσει μέχρι εκεί και το παραπάνω παράδειγμα πολύ πιθανό να προκύψει και ένας καλύτερος τρόπος βέβαια.

edit: δοκίμασε και αυτό, μάλλον θα είναι πιο βολικό. Προσθέτεις κάποιο class με το conditional και κάνεις serialize ότι έχει αυτό το class:

Κώδικας: Επιλογή όλων

$&#40;'form#someForm'&#41;.on&#40;'submit', function&#40;event&#41; &#123;
		event.preventDefault&#40;&#41;;
		$&#40;'input&#91;type="text"&#93;', this&#41;.each&#40;function&#40;&#41; &#123;
			var currentValue = $&#40;this&#41;.val&#40;&#41;;
			var originalValue = $&#40;this&#41;.attr&#40;'data-originalValue'&#41;;
			if &#40;currentValue != originalValue&#41; &#123;
				$&#40;this&#41;.addClass&#40;'ajaxinclude'&#41;; 
			&#125;
		&#125;&#41;
		var formdata = $&#40;'#someForm .ajaxinclude'&#41;.serialize&#40;&#41;; 
		$.ajax&#40;&#123;
        	url&#58;'url/to/go',
        	type&#58;'POST',
        	data&#58; formdata,
        &#125;&#41; 
	&#125;&#41;


Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 15 Ιούλ 2013 20:26

θα δοκιμάσω τον κώδικα(ή κάποια παραλλαγή) αλλά έκανα μια σκέψη με αφορμή και αυτά που είπε ο burnmind.

Στο backend όμως έχω μια function που κάνει απλώς update τα δεδομένα που έρχονται με ajax από το client. Αναγκαστικά θα τον αλλάξω τον κώδικα στο backend μετά και απο τις προτεινόμενες αλλαγές στον client.

Oπότε σκέφτομαι μήπως είναι καλύτερα ο έλεγχος να γίνεται μόνο στο backend ώστε να ελαχιστοποιήσω τις αλλαγές κώδικα-που θα πρέπει να κάνω και στο client στην αντίθετη περίπτωση.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

ελεγχος στην βάση...

Δημοσίευση από alou » 15 Ιούλ 2013 21:53

Αν το ζητούμενο σου είναι να ελαχιστοποιήσεις τις αλλαγές, το σκέφτεσαι έτσι. Δεν είμαι σίγουρος όμως για ποιον έλεγχο μιλάς, για validation ή για αλλαγές πεδίων?

Είναι στη μέση και αυτό που (πολύ σωστά) είπε ο burnmind για πιο critical fields όπως για παράδειγμα το email και προσωρινές τιμές οπότε δεν έχω καταλάβει που αναφέρεσαι.

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 15 Ιούλ 2013 23:39

alou έγραψε:Αν το ζητούμενο σου είναι να ελαχιστοποιήσεις τις αλλαγές, το σκέφτεσαι έτσι. Δεν είμαι σίγουρος όμως για ποιον έλεγχο μιλάς, για validation ή για αλλαγές πεδίων?

Είναι στη μέση και αυτό που (πολύ σωστά) είπε ο burnmind για πιο critical fields όπως για παράδειγμα το email και προσωρινές τιμές οπότε δεν έχω καταλάβει που αναφέρεσαι.
Δεν αναφέρομαι σε validation με τίποτα. Αναφέρομαι στο αν ο χρήστης κάνει ή όχι change/update όλα ή οχι τα δεδομένα της φόρμας.

Αν ας πούμε η φόρμα έχει 3 πεδία, έκανε άλλαγες σε όλα ή μόνο στο 1 ή μονο στα 2;
Αφού όλα τα values από όλα τα πεδία(ακόμα και αυτών που δεν έχουν αλλαχτεί) πάνε με ajax στον server πρέπει να γίνεται έλεγχος αν τα values είναι τα ίδια με πριν ή έχουν αλλαχτεί(απο τον χρήστη).

Το κατάλαβες τώρα;

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

ελεγχος στην βάση...

Δημοσίευση από gvre » 16 Ιούλ 2013 10:14

burnmind έγραψε:Κατά τη γνώμη μου, στο front-end θα συνεχίσεις απλά να κάνεις validation των πεδίων, δηλαδη αν είναι σωστό το format τους, αν έχουν συμπληρωθεί όλα τα απαιραίτητα πεδία, κλπ (εννοείται πως θα κάνεις το ίδιο και στο back-end).

Τα υπόλοιπα στο back-end. Η ερώτηση όμως είναι αν θέλεις να στείλεις information email (πχ "σε ενημερώνω πως άλλαξες επιτυχώς τη διεύθυνσή σου"), ή verification email (πχ "κάποιος άλλαξε τη διεύθυνσή σου, αν ήσουν εσύ κάνε click εδώ για επαλήθευση").

Αν θες να κάνεις το 2ο, θα πρέπει να κρατάς κάπου τις νέες αλλαγές μέχρι να επαληθευτούν, καθώς και να επιλέξεις τι θα κάνεις στην περίπτωση που ο χρήστης προχωρήσει και σε άλλες αλλαγές πριν επαληθεύσει τις πρώτες και προσπαθήσει να τις επαληθεύσει αργότερα, κλπ.
+1

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 20 Ιούλ 2013 08:32

burnmind έγραψε:
Αν θες να κάνεις το 2ο, θα πρέπει να κρατάς κάπου τις νέες αλλαγές μέχρι να επαληθευτούν,
Φαντάζομαι όταν λες να επαληθευτούν να κάνει ο χρήστης κλικ σε κανένα σύνδεσμο στο verification mail που θα στείλω-αυτό εννοείς?
burnmind έγραψε: καθώς και να επιλέξεις τι θα κάνεις στην περίπτωση που ο χρήστης προχωρήσει και σε άλλες αλλαγές πριν επαληθεύσει τις πρώτες και προσπαθήσει να τις επαληθεύσει αργότερα, κλπ.
Eδώ μπερδεύτηκα λίγο...

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

ελεγχος στην βάση...

Δημοσίευση από burnmind » 20 Ιούλ 2013 12:18

Για το πρώτο quote, ναι, αν θες να κάνει ο χρήστης verify κάτι, θα πρέπει να κάνει κάποια ενέργεια (πχ click σε έναν σύνδεσμο σε κάποιο email που του έστειλες).

Το 2ο λίγο είναι λίγο πιο πολύπλοκο θέμα:

Ας θεωρήσουμε πως υπάρχουν 3 πεδία που μας ενδιαφέρουν. Πες ότι ο χρήστης αλλάζει το 1ο και το 2ο ταυτόχρονα, και ΠΡΙΝ κάνει verification γι' αυτά, πάει αργότερα και αλλάζει το 2ο και το 3ο ταυτόχρονα. Τι θα γίνει με το 2ο πεδίο αν πάει και κάνει πρώτα verify τη 2η ομάδα αλλαγών, και μετά θυμηθεί και κάνει και την 1η;

Πρέπει να αποφασίσεις αν τα πεδία θα είναι συνδεμένα με κάποιον verification code ως ομάδα ή μεμονωμένα, πόσο θα διαρκούν αυτοί οι κωδικοί, ποια αλλαγή θα υπερισχύει, κλπ. Εφόσον αποφασίσεις να υλοποιήσεις κάτι τέτοιο, σκέψου διάφορα σενάρια και προσπάθησε να βρεις μια λύση που θα τα καλύπτει όλα.

Serghio
Δημοσιεύσεις: 455
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

ελεγχος στην βάση...

Δημοσίευση από Serghio » 22 Ιούλ 2013 23:13

burnmind έγραψε:
Το 2ο λίγο είναι λίγο πιο πολύπλοκο θέμα:

Ας θεωρήσουμε πως υπάρχουν 3 πεδία που μας ενδιαφέρουν. Πες ότι ο χρήστης αλλάζει το 1ο και το 2ο ταυτόχρονα, και ΠΡΙΝ κάνει verification γι' αυτά, πάει αργότερα και αλλάζει το 2ο και το 3ο ταυτόχρονα. Τι θα γίνει με το 2ο πεδίο αν πάει και κάνει πρώτα verify τη 2η ομάδα αλλαγών, και μετά θυμηθεί και κάνει και την 1η;

Πρέπει να αποφασίσεις αν τα πεδία θα είναι συνδεμένα με κάποιον verification code ως ομάδα ή μεμονωμένα, πόσο θα διαρκούν αυτοί οι κωδικοί, ποια αλλαγή θα υπερισχύει, κλπ. Εφόσον αποφασίσεις να υλοποιήσεις κάτι τέτοιο, σκέψου διάφορα σενάρια και προσπάθησε να βρεις μια λύση που θα τα καλύπτει όλα.
Ωραία και "παίζει" το παραπάνω σενάριο που αναφέρεις.
Αν υπάρχουν και άλλα όμως και δεν μας περνάνε από το μυαλό την δεδομένη στιγμής;

Θέλω να πω δηλαδή μήπως είναι καλύτερο να φτιάξω την φόρμα όπως όπως και στην πορεία(τι περίπτωσεις δηλαδή προκύπτουν από την χρήση που κάνουν οι) κάνουν τις απαραίτητες διωρθώσεις.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες