UltraB Δημοσιεύτηκε Απρίλιος 7, 2015 #1 Δημοσιεύτηκε Απρίλιος 7, 2015 Καλησπέρα, έχω τον παρακάτω κώδικα και θα ήθελα να τον μετατρέψω ώστε να ελέγχει:Αν το username υπάρχει. Δεν με ενδιαφέρει τόσο αν "ταιριάζει" με το password αλλά αν υπάρχει μιας και δεν επιτρέπονται τα διπλότυπα.Αν δεν υπάρχει, να ελέγχει αν όλα τα πεδία της φόρμας εγγραφής έχουν συμπληρωθεί. Αν ναι, να τα καταχωρεί στη βάση αλλιώς να σου πετάει μήνυμα ή να σε πηγαίνει ξανά στην φόρμα εγγραφής.Ευχαριστώ!PS: Open the spoiler <?phpdefine('DB_HOST', 'localhost');define('DB_NAME', '4208');define('DB_USER','root');define('DB_PASSWORD','');$con = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());$db_selected = mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());function NewUser() { $Username = $_POST['username']; #Username $FirstName = $_POST['fname']; #Onoma $LastName = $_POST['lname']; #Epitheto $Password = $_POST['pass']; #Password $RegDate = $timestamp = date('Y-m-d G:i:s'); $Gender = $_POST['gender']; #Fylo #Elegxos fylou. Male or Female if ($_POST['gender'] == "female") $Gender = 'F'; else $Gender = 'M'; #Egxwrish stoixeiwn $query = "INSERT INTO users (Username,FirstName,LastName,Password,Gender,RegDate) VALUES ('$Username','$FirstName','$LastName','$Password','$Gender','$RegDate')"; $data = mysql_query ($query)or die(mysql_error()); if($data) { echo "YOUR REGISTRATION IS COMPLETED..."; }}function SignUp(){if(!empty($_POST['username'])) //checking the 'username' name which is from Sign-Up.html, is it empty or have some text{ $query = mysql_query("SELECT * FROM users WHERE Username = '$_POST[username]' AND Password = '$_POST[pass]'") or die(mysql_error()); if(!$row = mysql_fetch_array($query) or die(mysql_error())) { newuser(); } else { echo "SORRY...YOU ARE ALREADY REGISTERED USER..."; }}}if(isset($_POST['submit'])){ SignUp();}echo '<script language="javascript">';echo 'alert("Your account has been created successfully. \n Thank you for joined us!")';echo '</script>';?>
nucleus Απρίλιος 7, 2015 #2 Απρίλιος 7, 2015 Για να ελέγξεις αν το username υπάρχει ήδη αλλάζεις την SignUp ως εξής. Από$query = mysql_query("SELECT * FROM users WHERE Username = '$_POST[username]' AND Password = '$_POST[pass]'") or die(mysql_error());σε$query = mysql_query("SELECT * FROM users WHERE Username = '$_POST[username]'") or die(mysql_error());Αν δεν υπάρχει το username (το παραπάνω query δεν έφερε αποτελέσματα) καλείς την newuser. H newuser πρέπει να ελέγχει αν τα πεδία είναι κενά. Μπορείς να διαβάσεις περισσότερα για αυτό εδώ http://www.w3schools.com/php/php_form_required.asp
UltraB Απρίλιος 7, 2015 Author #3 Απρίλιος 7, 2015 @nucleus, Το πρώτο ερώτημα για να ελέγχει αν υπάρχει ο χρήστης, γίνεται με το τρέχον κώδικα (ή έτσι νομίζω τουλάχιστον). Αυτό που μου πρότεινες ως αλλαγή απλά θα ελέγχει μόνο αν υπάρχει το username και όχι αν υπάρχει και ταιριάζει με το password.Καλύτερα τελικά να ελέγχω μόνο αν υπάρχει το username γιατί μπορεί να έχει ξεχάσει ο χρήστης το κωδικό του ή το username να υπάρχει ήδη.Αυτό που με απασχολεί είναι αν κάποιο από τα πεδία είναι άδειο, να μην προχωράει στην καταχώρηση των στοιχείων στη φόρμα αλλά να πετάει το ανάλογο μήνυμα.Δεν με απασχολεί αν το μήνυμα θα αναγράφει ποιο πεδίο είναι άδειο (καλύτερο) ή απλά (ευκολότερο λογικά) ότι κάποιο πεδίο είναι άδειο.
nucleus Απρίλιος 7, 2015 #4 Απρίλιος 7, 2015 To πρώτο ερώτημαSELECT * FROM users WHERE Username = '$_POST[username]' AND Password = '$_POST[pass]'ελέγχει αν υπάρχει το username και το pass σαν ζευγάρι τιμών. πχ έχω εγγραφεί μια φορά με username nucleus και pass 12345. Αν πάω να εγγραφώ με το ίδιο username nucleus και pass 1234567 το παραπάνω θα το σώσει κανονικά στην βάση μιας και το SELECT * FROM users WHERE Username = 'nucleus' AND Password = '1234567' δεν υπάρχει σαν εγγραφή. Το αποτέλεσμα θα είναι να έχεις πια 2 εγγραφές username = nucleus pass=12345 και username=nucleus pass=1234567. Για το αν κάποιο απο τα πεδία είναι άδειο μπορείς να το κάνεις πριν την SignUpif(isset($_POST['submit'])){ $usernameErr,$fnameErr,$lnameErr,$passErr,$genderErr = ""; if (empty($_POST["username"])) { $usernameErr = "Username is required"; } if (empty($_POST["fname"])) { $fnameErr = "Firstname is required"; } if (empty($_POST["lname"])) { $lnameErr = "Lastname is required"; } if (empty($_POST["pass"])) { $passErr = "Password is required"; } if (empty($_POST["gender"])) { $genderErr = "Gender is required"; } if($usernameErr == "" && $fnameErr == "" && $lnameErr == "" && $passErr == "" && $genderErr = "") { SignUp(); } else { echo "$usernameErr"; echo "$fnameErr"; echo "$lnameErr"; echo "$passErr"; echo "$genderErr"; }}Ορίζεις php μεταβλητές για το error message του κάθε πεδίου,αρχική τιμή "". Αν το αντίστοιχο πεδίο είναι κενό βάζεις το μύνημα λάθους για αυτό.Αν όλες οι παραπάνω μεταβλητές είναι "" τότε Sign me Up Scottie! Αν όχι echo τα error. Για δοκίμασε μια το παραπάνω δουλεύει σωστά? EDIT: η φόρμα για το register είναι σε άλλη σελίδα ή κάτω από τον παραπάνω κώδικα?
UltraB Απρίλιος 7, 2015 Author #5 Απρίλιος 7, 2015 Ναι, το κατάλαβα αυτό με το κωδικό και το username. Άλλωστε και στο παραπάνω μήνυμα έγραψα ότι θα το αλλάξω όπως λες.Στον άλλο κώδικα που μου έδωσες, μπορώ να τα "συνδυάσω"; Πχ να πωif(isset($_POST['submit'])){$usernameErr,$fnameErr,$lnameErr,$passErr,$genderErr = "";if (empty($_POST["username"]) OR empty($_POST["fname"]).... OR empty($_POST["gender"]) );{echo "Δεν έχετε συμπληρώσει όλα τα απαιτούμενα πεδία";}
nucleus Απρίλιος 7, 2015 #6 Απρίλιος 7, 2015 Λογικά ναι βέβαια testαρε το κιόλας έχω χρόνια να γράψω php απλώς μην ξεχάσεις το else για την SignUp. Και μην ξεχάσεις στην φόρμα εγγραφής να επισημάνεις ξεκάθαρα ποια πεδία είναι υποχρεωτικά για να μην μπερδευτεί ο χρήστης.
UltraB Απρίλιος 7, 2015 Author #7 Απρίλιος 7, 2015 Λογικά ναι βέβαια testαρε το κιόλας έχω χρόνια να γράψω php απλώς μην ξεχάσεις το else για την SignUp. Και μην ξεχάσεις στην φόρμα εγγραφής να επισημάνεις ξεκάθαρα ποια πεδία είναι υποχρεωτικά για να μην μπερδευτεί ο χρήστης. Ευχαριστώ για το χρόνο σου, πραγματικά! Θα το τεστάρω και θα επανέλθω. Επίσης στη φόρμα έχω επισημάνει ότι όλα τα πεδία είναι υποχρεωτικά
UltraB Απρίλιος 7, 2015 Author #8 Απρίλιος 7, 2015 Λοιπόν, άλλαξα κάπως τον κώδικα και τώρα έχω τον παρακάτω:<?phpdefine('DB_HOST', 'localhost');define('DB_NAME', '4208');define('DB_USER','root');define('DB_PASSWORD','');$con = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());$db_selected = mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());function NewUser() { $Username = $_POST['username']; #Username $FirstName = $_POST['fname']; #Onoma $LastName = $_POST['lname']; #Epitheto $Password = $_POST['pass']; #Password $RegDate = $timestamp = date('Y-m-d G:i:s'); $Gender = $_POST['gender']; #Fylo #Elegxos fylou. Male or Female if ($_POST['gender'] == "female") $Gender = 'F'; else $Gender = 'M'; #Egxwrish stoixeiwn $query = "INSERT INTO users (Username,FirstName,LastName,Password,Gender,RegDate) VALUES ('$Username','$FirstName','$LastName','$Password','$Gender','$RegDate')"; $data = mysql_query ($query)or die(mysql_error()); if($data) { echo "YOUR REGISTRATION IS COMPLETED..."; }}if(isset($_POST['submit'])){ if (empty($_POST["username"]) OR empty($_POST["fname"]) OR empty($_POST["lname"]) or empty($_POST["pass"])) { echo "Δεν έχετε συμπληρώσει όλα τα απαιτούμενα πεδία"; } else $check = mysql_query ("SELECT * FROM users WHERE Username='$Username'"); if (mysql_num_rows($check)>0) { die ("Sorry, this username is already exist."); } else newuser();} echo '<script language="javascript">';echo 'alert("Your account has been created successfully. \n Thank you for joined us!")';echo '</script>';?>Λειτουργεί μια χαρά ο έλεγχος για τα κενά πεδία αλλά δεν λειτουργεί η λειτουργία για τον έλεγχο του username. Μου βγάζει το παρακάτω:Notice: Undefined variable: Username in C:\xampp\htdocs\test\SignUp.php on line 41Duplicate entry '2' for key 'PRIMARY'Το θέμα είναι ότι έχω δώσει το σωστό όνομα στο Notice που μου λέει. Στην βάση το ονομάζω όπως γράφω, Username.Τώρα το Duplicate entry '2' for key 'PRIMARY' το βγάζει γιατί δε λειτουργεί ο κώδικας παραπάνω;
nucleus Απρίλιος 7, 2015 #9 Απρίλιος 7, 2015 @UltraB, Οοοops!!$check = mysql_query ("SELECT * FROM users WHERE Username='$Username'");Και αναρωτιέμαι εγώ τώρα που ακριβώς ορίζεται η php μεταβλητή $Username Hint: function NewUser(){ $Username = $_POST['username']; #Username Η λύση αφήνεται σαν λύση στον αναγνώστη
UltraB Απρίλιος 7, 2015 Author #10 Απρίλιος 7, 2015 @nucleus, Νταξει... δε χρειάζεται να πω κάτι Απλά επειδή είναι τα ίδια ονόματα στον κώδικα με τη μόνη "διαφορά" ένα $, νόμιζα ότι φταίει το πρώτο Username και όχι η μεταβλητή.Και να φανταστείς το λέει, αλλά που, έχει σταματήσει να λειτουργεί το μυαλό μου τόσες ώρες γράφοντας και ψάχνοντας. Πως το φτιάχνω όμως ώστε να λειτουργούν όλα; Θα πρέπει να τα δηλώσω πριν το function NewUser() και να τα δώσω σε αυτή ως παραμέτρους, σωστά;
nucleus Απρίλιος 7, 2015 #11 Απρίλιος 7, 2015 Απλώς βάλε αυτο $_POST["username"] στην θέση του problem solved
Recommended Posts
Archived
This topic is now archived and is closed to further replies.