Jump to content

[PHP]Έλεγχος στοιχείων εισόδου


UltraB
 Share

Recommended Posts

Καλησπέρα, έχω τον παρακάτω κώδικα και θα ήθελα να τον μετατρέψω ώστε να ελέγχει:

  • Αν το 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>';?>
Edited by UltraB
Link to comment
Share on other sites

Για να ελέγξεις αν το 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

Link to comment
Share on other sites

@nucleus, Το πρώτο ερώτημα για να ελέγχει αν υπάρχει ο χρήστης, γίνεται με το τρέχον κώδικα (ή έτσι νομίζω τουλάχιστον).

 

Αυτό που μου πρότεινες ως αλλαγή απλά θα ελέγχει μόνο αν υπάρχει το username και όχι αν υπάρχει και ταιριάζει με το password.
Καλύτερα τελικά να ελέγχω μόνο αν υπάρχει το username γιατί μπορεί να έχει ξεχάσει ο χρήστης το κωδικό του ή το username να υπάρχει ήδη.

Αυτό που με απασχολεί είναι αν κάποιο από τα πεδία είναι άδειο, να μην προχωράει στην καταχώρηση των στοιχείων στη φόρμα αλλά να πετάει το ανάλογο μήνυμα.
Δεν με απασχολεί αν το μήνυμα θα αναγράφει ποιο πεδίο είναι άδειο (καλύτερο) ή απλά (ευκολότερο λογικά) ότι κάποιο πεδίο είναι άδειο.

Link to comment
Share on other sites

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.

 

Για το αν κάποιο απο τα πεδία είναι άδειο μπορείς να το κάνεις πριν την SignUp

if(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 είναι σε άλλη σελίδα ή κάτω από τον παραπάνω κώδικα?

Edited by nucleus
Link to comment
Share on other sites

Ναι, το κατάλαβα αυτό με το κωδικό και το username. Άλλωστε και στο παραπάνω μήνυμα έγραψα ότι θα το αλλάξω όπως λες.

Στον άλλο κώδικα που μου έδωσες, μπορώ να τα "συνδυάσω"; Πχ να πω

if(isset($_POST['submit'])){$usernameErr,$fnameErr,$lnameErr,$passErr,$genderErr = "";if (empty($_POST["username"]) OR empty($_POST["fname"]).... OR empty($_POST["gender"]) );{echo "Δεν έχετε συμπληρώσει όλα τα απαιτούμενα πεδία";}
Link to comment
Share on other sites

Λογικά ναι βέβαια testαρε το κιόλας έχω χρόνια να γράψω php απλώς μην ξεχάσεις το else για την SignUp.

 

Και μην ξεχάσεις στην φόρμα εγγραφής να επισημάνεις ξεκάθαρα ποια πεδία είναι υποχρεωτικά για να μην μπερδευτεί ο χρήστης.

Edited by nucleus
Link to comment
Share on other sites

Λογικά ναι βέβαια testαρε το κιόλας έχω χρόνια να γράψω php απλώς μην ξεχάσεις το else για την SignUp.

 

Και μην ξεχάσεις στην φόρμα εγγραφής να επισημάνεις ξεκάθαρα ποια πεδία είναι υποχρεωτικά για να μην μπερδευτεί ο χρήστης.

Ευχαριστώ για το χρόνο σου, πραγματικά!

Θα το τεστάρω και θα επανέλθω. Επίσης στη φόρμα έχω επισημάνει ότι όλα τα πεδία είναι υποχρεωτικά ;)

 

Link to comment
Share on other sites

Λοιπόν, άλλαξα κάπως τον κώδικα και τώρα έχω τον παρακάτω:

<?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 41
Duplicate entry '2' for key 'PRIMARY'

Το θέμα είναι ότι έχω δώσει το σωστό όνομα στο Notice που μου λέει. Στην βάση το ονομάζω όπως γράφω, Username.
Τώρα το Duplicate entry '2' for key 'PRIMARY' το βγάζει γιατί δε λειτουργεί ο κώδικας παραπάνω;

Edited by UltraB
Link to comment
Share on other sites

@UltraB,

 

Οοοops!!

$check = mysql_query ("SELECT * FROM users WHERE Username='$Username'");

Και αναρωτιέμαι εγώ τώρα που ακριβώς ορίζεται η php μεταβλητή $Username

 

Hint:

 

function NewUser(){    $Username     =    $_POST['username'];    #Username

 

Η λύση αφήνεται σαν λύση στον αναγνώστη

Edited by nucleus
Link to comment
Share on other sites

@nucleus, Νταξει...  δε χρειάζεται να πω κάτι  :boxed:  :slap:

Απλά επειδή είναι τα ίδια ονόματα στον κώδικα με τη μόνη "διαφορά" ένα $, νόμιζα ότι φταίει το πρώτο Username και όχι η μεταβλητή.
Και να φανταστείς το λέει, αλλά που, έχει σταματήσει να λειτουργεί το μυαλό μου τόσες ώρες γράφοντας και ψάχνοντας.

 

Πως το φτιάχνω όμως ώστε να λειτουργούν όλα; Θα πρέπει να τα δηλώσω πριν το function NewUser() και να τα δώσω σε αυτή ως παραμέτρους, σωστά;

Edited by UltraB
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...