Φωτογραφία Δημήτρης Ντούσκας
Δημιουργία Βάσης
από Δημήτρης Ντούσκας - Sunday, 22 July 2012, 9:56 AM
 
Βασίλη καλημερα. Προσπαθώ να φτιάξω την βάση για την τελική εργασία. Παρατήρησα ότι με το CreateUserWizardcontrol αποθηκεύονται στην βάση κάπως κρυπτογραφημένα. Ασπούμε το id δεν είναι ακέραιος αλλά είναι αλφαριθμητικός! Για να συνδέσω τους users με τα δικά μου tables τι προτείνεις να κάνω; Σκέφτηκα να χρησιμοποιήσω το username και όχι το userid γιατί το κρατάει αυτούσιο το username. Επίσης τα tables που θα φτιάξω να τα βάλω μέσα σε αυτήν την βάση(ASPNETDB);
 
Φωτογραφία ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ
Απάντηση: Δημιουργία Βάσης
από ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ - Monday, 23 July 2012, 4:14 PM
 
Καλησπέρα κι απο μένα Βασίλη! Ξεκίνησα να φτιάχνω κι εγώ την βάση και θα ήθελα να μου πεις δύο πράγματα! Πρώτον πως θα φτιάξω αυτο με τα εικονιδια και δεύτερον ξεκίνησα μια βάση από την αρχή!Δηλαδή φτιάχνω ένα πίνακα forum,threads κλπ! Είναι σωστό αυτό που έχω καταλάβει ή όχι? Ευχαριστώ
Φωτογραφία Βασίλης Κόλιας
Απάντηση: Δημιουργία Βάσης
από Βασίλης Κόλιας - Tuesday, 24 July 2012, 5:59 AM
 
Αν πας με τα security controls φτιάξε πρώτα ένα createuserwizard και δημιούγησε ένα χρήστη για να φτιαχτεί η βάση.

Έπειτα μέσα στη βάση φτιάξε κανονικά τους υπόλοιπους πίνακες που αφορούν το φόρουμ.

Κάποιοι πίνακες ίσως χρειαστεί να συνδεθούν με τους υπάρχοντες (από αυτούς των security controls).

Εικονίδια βρες μερικά από τον ιντερνετ αλλά νομίζω δεν ζητάς αυτό!

Φτιάξε ένα φάκελο resources->icons ή κάτι τέτοιο.

Μέσα σε αυτό βάλε όλα σου τα εικονίδια.

Όταν φτιάχνεις το gridview σου έχε μια στήλη που είναι ένα image.

Αν το πεδίοΧ (π.χ. thread_isClosed είναι true) τότε εμφανίζεις το εικονίδιο /adsf/adfa/closed.png αλλιώς το /adfd/adf/open.png
Φωτογραφία Βασίλης Κόλιας
Απάντηση: Δημιουργία Βάσης
από Βασίλης Κόλιας - Tuesday, 24 July 2012, 5:50 AM
 
«Παρατήρησα ότι με το CreateUserWizardcontrol αποθηκεύονται στην βάση κάπως κρυπτογραφημένα.»
Κρυπτογραφημένο δεν είναι το id (ίσως εννοείς τον κωδικό αυτός είναι όντος είναι κρυπτογραφημένος). To id είναι ένα πεδίο uniqueidentifier (είναι ένας τύπος του sql server όπως ο bit, text, integer) είναι ένας μεγάλος 16αδικός αριθμός ο οποίος διασφαλίζει ότι δεν θα ξανατύχει να υπάρχει άλλη εγγραφή με το ίδιο id. Πάντως η ουσία είναι οτι είναι απλά ένας μεγάλος τυχαίος αριθμός.

«Για να συνδέσω τους users με τα δικά μου tables τι προτείνεις να κάνω;»
Φτιάξε πρώτα ένα χρήστη ώστε να φτιαχτεί αυτόματα η βάση. Χτίσε τους πίνακες του forum πάνω σε αυτή τη βάση. Άμα θέλεις άλλαξέ της και όνομα (πρέπει να το αλλάξεις και από το web.config). Απ’ ότι βλέπεις υπάρχει ήδη ο πίνακας με τους χρήστες οπότε για οποιαδήποτε στοιχεία χρήστη αφορούν αυτόν αποκλειστικά για τη λειτουργία του forum θα έφτιαχνα ένα πίνακα user_forum_info ή κάτι τέτοιο και ένα από τα πεδία του θα το έβαζα foreign key (τονίζω foreign key και όχι primary key) στη στήλη userid του πίνακα aspnet_users.
Αν θέλεις π.χ. να ανακτήσεις το userid, το username και κάποιες από τις πληροφορίες που θα αποθηκεύεις σε αυτό τον πίνακα απλά θα κάνεις join…
« σκέφτηκα να χρησιμοποιήσω το username και όχι το userid γιατί το κρατάει αυτούσιο το username.»
Όχι αυτός ο τρόπος δεν ενδείκνυται κάθε πίνακας καλύτερο είναι να έχει ένα id που θα λειτουργεί ως primary key.
Φωτογραφία Δημήτρης Ντούσκας
Απάντηση: Δημιουργία Βάσης
από Δημήτρης Ντούσκας - Thursday, 26 July 2012, 10:03 AM
 
Βασίλη καλημέρα έχω φτιάξει την βάση μέχρι στιγμής και δουλεύουν όλα οκ! Εχω κολλήσει σε ένα σημείο όμως...έχω φτιάξει έναν πίνακα UserDetails στον οποίο έχω βάλει πεδίο User_id το οποίο έχω βάλει foreign key στην στήλη UserId του πίνακα aspnet_user, οπως μου είπες. Έχω φτιάξει και το σχεδιάγραμμα και εμφανίζει κομπλέ τα αποτελέσματα. Εκεί που κολλάω είναι ότι όταν κάνω έναν καινούργιο χρήστη δεν μου τον εμφανίζει στο members.aspx έτσι ώστε να μπορέσει να συμπληρώσει τα υπόλοιπα στοιχεία ο χρήστης. Μου τον εμφανίζει μόνο εάν μπω στην βάση και συμπληρώσω χειροκίνητα το User_Id από το UserId του aspnet_Users. Δηλαδή με την δημιουργία νέου χρήστη προσθέτει αυτόματα έναν ακόμα χρήστη στον πίνακα aspnet_users αλλά αυτόν τον user δεν μου τον προσθέτει και στον πίνακα userdetails. Kαμιά ιδέα για το πως μπορώ να το διωρθώσω;
Φωτογραφία Βασίλης Κόλιας
Απάντηση: Δημιουργία Βάσης
από Βασίλης Κόλιας - Thursday, 26 July 2012, 7:47 PM
 
μια ιδέα είναι η εξής:

θυμήσου στην άσκηση που είχαμε στην ενότητα 7 στην οποία με το που δημιουργείτο ένας χρήστης εκμεταλλευόμασταν το συγκεκριμένο event για να κάνουμε μια τελευταία ενέργεια π.χ. να αποστείλουμε ένα e-mail με ένα link.

Θα εργαστείς με τον ίδιο τρόπο μόνο που εδώ θα κάνεις ένα insert στον πίνακα user details.
Φωτογραφία ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ
Απάντηση: Δημιουργία Βάσης
από ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ - Thursday, 26 July 2012, 9:13 PM
 
Πώς μπορώ να προσθέσω ενα tr στο createuserwizard?
Φωτογραφία Βασίλης Κόλιας
Απάντηση: Δημιουργία Βάσης
από Βασίλης Κόλιας - Friday, 27 July 2012, 2:00 PM
 
Στο design mode πας στο βελάκι > που σου εμφανίζει το παράθυρο Tasks και εκεί πατάς, Customize Create Step. Μετά πας στο code view και το πειράζεις όπως θες.
Φωτογραφία ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ
Απάντηση: Δημιουργία Βάσης
από ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ - Friday, 27 July 2012, 2:58 PM
 
Στο createuserwizard θα του προσθέσω κελιά ώστε να παίρνει από κει τα διεύθυνση site, διεύθυνση messenger, υπογραφή! Αυτό είναι λάθος ? Επίσης για να δέχεται το avatar στη member.aspx πρέπει να φτιάξω μια σειρά που να λέει πχ image και με ρύθμιση image στη βάση μου ή απλά μόνο στο gridview να κανω αυτό που μου είπες? ευχαριστώ
Φωτογραφία ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ
Απάντηση: Δημιουργία Βάσης
από ΧΡΗΣΤΟΣ ΔΟΥΣΜΑΝΟΠΟΥΛΟΣ - Friday, 27 July 2012, 3:43 PM
 
Απ΄ότι βλέπω πρέπει να μπω στα έγκατα της βάσης για να κάνω κάτι τέτοιο και να παίξει οπότε μάλλον είναι καλύτερα να πάω από το gridview ???
Φωτογραφία Βασίλης Κόλιας
Απάντηση: Δημιουργία Βάσης
από Βασίλης Κόλιας - Monday, 30 July 2012, 9:04 AM
 
Χα όχι δεν χρειάζεται να μπείς στα έγκατα της βάσης!
Αν γνωρίζει οτι στη aspnetdb οι χρήστες αποθηκεύονται στον πίνακα aspnet_Users τελείωσες (σχεδόν).
Φωτογραφία Βασίλης Κόλιας
Απάντηση: Δημιουργία Βάσης
από Βασίλης Κόλιας - Monday, 30 July 2012, 9:12 AM
 
Tο createuserwizard θα το πειράξεις ώστε να προσθέσεις τα έξτρα πεδία.

Από κει και πέρα, ένας τρόπος που θα σου πρότεινα να συνεχίσεις είναι, στο event createduser του συγκεκριμένου control να γράψεις κώδικα που θα εισάγει μια εγγραφή μέ όλες τις επιπλέον τιμές στον πίνακα των details.

Φυσικά υπάρχουν και άλλοι τρόποι, μεταξύ άλλων να επεκτίνεις και τον πίνακα aspnet_users και να δουλεύεις με αυτόν κατευθείαν.

----


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

Στο Gridview/listview θα έχεις μια στήλη/πεδίο ένα image control και απλά θα του θέτεις εκεί το συγκεκριμένο path.

Φυσικά γίνεται να αποθηεκεύεις στη βάση και images κατευθείαν...ψάξε Blob.
Φωτογραφία Δημήτρης Ντούσκας
Απάντηση: Δημιουργία Βάσης
από Δημήτρης Ντούσκας - Sunday, 29 July 2012, 9:23 AM
 
Αν απλά δεν έφτιαχνα καινούργιο πίνακα userdetails και πρόσθετα τα πεδία που θα έβαζα στον πίνακα userdetails (avatar, signature,website,messenger ....) στον πίνακα aspnet_Users ;
Φωτογραφία Βασίλης Κόλιας
Απάντηση: Δημιουργία Βάσης
από Βασίλης Κόλιας - Monday, 30 July 2012, 9:25 AM
 
Αν σε βολεύει κάντο. Μην ελπίζεις σε κάτι αυτόματο όμως του στυλ προσθέτω τα πεδία στο createuserwizard και έτσι θα προστίθενται αυτόματα και τα πεδία στη βάση.


Εγώ θα πρότεινα να μπεί έξτρα πίνακας!
Το κόστος δεν είναι μεγάλο.

βήμα 1. Δημιουργείς τον πίνακα user_details. Το τελευταίο του πεδίο θα είναι το user_id (τύπου uniqueidentifier) που θα λειτουργεί σαν foreign key στον πίνακα aspnet_user.


βήμα 2. Ανοίγεις ένα diagram πετάς τους δύο πίνακες και δημιουργείς τη σχέση.

βήμα 3. Αλλάζεις το createuserwizard ώστε να έχει έξτρα πεδία.

βήμα 4. Στο createduser εισάγεις κώδικα ώστε να ανακτά το id το νέου χρήστη και να το εισάγει μαζί με τα υπόλοιπα πεδία στον πίνακα user_details.

.
.
.
//ανάκτηση του χρήστη
MembershipUser newUser = Membership.GetUser(CreateUserWizard1.UserName);
//το userid είναι τύπου uniqueidentifier ένα int δεν μας κάνει...
Guid uniqueIDofNewUser = (Guid)newUser.ProviderUserKey;

//το insert για τον δεύτερο πίνακα
SqlCommand command = new SqlCommand("INSERT INTO User_Details VALUES(@details_signature, @details_image, ..., @details_user_id)", myConnection);

//ανακάλυψη του επιπλέον πεδίου προστέθηκε
TextBox signature = (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("Signature");

.
.
.

//καθορίσμος της τιμής και του τύπου των διαφόρων παραμέτρων στο ερώτημα command.Parameters.Add("@details_signature", System.Data.SqlDbType.NVarChar).Value = signature.Text;
command.Parameters.Add("@details_image", System.Data.SqlDbType.NVarChar).Value = DBNull.Value;
.
.
.
command.Parameters.Add("@details_user_id", System.Data.SqlDbType.UniqueIdentifier).Value = uniqueIDofNewUser;

//εκτέλεση
command.ExecuteNonQuery();
myConnection.Close();
.
.
.