login

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
eagleman
Δημοσιεύσεις: 30
Εγγραφή: 14 Δεκ 2005 19:32

login

Δημοσίευση από eagleman » 11 Ιαν 2006 23:52

Γεια σας. Έχω ένα πρόβλημα με μία εργασία που έχω να κάνω στο πανεπιστήμιο.
Έχω να φτιάξω ένα σύστημα στο οποίο θα έχω 2 τύπους χρηστών τους μαθητές και τους καθηγητές. Θέλω να κάνω login στο σύστημα μου. Αλλά πρέπει να κάνω ένα μικρό ή και μεγάλο λάθος στον κώδικα μου. Αν μπορείτε βοηθήστε με.

Ο κώδικας της φόρμας μου:

Κώδικας: Επιλογή όλων

<table border="2" bgcolor="#DADADA" bordercolor="#114A99" align="center">

<tr>
	<td bgcolor="#949494">
		<b>Σύνδεση&#58;</b>&nbsp;
	</td>
</tr>
<tr>
	<td>
		<form action="login.php" method="POST" onsubmit="return validate&#40;&#41;;">
		Όνομα Χρήστη&#58;&nbsp;</br>
		<input type="text" name="username"></br>
		Κωδικός Πρόσβασης&#58;&nbsp;</br>
		<input type="password" name="password"></br>
		Σύνδεση ως&#58;&nbsp;</br>
		<center>
		<select name="type">
			<option value="teachers">Εκπαιδευτής</option>
			<option value="students">Εκπαιδευόμενος</option>
		</select><br>
		<input type="submit" name="Submit" value="Σύνδεση">
		</center></form>
	</td>
</tr>
</table>

Και του login.php

Κώδικας: Επιλογή όλων

<?php
session_start&#40;&#41;;

include&#40;"epInclude/config.inc.php"&#41;;

$con=mysql_connect&#40;"localhost","root",""&#41;
	or exit&#40;"Cannot connect to database"&#41;;

$tpl=new FastTemplate&#40;"./Templates"&#41;;
$tpl->define&#40;array&#40;"HOME_PAGE" => "HOME_PAGE.tpl"&#41;&#41;;
	
if &#40;isset&#40;$_POST&#91;'submit'&#93;&#41;&#41;
&#123;
	$sql = "SELECT * FROM students,teachers WHERE username='".$_POST&#91;'username'&#93;."' AND password='".$_POST&#91;'password'&#93;."'";
			
	$res=mysql_db_query&#40;"elearrning",$sql&#41;;
	
	$result=mysql_fetch_array&#40;$res&#41;;
	if &#40;mysql_num_rows&#40;$res&#41;==0&#41;
	&#123;
		header&#40;"Location&#58;".$DOCUMENT_ROOT."index.php"&#41;;
	&#125;
	else if &#40;mysql_num_rows&#40;$res&#41;==1&#41;
	&#123;
		if &#40;$result&#91;"type"&#93;=="students"&#41;
		&#123;
			$_SESSION&#91;"username"&#93;=$_POST&#91;"username"&#93;;
			$_SESSION&#91;"password"&#93;=$_POST&#91;"password"&#93;;
			$_SESSION&#91;"students"&#93;="true";
			$_SESSION&#91;"id"&#93;=$result&#91;"id"&#93;;
			
			$tpl->assign&#40;array&#40;"&#123;LOGIN&#125;"=>"student_menu.html",
							   "&#123;CONTENT&#125;"=>"student_main.html"&#41;&#41;;

		&#125;
if &#40;$result&#91;"type"&#93;=="teachers"&#41;
		&#123;
			$_SESSION&#91;"username"&#93;=$_POST&#91;"username"&#93;;
			$_SESSION&#91;"password"&#93;=$_POST&#91;"password"&#93;;
			$_SESSION&#91;"teachers"&#93;="true";
			$_SESSION&#91;"id"&#93;=$result&#91;"id"&#93;;
			
			$tpl->assign&#40;array&#40;"&#123;LOGIN&#125;"=>"teachers_menu.html",
							   "&#123;CONTENT&#125;"=>"teachers_main.html"&#41;&#41;;

		&#125;

		else 
		&#123;
			$tpl->assign&#40;array&#40;"&#123;LOGIN&#125;"=>"LOGIN.html",
			   "&#123;CONTENT&#125;"=>"error.html"&#41;&#41;;
		&#125;
	&#125;
&#125;

$tpl->assign&#40;"&#123;TITLE&#125;","e-Learning"&#41;; 
$tpl->parse&#40;"MAIN", "HOME_PAGE"&#41;;
$tpl->FastPrint&#40;&#41;;
?>


Αυτό που θέλω να κάνω? πολύ απλό πιστεύω για εσάς! Ο χρήστης να γράφει το username του και το password και πατώντας το κουμπί σύνδεση να γίνεται η αναζήτηση στην βάση και στον κατάλληλο πίνακα (ανάλογα μαθητής ή εκπαιδευτής) και να εμφανίζει μία άλλη σελίδα.την σελίδα του χρήστη που μόλις εισήλθε δηλαδή. Το σύστημα κατασκευάζεται με την τεχνολογία των Templates.οπότε κάνοντας login να του εμφανίζεται και η προσωπική σελίδα καλωσορίσματος το μενού με τις επιλογές πλοήγησής του στο σύστημα.

ο κώδικας του template είναι:

Κώδικας: Επιλογή όλων

<html>
<title>&#123;TITLE&#125;</title></head>

<FRAMESET rows="97,*">
	<frame name="LOGO" src="&#123;LOGO&#125;">
	<frameset cols="220,*" >
			<frame name="LOGIN" src="&#123;LOGIN&#125;">
		<frameset rows="*,17%">
			<frame name="CONTENT" src="&#123;CONTENT&#125;">
			<frame name="PICTURE" src="&#123;PICTURE&#125;">
		</frameset>
	</frameset>
</FRAMESET>

</html>
η κεντρική σελίδα είναι το content. εκεί θέλω να φορτώνω κάνοντας το login μια html σελίδα καλωσορίσματος του χρήστη. και στην θέση του {LOGIN} na βγαίνουν κάποιες επιλογές πλοήγησης πχ ένα μενού.



Οι γνώσεις μου σε php και mysql είναι πολύ βασικές. Είμαι τέταρτο έτος και παλεύω για πτυχίο τον Σεπτέμβρη! Αν χρειαστείτε να κάνω Post και κάποιο άλλο κομμάτι του κώδικα πείτε μου. Ο καθηγητής μας έχει δώσει κάποιες σημειώσεις και θέλει να το κάνουμε με τεχνολογία sessions.βρήκα πολλά ετοιματζίδικα αλλά θέλει με αυτόν τον τρόπο.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

login

Δημοσίευση από skeftomilos » 12 Ιαν 2006 00:26

Αυτή η γραμμή μου μοιάζει λάθος:

Κώδικας: Επιλογή όλων

$res=mysql_db_query&#40;"elearrning",$sql&#41;;
Γενικά δε βλέπω πουθενά να χρησιμοποιείται η μεταβλητή $con.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

eagleman
Δημοσιεύσεις: 30
Εγγραφή: 14 Δεκ 2005 19:32

login

Δημοσίευση από eagleman » 12 Ιαν 2006 13:46

elearning einai to onoma tis basis mou. ti lathos exeis diladi? exeis dikio gia tin con. apla tin brika stis simeiwseis toy kathigiti kai to ebala.. den kserw ti akribws kanei...

se exyaristw pou apantises amesws pantos.

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

login

Δημοσίευση από shadow » 12 Ιαν 2006 22:09

Η conn αναφέρεται στο link identifier κατα την σύνδεση με την βάση δεδομένων.
Κατά τα άλλα η σύνταξη της εντολής δεν είναι λάθος δεδομένου οτι το link identifier (το $conn στο συγκεκριμένο παράδειγμα) ειναι προαιρετικό όρισμα στην mysql_db_query.
Στον κωδικα σου ενα λαθακι (μαλλον περιττος κώδικας ) μπορω να δω. Στην αρχική σου φόρμα για ποιο λόγο δίνεις το select με το type(teacher or student) δεδομενου οτι μετα στο login.php τσεκαρεις εαν κάποιος ειναι καθηγητής ή μαθητής με βάση το username/password που έχει στειλει. Επίσης μήπως $_SESSION["students"] και το $_SESSION["teachers"] αναφέρεται σε boolean τιμη (true or false)? Γιατι εαν αναφερεται σε boolean δεν χρειάζεται να χρησιμοποιήσεις εισαγωγικά.

Βασικά εγώ θα σου πρότεινα την εξής δομή:

Κώδικας: Επιλογή όλων

login form
    |
    |
  submit &#40;username/password&#41;
    |
    |
  login.php
    |
    |_______authentication succsefull->create session ->redirect to index page
    |
    |_______authentication failed ->redirect to index page

index page &#40;opws kai se oles sou tis selides&#41;
    |
    |
   check if session exists
    |
    |
    |->session exists
    |         |
    |         |___check value of session&#91;'teachers'&#93;
    |						|___true&#58;kaneis print to template poy antistoixei stoys kathigites
    |						|___false
    |						        |
    |						        |__check value of session&#91;'students'&#93;
    |							           |___true&#58;kaneis print to template poy antistoixei stoys kathigites
    |							           |___false &#58;redirect to login form or to template pou antistoixei sto lathos
    |->no session
	     |
        |__redirect to login form
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

login

Δημοσίευση από skeftomilos » 13 Ιαν 2006 00:26

Nice ASCII Art! :)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
thoidis
Δημοσιεύσεις: 14
Εγγραφή: 19 Ιαν 2006 22:01
Τοποθεσία: ΔΡΑΜΑ

login

Δημοσίευση από thoidis » 19 Ιαν 2006 22:21

παρατήρησα ότι το όνομα του πίνακα είναι γραμμένο με δύο rr στη γραμμή
$res=mysql_db_query("elearrning",$sql);
μήπως είναι λάθος...

επίσης η εντολή sql που χρησιμοποιείς
$sql = "SELECT * FROM students,teachers WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'";

μου φαίνεται λάθος γιατί ζητάς στοιχεία από δύο πίνακες ταυτόχρονα!!!

είναι καλύτερα με μία if και με βάση τι διάλεξε στην επιλογή Εκπαιδευτής, Εκπαιδευόμενος να εκτελείς διαφορετική sql π.χ.
εάν είναι Εκπαιδευόμενος εκτελείς
$sql = "SELECT * FROM students WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'";
διαφορετικά
$sql = "SELECT * FROM teachers WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'";
:lol:

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

login

Δημοσίευση από Rapid-eraser » 19 Ιαν 2006 23:01

thoidis έγραψε:επίσης η εντολή sql που χρησιμοποιείς
$sql = "SELECT * FROM students,teachers WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'";

μου φαίνεται λάθος γιατί ζητάς στοιχεία από δύο πίνακες ταυτόχρονα!!!
dev eivai la8os ... eivai inner join eivai
apla lipei to conection part kai etsi 8a ferei
tis eggrafes kai apo tous dio pivakes.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

eagleman
Δημοσιεύσεις: 30
Εγγραφή: 14 Δεκ 2005 19:32

login

Δημοσίευση από eagleman » 24 Ιαν 2006 11:20

telika tin brika tin akri!!
dokimasa diafora kai ayta pou mou proteinate eseis kai ta katafera.

header("Location:".$DOCUMENT_ROOT."index.php");

edw eixa diaforetiko monopati sto config.inc.php kai den ginotan h syndesi. eixa kai alla 2-3 mikrolathakia alla twra mou paizei. sas eyxaristw olous osous apantisate kai mek ateythinate

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

login

Δημοσίευση από vcore » 10 Νοέμ 2006 21:02

Rapid-eraser έγραψε:
thoidis έγραψε:επίσης η εντολή sql που χρησιμοποιείς
$sql = "SELECT * FROM students,teachers WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'";

μου φαίνεται λάθος γιατί ζητάς στοιχεία από δύο πίνακες ταυτόχρονα!!!
dev eivai la8os ... eivai inner join eivai
apla lipei to conection part kai etsi 8a ferei
tis eggrafes kai apo tous dio pivakes.
Για την ιστορία μια φορά που το χρειάστηκα και δεν με βόλευε το όλο script υπάρχει και το UNION που σου επιτρέπει να βάλεις όσα SELECT θέλεις και να ρουφίξεις απο πολλούς πίνακες.

π.χ

$exist_check = mysql_query("SELECT * FROM sort_1 WHERE active=1 UNION SELECT * FROM sort_2 WHERE active=1 UNION SELECT * FROM sort_3 WHERE active=1 UNION SELECT * FROM sort_4 WHERE active=1 ORDER by weight limit $pageno, $entries_per_page",$db);

:kaloe:
εβίβα μας :pint:

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

login

Δημοσίευση από shadow » 10 Νοέμ 2006 21:16

union is baddddd...
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

login

Δημοσίευση από vcore » 10 Νοέμ 2006 21:49

Γιατί bad περικαλώ?

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

login

Δημοσίευση από shadow » 10 Νοέμ 2006 22:21

γιατι εκτελει ουσιαστικά ενα select distinct το οποίο πρακτικά σημαίνει ότι κοιτας για διπλοεγγραφές και επιστρέφει distinct records.
Αυτή η διαδικασια ομως δεν ειναι τσαμπα με αποτελεσμα να επιβαρύνεις τα queries σου..Θελει πολύ προσοχή η union και κατα τη γνωμη μου πρεπει να χρησιμοποιείται μονο οταν δεν υπαρχει αλλη λύση για το εκάστοτε πρόβλημα που θες να λύσεις (εαν ειμαστε σίγουροι οτι δεν υπαρχουν duplicate records ειναι προτιμότερη η union all).
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
vcore
Δημοσιεύσεις: 354
Εγγραφή: 20 Δεκ 2003 01:19
Τοποθεσία: Crete
Επικοινωνία:

login

Δημοσίευση από vcore » 11 Νοέμ 2006 11:08

Well δεν έχει και άδικο αλλά όταν είναι το script σε σημείο που δεν γίνεται αλλιώς διότι έχει μελετηθεί αλλίως το όλο σκηνικό τότε no other way :)

cheers
Easy CMS
------------
Το να ζητάς βοήθεια δεν σημαίνει ότι είσαι εξαρτημένος.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης