Σε αυτό τον οδηγό θα βασιστούμε στην φόρμα εγγραφής που δημιουργήσαμε στο προηγούμενο άρθρο μας: Φορμα εγγραφής με Ajax και θα την τροποποιήσουμε, ώστε να την ενώσουμε με μια βάση δεδομένων, όπως είναι η MySQL. Ο κύριος στόχος είναι να δείξουμε μια λογική που μπορεί να χρησιμοποιήσει ο εκάστοτε προγραμματιστής και αλλάζοντας μόνο τον κώδικα, να την φέρει στα μέτρα του. Ολόκληρο τον κώδικα μπορείτε να τον δείτε εδώ, ενώ ένα ενδεικτικό demo να το δείτε εδώ.
Ο κώδικας μας παραμένει ο ίδιος, εκτός από δύο σημεία. Το πρώτο είναι να διαγραφεί η συνάρτηση submitform(), και στο κουμπί submit, να προσθέσουμε την διαδικασία που θα αναλάβει την επεξεργασία των μηνυμάτων του αρχείου, που θα επιστρέφει ο MySQL Server. Πιο συγκεκριμένα γράφουμε:
text: 'Submit',
type: 'submit',
handler: function(){
if(isFormValid()){
form.getForm().submit({
success: function(action){
Ext.MessageBox.alert('Success','A new user has been registered');
},
failure:function(form, action){
obj = Ext.util.JSON.decode(action.response.responseText);
Ext.Msg.alert('Error', obj.message );
}
})
}
}
});
Και το δεύτερο σημείο, είναι στην δημιουργία της φόρμας μας. Εκεί προσθέτουμε:
url: 'form.php'
Οπότε με την προσθήκη, ο νέος κώδικας δημιουργίας της φόρμας προσαρμόζεται ως εξής:
labelWidth: 75,
frame: true,
method: 'POST',
url: 'form.php',
title: 'Register Form',
bodyStyle:'padding:5px 5px 0',
width: 350,
defaults: {width: 230},
defaultType: 'textfield',
items: [username,password,name,surname,email,phone],
buttons: [ submit,reset]
});
Πάμε τώρα να δημιουργήσουμε μια ενδεικτική βάση και έπειτα το αρχείο form.php, στο οποίο θα εισάγουμε ένα νέο χρήστη και σε περίπτωση που δεν τηρούνται όλες οι προϋποθέσεις θα μας εμφανίζει αντίστοιχο σφάλμα.
Η βάση, όπως είπαμε είναι σε MySQL και χρησιμοποιήσαμε τον ακόλουθο κώδικα:
CREATE TABLE `extjs`.`users` (
`uid` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 20 ) NOT NULL ,
`password` VARCHAR( 20 ) NOT NULL ,
`name` VARCHAR( 20 ) NOT NULL ,
`surname` VARCHAR( 20 ) NOT NULL ,
`phone` INT NOT NULL ,
`email` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `uid` ) ,
UNIQUE ( `username` ,`email`)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci
Με το παραπάνω query δημιουργήσαμε μια βάση με το όνομα extjs, και έναν πίνακα της βάσης με το όνομα users. Ο πίνακας έχει όσα πεδία έχει και η φόρμα εγγραφής μας, συν ακόμα ένα που δείχνει το τρέχον ID του χρήστη. Προσέξαμε να ορίσουμε το μήκος των πεδίων του πίνακα να είναι ίσο με το μήκος των αντίστοιχων πεδίων της φόρμας, (δηλαδή εάν έχουμε 20 χαρακτήρες μέγιστο στο username, να έχουμε και 20 μέγιστο στην αντίστοιχη στήλη του πίνακά μας). Τέλος δηλώσαμε ότι το email και το username θα είναι μοναδικά (unique) κλειδιά του πίνακά μας, ώστε να μην έχουμε διπλοεγγραφές. Άρα εάν κάποιος πάει να βάλει ίδιο username ή email με κάποιο που υπάρχει ήδη στην βάση, η εισαγωγή δεν γίνεται και εμφανίζεται αντίστοιχο μήνυμα.
Πάμε τώρα να φτιάξουμε το αρχείο που θα διαβάζει τα στοιχεία που συμπλήρωσε ο χρήστης στην φόρμα και θα τα εισάγει στην βάση.Ξεκινάμε με την δήλωση των στοιχείων σύνδεσης της βάσης μας:
$server = "servername";
$usename = "user";
$password = "pass";
$database = "db";
?>
Στην συνέχεια θα ανοίξουμε την σύνδεση με την βάση μας χρησιμοποιώντας την mysql_connect(), και σε περίπτωση αποτυχίας θα εμφανίσουμε ανάλογο μήνυμα:
$link = mysql_connect($server, $username, $password);
if (!$link){
$return = '{"success":false,"message":"'.mysql_errno($link).":".mysql_error($link).'"}';
}
?>
Εδώ να σημειώσουμε ότι, για να διαβαστεί κάποιο response από το ΕxtJS Framework, θα πρέπει να είναι σε συγκεκριμένη μορφή. Να είναι κάτι της μορφής:
{"success":false} //αποτυχία
Οπότε ανάλογα την boolean τιμή του success, θα τρέξει είτε το success είτε το failure στον κώδικα που δημιουργήσαμε παραπάνω. Εμείς όμως επειδή θέλουμε να μας εμφανιστεί και το αντίστοιχο μήνυμα που συνοδεύει την εκάστοτε ενέργεια, συμπληρώνουμε:
Υποθέτουμε ότι η σύνδεση έγινε επιτυχώς, περνάμε στο να επιλέξουμε την βάση που δημιουργήσαμε παραπάνω (πάλι σε περίπτωση αποτυχίας, εμφανίζουμε ανάλογο μήνυμα):
else {
$db = mysql_select_db($database);
if (!$db){
$return = '{"success":false,"message":"'.mysql_errno($link).":".mysql_error($link).'"}';
}
?>
Υποθέτουμε ότι μέχρι εδώ, έχουμε συνδεθεί με τον MySQL Server και με την βάση μας, οπότε συνεχίζουμε εισάγοντας τα στοιχεία που συμπλήρωσε ο χρήστης στην φόρμα μας. Έχουμε λοιπόν:
else {
$query = mysql_query('INSERT INTO users VALUES (NULL,"'.$_POST['username'].'","'.$_POST['pass'].'","'.$_POST['name'].'","'.$_POST['surname'].'","'.$_POST['phone'].'","'.$_POST['email'].'")');
if(!$query){
$return = '{"success":false,"message":"'.mysql_errno($link).":".mysql_error($link).'"}';
}
else {
$return = "{success:true}";
}
}
}
echo json_encode($return);
mysql_close($link);
?>
Ολοκληρώνοντας, καταφέραμε να φτιάξουμε μια φόρμα η οποία ελέγχει τα στοιχεία που εισάγει ο χρήστης. Σε περίπτωση που τα στοιχεία είναι σωστά, στέλνεται ένα αίτημα στον MySQL Server με τα στοιχεία αυτά και εισάγονται στην βάση. Με το τέλος της εισαγωγής, επιστρέφουμε κατάλληλο μήνυμα.
Ο κώδικας εννοείται πώς μπορεί να βελτιωθεί, για παράδειγμα να γραφτεί σε OOP (αντικειμενοστραφή προγραμματισμό), να ελεγχθεί για SQL injections, να κρυπτογραφηθεί το password ή ακόμα και ναι ορίσει ο χρήστης δικά του μηνύματα διαφορετικά από αυτά που επιστρέφει ο MySQL Server. Αυτές όλες, όμως, οι τεχνικές ξεφεύγουν από τα πλαίσια αυτού του οδηγού και σύντομα θα δούμε κάποιες σε επόμενα άρθρα μας.
Comments
ExtJS rules
It pays to be good at it!
wraio 8ema
Πολυ ωραια παρουσιαση με το extJs που ειναι πολυ ωραια javascript βιβλιοθηκη για UI. Επισης χρηστικη ειναι και η συνδεση της φορμας με βαση δεδομενων. ΜΠΡΑΒΟ!!
Προσφατα ειδα οτι το site για την βελτίωσης δηλώσεων Ε9 του Υπουργείου Οικονομίας και Οικονομικών, χρησιμοποιει αυτην την βιβλιοθηκη και εχει κανει το site πολυ απλο χρηστικο και σταθερο.
Περιμενουμε και αλλο παρομοιο θεμα με extJs
Post new comment