Asevastos Δημοσ. 20 Δεκεμβρίου 2018 Δημοσ. 20 Δεκεμβρίου 2018 (επεξεργασμένο) Καλησπέρα, σε συνέχεια προηγούμενο θέματος μου για μια ιστοσελίδα που υλοποιώ για τη σχολή με χρήση HTML, CSS, PHP, MySQL, αφού έχω υλοποιήσει τη βάση δεδομένων και το login page (μετά από πολύ googlάρισμα), φτάνω στο κρισιμότερο σημείο. So, έχω φτιάξει 2 users στη ΒΔ μου (Admin, Member) και τώρα αυτό που θέλω είναι όταν συνδέεται ένας Admin να του εμφανίζει (πέρα από όσα βλέπει ο user) κάποιο text το οποίο θα βλέπει μόνο αυτός. Πώς μπορώ να το κάνω; Δοκίμασα 2-3 πραγματάκια όπως το να ορίσω κάποια μεταβλητή αλλά μου έβγαζε HTTP Error όλη η σελίδα. Πρέπει να έκανα κάτι (πολύ) λάθος. Παραθέτω παρακάτω τον κώδικα για το configuration file που κάνει τη σύνδεση με τη ΒΔ καθώς και τον κώδικα για το login page. Ευχαριστώ για τις όποιες γνώμες. config.php <?php define('DB_SERVER', 'bla'); define('DB_USERNAME', 'blabla'); define('DB_PASSWORD', 'blablabla'); define('DB_DATABASE', 'blablablabla'); $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); ?> login.php <?php include("config.php"); session_start(); if($_SERVER["REQUEST_METHOD"] == "POST") { $myusername = mysqli_real_escape_string($db,$_POST['username']); $mypassword = mysqli_real_escape_string($db,$_POST['password']); $sql = "SELECT * FROM Users WHERE Loginame = '$myusername' and Password = '$mypassword'"; $result = mysqli_query($db,$sql); $row = mysqli_fetch_array($result,MYSQLI_ASSOC); $active = $row['active']; $count = mysqli_num_rows($result); if($count == 1) { //session_register("myusername"); $_SESSION['login_user'] = $myusername; header("location: index2.php"); }else { $error = "Your Login Name or Password is invalid"; } } ?> <html> <head> <meta charset="UTF-8"> <title>Login Page</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div id="loginform"> <p> Πιστοποίηση </p> <form action = "" method = "POST"> <p><label>Login</label> <input type = "text" name = "username"></p> <div id="inside2"><p><label>Password</label> <input type = "password" name = "password"></p></div> <div id="inside1"><input type = "submit" value = " Log me In "/></div> </form> </div> </body> </html> Επεξ/σία 20 Δεκεμβρίου 2018 από Asevastos
mad-proffessor Δημοσ. 20 Δεκεμβρίου 2018 Δημοσ. 20 Δεκεμβρίου 2018 (επεξεργασμένο) Περιληπτικά θα πρέπει να ορίσεις και να αναθέσεις τιμές σε κάποιες $_SESSION variables εφόσον συνδεθεί ο admin και κατόπιν θα κάνεις έναν απλό έλεγχο αν ο χρήστης (συνδέθηκε και ) είναι όντως ο admin τότε εμφάνισε μου το περιεχόμενο που θέλω αν όχι τότε είναι απλός χρήστης αυτές οι session variables είναι στη δική σου κρίση ποιές θα είναι αλλά είναι αυτές που κρατάνε το state. Επεξ/σία 20 Δεκεμβρίου 2018 από mad-proffessor 1
pmav99 Δημοσ. 20 Δεκεμβρίου 2018 Δημοσ. 20 Δεκεμβρίου 2018 Πέρα από το session που σωστά αναφέρει ο mad-proffessor: 1. FYI ένα πιο καλό design της βάσης είναι να έχεις roles/groups τα οποία έχουν permissions για τις διάφορες λειτουργίες του site και τα οποία κάνεις assign σε κάθε user. Με τον τρόπο αυτό μπορείς να έχεις admins, moderators, vips, users, whatever. Αν δεν σου ζητείται στο πλαίσιο της εργασίας και δεν έχεις χρόνο μην το υλοποιήσεις, αν και θα είναι αρκετά διδακτικό. 2. ΜΗΝ βάζεις τον κώδικα html μέσα στο αρχείο php. Είναι το #1 bad pattern στην PHP. Να χρησιμοποιείς ξεχωριστό template file το οποίο θα ανοίγει ο κώδικας σου και θα κάνει replace τα στοιχεία του κάθε χρήστη. Στην πράξη συνήθως χρησιμοποιείται κάποιο template language/engine όπως πχ αυτό αλλά εσύ και σκέτα αρχεία να χρησιμοποιήσεις δεν υπάρχει πρόβλημα.
PC_MAGAS Δημοσ. 20 Δεκεμβρίου 2018 Δημοσ. 20 Δεκεμβρίου 2018 (επεξεργασμένο) Εάν ο κώδικας είναι production ή φίλε εργάζεσε σαν developer: Νομίζω λόγο ότι καταλαβαίνω (διόρθωσε με εάν κάνω λάθος) είναι σε αρχικά στάδια το project εάν το κάνεις migrate σε κάποιο framework να σου δώσει ωραίες λύσεις για το πως να κάνεις render κάποια πράγματα. Προσωπικά θα χρησιμοποιούσα Symfony routing εάν δεν ήθελα να χρησιμοποιήσω πλήρες symfony (προσωπικά συνιστώ το ΠΛΗΡΕΣ symfony) και το symfony/twig και αυτό γιατί με τον συνδυασμό μπορείς να πεις ενός template twig (ουσιαστικά ένα αρχείο στο οποίο έχεις κενά τα οποία μέσω php κάνεις fill in) να καλέσει έναν controller από το symfony routing και να βάλεις εκεί την λογική για το rendering ή ανάλογα με το εάν ο χρήστης είναι admin όχι πράττεις ανάλωγα. Εάν είναι εργασία παν/μιου, σχολής, ιέκ, χομπιστικός και γενικότερες συμβουλές: Αντί να σου πω την λύση θα σου πω πως να βρεις την λύση. Χρησιμοποίησε κάτι που λέγετε xdebug, από εμπειρία στο στήσιμο είναι pain in ass, ειδικά σε docker (πράγμα που δεν νομίζω να χρειάζεσε εκτός εάν τρέχεις docker), ΑΛΛΑ στην τελική είναι πολύ ποιο αποτελεσματικός στο να εντοπίζεις και να αναλύεις σφάλματα. Ένας οδηγός (υποθέτοντας ότι χρησιμοποιείς XAMPP) είναι αυτός και εάν χρησιμοποιείς άλλο IDE τότε μπορείς να αγνοήσεις το κομμάτι που αναφέρετε στο PhpStorm. Αναφέρομαι σε αυτόν λόγο ότι είναι debugger και σου επιτρέπει να βλέπεις τις τιμές των μεταβλητών κλπ κλπ. Επίτηδες αναφέρομαι σε αυτόν αντί να σου πω την λύση λόγο ότι θα σε οδηγήσει να αποκτήσεις καλές συνήθειες στον προγραμματισμό. Επεξ/σία 20 Δεκεμβρίου 2018 από PC_MAGAS 1
Asevastos Δημοσ. 20 Δεκεμβρίου 2018 Μέλος Δημοσ. 20 Δεκεμβρίου 2018 (επεξεργασμένο) 1 ώρα πριν, mad-proffessor είπε Περιληπτικά θα πρέπει να ορίσεις και να αναθέσεις τιμές σε κάποιες $_SESSION variables εφόσον συνδεθεί ο admin και κατόπιν θα κάνεις έναν απλό έλεγχο αν ο χρήστης (συνδέθηκε και ) είναι όντως ο admin τότε εμφάνισε μου το περιεχόμενο που θέλω αν όχι τότε είναι απλός χρήστης αυτές οι session variables είναι στη δική σου κρίση ποιές θα είναι αλλά είναι αυτές που κρατάνε το state. Προσπάθησα να παίξω λίγο με το session αλλά δε το κατάφερα. Το μόνο που πέτυχα σε μια στιγμή ήταν να εμφανίζει το text σε users & admins αλλά όχι σε απλούς visitors που δε κάνανε login. 51 λεπτά πριν, pmav99 είπε Πέρα από το session που σωστά αναφέρει ο mad-proffessor: 1. FYI ένα πιο καλό design της βάσης είναι να έχεις roles/groups τα οποία έχουν permissions για τις διάφορες λειτουργίες του site και τα οποία κάνεις assign σε κάθε user. Με τον τρόπο αυτό μπορείς να έχεις admins, moderators, vips, users, whatever. Αν δεν σου ζητείται στο πλαίσιο της εργασίας και δεν έχεις χρόνο μην το υλοποιήσεις, αν και θα είναι αρκετά διδακτικό. 2. ΜΗΝ βάζεις τον κώδικα html μέσα στο αρχείο php. Είναι το #1 bad pattern στην PHP. Να χρησιμοποιείς ξεχωριστό template file το οποίο θα ανοίγει ο κώδικας σου και θα κάνει replace τα στοιχεία του κάθε χρήστη. Στην πράξη συνήθως χρησιμοποιείται κάποιο template language/engine όπως πχ αυτό αλλά εσύ και σκέτα αρχεία να χρησιμοποιήσεις δεν υπάρχει πρόβλημα. 1. Έχω βάλει στο table με τους users πεδίο "Role" (Admin or User) απλώς δε το αξιοποίησα ως τώρα, προσπάθησα να χρησιμοποιήσω μόνο το login name αφού ξέρω το username του Admin και συνεπώς αν συνδεόταν κάποιος με το συγκεκριμένο username ήταν ο Διαχειριστής. Προφανώς κακή πρακτική αλλά για το παράδειγμα που ο καθηγητής θέλει 3 users έκανε τη δουλειά (θεωρητικά). 2. Αυτό δε το ήξερα, χθες έπιασα την PHP οπότε δε πρόλαβα να τα μάθω όλα. Ευχαριστώ για το tip. 51 λεπτά πριν, PC_MAGAS είπε Εάν ο κώδικας είναι production ή φίλε εργάζεσε σαν developer: Νομίζω λόγο ότι καταλαβαίνω (διόρθωσε με εάν κάνω λάθος) είναι σε αρχικά στάδια το project εάν το κάνεις migrate σε κάποιο framework να σου δώσει ωραίες λύσεις για το πως να κάνεις render κάποια πράγματα. Προσωπικά θα χρησιμοποιούσα Symfony routing εάν δεν ήθελα να χρησιμοποιήσω πλήρες symfony (προσωπικά συνιστώ το ΠΛΗΡΕΣ symfony) και το symfony/twig και αυτό γιατί με τον συνδυασμό μπορείς να πεις ενός template twig (ουσιαστικά ένα αρχείο στο οποίο έχεις κενά τα οποία μέσω php κάνεις fill in) να καλέσει έναν controller από το symfony routing και να βάλεις εκεί την λογική για το rendering ή ανάλογα με το εάν ο χρήστης είναι admin όχι πράττεις ανάλωγα. Εάν είναι εργασία παν/μιου, σχολής, ιέκ, χομπιστικός και γενικότερες συμβουλές: Αντί να σου πω την λύση θα σου πω πως να βρεις την λύση. Χρησιμοποίησε κάτι που λέγετε xdebug, από εμπειρία στο στήσιμο είναι pain in ass, ειδικά σε docker (πράγμα που δεν νομίζω να χρειάζεσε εκτός εάν τρέχεις docker), ΑΛΛΑ στην τελική είναι πολύ ποιο αποτελεσματικός στο να εντοπίζεις και να αναλύεις σφάλματα. Ένας οδηγός (υποθέτοντας ότι χρησιμοποιείς XAMPP) είναι αυτός και εάν χρησιμοποιείς άλλο IDE τότε μπορείς να αγνοήσεις το κομμάτι που αναφέρετε στο PhpStorm. Αναφέρομαι σε αυτόν λόγο ότι είναι debugger και σου επιτρέπει να βλέπεις τις τιμές των μεταβλητών κλπ κλπ. Επίτηδες αναφέρομαι σε αυτόν αντί να σου πω την λύση λόγο ότι θα σε οδηγήσει να αποκτήσεις καλές συνήθειες στον προγραμματισμό. Εργασία σχολής είναι (σε μάθημα Επιλογής που το πήρα για να συμπληρώνω μαθήματα). Θα το εγκαταστήσω το xdebug να το κοιτάξω, ευχαριστώ. Δε τα τρέχω σε XAMPP έχω χώρο που μας παρέχει το Πανεπιστήμιο edit: Πήγα στο login αρχείο μου και μετά τη τελευταία συνθήκη if στο php κομμάτι πρόσθεσα το εξής: if ($myusername='tutor'){ //Γιατί γνωρίζω ότι ο admin συνδέεται με username tutor. $_SESSION['view'] = 1; } else{ $_SESSION['view'] = 0; } Δοκιμάζοντας από άλλο file να κάνω echo τη τιμή για να δω αν τη βγάζει σωστά, μου βγάζει άσσο είτε έχω συνδεθεί ως user είτε ως admin. edit 2: ήθελε "=="... Επεξ/σία 21 Δεκεμβρίου 2018 από Asevastos
παπι Δημοσ. 21 Δεκεμβρίου 2018 Δημοσ. 21 Δεκεμβρίου 2018 Αυτο που ζητας ειναι αρμετα απλο σα λογική, και παρα πολυ δυσκολο στο να το φτιαξεις. Θα πρεπει να εχεις παρα πολλα if τα οποια θα σου φερουν παρα πολλα ερορ. Για αυτο και θα σου ελεγα να πας σε framework οπως σου ειπε ο mad.
Asevastos Δημοσ. 21 Δεκεμβρίου 2018 Μέλος Δημοσ. 21 Δεκεμβρίου 2018 Δεν επιτρέπονται frameworks. Οι καθηγητές θέλουν να δουν τις γνώσεις μας πάνω στις εκάστοτε γλώσσες. Αν ο καθένας μπορούσε να χρησιμοποιήσει όποια frameworks ήθελε θα έκανε πολύ πιο εύκολα τη δουλειά που ζητείται. Πάντως κοντεύω να βγάλω άκρη. Προφανώς δεν είναι state of the art οι υλοποιήσεις μου αλλά κάνουν τη δουλειά.
PC_MAGAS Δημοσ. 21 Δεκεμβρίου 2018 Δημοσ. 21 Δεκεμβρίου 2018 16 ώρες πριν, Asevastos είπε Εργασία σχολής είναι (σε μάθημα Επιλογής που το πήρα για να συμπληρώνω μαθήματα). Θα το εγκαταστήσω το xdebug να το κοιτάξω, ευχαριστώ. Δε τα τρέχω σε XAMPP έχω χώρο που μας παρέχει το Πανεπιστήμιο Τέλεια! μπορείς να στήσεις τοπικά ένα development περιβάλλον (Eιτε XAMPP και XDebug ή Vagrant και XDEBUG) στο pc σου και έχε το Server του Παν/μιου σαν production. Ουσιαστικά ΔΕΣ το έτσι γιατί και στην πραγματική Ζωή ΕΤΣΙ παίζει. 13 ώρες πριν, Asevastos είπε Δεν επιτρέπονται frameworks. Οι καθηγητές θέλουν να δουν τις γνώσεις μας πάνω στις εκάστοτε γλώσσες. Αν ο καθένας μπορούσε να χρησιμοποιήσει όποια frameworks ήθελε θα έκανε πολύ πιο εύκολα τη δουλειά που ζητείται. Όμως δεν απαγορεύονται τα libraries , εάν μπορέσεις μέσω twig template & extentions να καλείς κάποιο κομμάτι php Πχ. onRoleRender('role', someTemplate) την έκανες λαχείο. Και η Twig θα αναλαμβάνει την εμφάνιση. Εναλλακτικά στο page σου μπορείς να βάλεις ένα μεγάλο switch ... case και για κάθε ένα case φoρτώνεις το κατάλληλο template. Μια τρίτη προσέγγιση είναι χωρίς τρίτες βιβλιοθήκες το template μπορεί να είναι ένα php αρχείο που θα το δεις σαν ένα black box, που του περνάς παραμέτρους που μπορεί να είναι κάποια booleans ή strings. Μπορεί το message να του το δώσεις μέσω των παραμέτρων και να ελέγχεις εάν υπάρχει το message εμφάνισέ το ειδάλλως κάντο τουμπεκί ψιλοκομμένο. Μόνο που θα πρέπει να κάνεις έναν μηχανισμό να φορτώνει αυτά τα php αρχεία. Ουσιαστικά θα κάνεις το View Engine από τα γράμματα MVC (επίτηδες ΔΕΝ στα εξηγώ να τα μάθεις) Ακόμη σου συνιστώ να χρησιμοποιήσεις composer για εγκατάσταση php βιβλιοθηκών, npm και yarn για εγκατάσταση javascript βιβλιοθηκών (για τοπική χρήση) όπως ακόμη και την χρήση των εργαλείων Vagrant+Homestead+Xdebug+VSCode όπως λέει αυτό. Προσωπικά λόγο ιδεολογίας χρησιμοποιώ το fork VSCodium, που ουσιαστικά είναι ελεύθερο λογισμικό ΚΑΙ στην χτισμένη εφαρμογή και παίζει όπως το VSCode. Τέλος στις ρυθμίσεις του XDEbug να ΕΝΕΡΓΟΠΟΙΣΕΙΣ τα logs σώζουν ζωές. Ακόμη έχε το νου σου κάτα το setup του Xdebug ότι ουσιαστικά το IDE είναι ένας Server και το Xdebug ένας Client. Ακόμη σαν ένα cheat τόσο δα σου δίνω την εξής εντολή όταν πας σε vagrant: netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10 Αυτή η εντολή σου δίνει την ip του Host μηχανήματος και την δίνεις στο guest. Well με Vagrant σε βάζω σε λίγο pain in ass κατάστα ΑΛΛΑ και σαν επαγγελματίας θα είσαι "ψημένος" σε τέτοιες καταστάσεις. Τέλος σου λέω: Η στήνεις XAMPP Xdebug και περνάς το μάθημα ή βλέπεις παραπάνω το Vagrant και Xdebug που σου επιτρέπει να έχεις ένα κοινό development περιβάλλον σε περίπτωση συνεργασίας. Ζυγίζεις και πράττεις ανάλογα με την ημ/νια παράδωσης που αποτελεί μέρος του challenge και θα το έχεις στο 10πλάσιο εάν ακολουθήσεις επαγγελματικά το δρόμο αυτό. Με αγάπη, Καλές γιορτές από την μεγαλύτερη ψωνάρα του γαλαξία, tensai της πληροφορικής, pc_magas-sensei (Γενειάδα αμήν) 1
CondorOne Δημοσ. 2 Ιανουαρίου 2019 Δημοσ. 2 Ιανουαρίου 2019 Το mysqli είτε έχει τελειώσει είτε είναι στα τελειώματα του στις τελευταίες εκδόσεις. Χρησιμοποιήσε pdo για τη βάση σου ακόμα και αν δεν παίξεις framework. Πιο secure + εύκολο
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα