php login

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

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

Απάντηση
decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 29 Ιουν 2010 15:23

Παιδιά έχω φτίξει ένα login που δέχεται μόνο ένα είδος χρήστη.
Θα ήθελα να το μετατρέψω ώστε να δέχεται δύο είδη χρηστών. Administrator και user.
προς το παρόν έχω το table mysql με id, name, surname, password φαντάζομαι θα χρειαστεί κι ένα column role ή κάτι τέτοιο. Ο κώδικας php για login είναι
<?php
include_once("settings.inc.php");
include_once("functions.inc.php");
$password = MD5($_GET['userPassword']); // md5()
$query = "SELECT * FROM admin WHERE username = '" . $_GET['userName'] . "' AND password = '$password'";
$result = @mysql_query($query);
if($result){
if(mysql_num_rows($result) == 1) {
echo "status=ok";
}
else{
fail("The user name and password could not be validated.");
}
}else{
fail("There was an error getting information on the admin.", mysql_error());
}
?>
αν μπορεί κάποιος να πει κάτι θα με βοηθούσε πολύ! Ευχαριστώ!

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

php login

Δημοσίευση από Apostolis_38 » 29 Ιουν 2010 20:38

Το αν θα χρειαστείς κι άλλο column ή όχι εξαρτάται από το τι θα κάνεις μετά.

Αν περιοριστείς σε ένα

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

if&#40;$row&#91;"id"&#93; == "1"&#41; &#123; κάνε αυτό &#125; else &#123; κάνε εκείνο &#125;
τότε μπορείς να χρησιμοποιήσεις το id του χρήστη. Είναι αρκετό να δώσεις ένα συγκεκριμένο id στον admin και όλα τα άλλα στους users.

Αν κάνεις πολύπλοκους υπολογισμούς με if και elseif, με διαφορετικούς ρόλους ανά γκρούπ χρηστών, διαφορετικό interface κ.λ.π. κ.λ.π, ίσως να σε βόλευε κάποιο έξτρα πεδίο.
Και πάλι ίσως να είναι πλεονασμός.

Θα πρέπει να σκεφτείς πρώτα τι ακριβώς θέλεις να κάνεις για να δεις πως σε συμφέρει να το υλοποιήσεις .



edit: Λάθος μου.
βάλε LIKE αντί για = στο query
επίσης καλύτερα να το κάνεις ως εξής:

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

$username = md5&#40;$_GET&#91;"username"&#93;&#41;;
$password = md5 &#40;$_GET&#91;"password"&#93;&#41;;

και

SELECT * FROM admin WHERE username LIKE '%".$username."%' AND password LIKE '%".$password."%' 
όπου μπορείς να βάλεις και διάφορους τρόπους φιλτραρίσματος των data
Τελευταία επεξεργασία από το μέλος Apostolis_38 την 29 Ιουν 2010 20:48, έχει επεξεργασθεί 4 φορές συνολικά.

decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 29 Ιουν 2010 20:41

δύο είδη χρηστών έχω! Καθηγητές που είναι administrators και έχουν προσβαση σε ένα application και μαθητές που είναι απλοί χρήστες και έχουν πρόσβαση σε διαφορετικό application.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

php login

Δημοσίευση από Apostolis_38 » 29 Ιουν 2010 20:59

Λοιπόν, σόρρυ για το μπέρδεμα, ανωτέρα βία...
Πάμε πάλι.

- Κάνε αυτό που σου είπα με το like.
Πρόσεξε μόνο τα πεδία της βάσης με τα πεδία στο query να συμφωνούν.
π.χ. name,surname με username.

- Αν οι χρήστες σου είναι σταθεροί και λίγοι μπορείς να ορίσει τα id τους στα if,elseif και να ξεμπερδεύεις.
Αν οι χρήστες είναι πολλοί ή πρόκειται να αυξηθούν προσθέτοντας κάποια στιγμή κι άλλους τότε πρέπει να βάλεις ένα πεδίο ακόμα (π.χ. usrgrp) όπου θα ορίζεις 1=admins, 2=users και τότε θα πράτεις αναλόγως

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

if usrgrp == "1" αυτό, else εκείνο
για ευκολία μπορείς να κάνεις το πεδίο αυτό enum (1,2) με default τιμή την πιό συχνά χρησιμοποιούμενη.

decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 29 Ιουν 2010 21:03

Ξέρω ότι πρέπει να γίνει με ένα if αλλά δεν ξέρω που ακριβώς να το βάλω. Πρωτα κάνω το query που έχω ήδη σωστά? αλλά μετά τι? Ευχαριστώ για την απάντηση! Επίσης οι χρήστες όπως και οι administrators θα αυξάνονται!

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

php login

Δημοσίευση από Apostolis_38 » 29 Ιουν 2010 21:12

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

if&#40;mysql_num_rows&#40;$result&#41; > 0 &#41; &#123;
ΕΔΩ ΜΕΣΑ ΚΑΝΕΙΣ ΟΛΕΣ ΤΙΣ ΔΙΕΡΓΑΣΙΕΣ ΠΟΥ ΘΕΛΕΙΣ ΝΑ ΚΑΝΕΙΣ ΕΦΟΣΟΝ Ο ΧΡΗΣΤΗΣ ΕΙΝΑΙ ΕΓΚΥΡΟΣ ΚΑΙ ΕΧΕΙ ΣΥΝΔΕΘΕΙ
&#125;
else&#123;
fail&#40;"The user name and password could not be validated."&#41;;
&#125;

decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 29 Ιουν 2010 21:14

το δοκιμάζω κι επανέρχομαι! ευχαριστώ πολύ

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

php login

Δημοσίευση από Apostolis_38 » 29 Ιουν 2010 21:20

Επίσης.
Η σωστή (κατά τη δική μου άποψη) τακτική είναι:

Κάνεις το query που είπαμε, ξεκινάς session με το usrgrp, "δίνεις κλίκ" στον χρήστη και τον πας σε άλλη σελίδα, τσεκάρεις το session και κάνεις ότι είναι να κάνεις.

Εχε υπόψην οτι ίσως χρειαστεί να δώσεις ένα

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

while &#40;$row =mysql_fetch_array&#40;$result&#41;&#41;
μετά το if

Ολα είναι θέμα πως θα το υλοποιήσεις.

decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 30 Ιουν 2010 16:11

<?php
include_once("settings.inc.php");
include_once("functions.inc.php");
$password = MD5($_GET['userPassword']); // md5()
$query = "SELECT * FROM admin WHERE username = '" . $_GET['userName'] . "' AND password = '$password'";
$result = @mysql_query($query);
if($result){
// if(mysql_num_rows($result) == 1) {
if(mysql_num_rows($result) > 0 ) {
if (usrgrp == 1){
echo "status=admin";
}
else {
echo "status=user";
}
}
else{
fail("The user name and password could not be validated.");
}
}else{
fail("There was an error getting information on the admin.", mysql_error());
}
?>
Αυτό δε δουλεύει. Βλέπεις κάποιο λάθος?

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

php login

Δημοσίευση από Apostolis_38 » 30 Ιουν 2010 17:00

Βασικά το

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

'$password'
πρέπει να γίνει κι αυτό

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

'.$password.'
Πέρα απ' αυτό, δεν ξέρω αν είναι ακριβώς λάθος αλλά και σε μένα σε αντίστοιχες περιπτώσεις το = αντί του like μου δημιουργούσε προβλήματα.
Kι εγώ έχω αντιμετωπίσει αυτό το πρόβλημα και δεν κατάφερα να το λύσω με το =
Ετσι χρησιμοποιώ το like

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

SELECT * FROM admin WHERE username LIKE '%" . $_GET&#91;'userName'&#93; . "%' AND password LIKE '%".$password."%' ";
Εχω βγάλει ένα συμπέρασμα γιατί μπορεί να συμβαίνει αυτό αλλά μπορεί να λέω και μπούρδες οπότε άστο.

Συν το γεγονός οτι το MD5 (όπως και οι άλλοι τρόποι κρυπτογράφησης) παράγει μοναδικά strings δεν υπάρχει περίπτωση να μπερδέψεις τους χρήστες και να διαλέξεις άλλα αντί άλλων.
Οπότε χρησιμοποίησε την LIKE να δούμε.
Για αρχή βγάλε το username από το query και δοκίμασε μόνο με το password για να δούμε οτι όντως παίζει.
Επίσης σιγουρέψου οτι το password είναι και στη βάση ως password κι όχι ως pass ή passwor ή οτιδήποτε άλλο.

decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 30 Ιουν 2010 17:07

Λοιπόν δε φταίει αυτό διότι δούλευε κανονικά πριν βάλω το usrgrp!
Τώρα έχω κάνει το εξής:
if($result){
// if(mysql_num_rows($result) == 1) {
if((mysql_num_rows($result) == 1) and ("SELECT usrgrp FROM admin WHERE usrgrp = 1")){
echo "status=ok";
}
else if((mysql_num_rows($result) ==1 ) and("SELECT usrgrp FROM admin WHERE usrgrp = 2")){
echo "status=user";
}
else{
fail("The user name and password could not be validated.");
}
}else{
fail("There was an error getting information on the admin.", mysql_error());
}
Αυτό που παίρνω σαν αποτέλεσμα είναι ότι είτε κάνει πάντα status=ok .
Μπερδεύομαι λίγο γιατί το application που ακούει το status είναι το flash όπυ εκεί λέω αν το status είναι οκ κάνε αυτό αλλίως αν το status είναι user κάνε το άλλο αλλιώς βγάλε ότι έχουν βάλει λάθος στοιχεία.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

php login

Δημοσίευση από Apostolis_38 » 30 Ιουν 2010 17:21

Κάτσε γιατί με μπέρδεψες.

Το login δουλεύει κανονικά;
αν και με παραξενεύει ok.

Μετά θα κάνεις

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

if&#40;mysql_num_rows&#40;$result&#41; > 0 &#41; &#123;
  while&#40;$row=mysql_fetch_assoc&#40;$result&#41;  &#123;
  $usrgrp = $row&#91;"usrgrp"&#93;;

  if &#40;usrgrp == "1"&#41;&#123;
   echo "status=admin";
  &#125;
  else &#123;
   echo "status=user";
  &#125;

  &#125;
&#125;
else &#123;
echo "Αποτυχία";
&#125;
edit: στο άλλαξα λίγο, για κοίτα τώρα.

decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 30 Ιουν 2010 17:29

βασικά νομίζω ότι ακούει μόνο status=ok δηλαδη αν βάλω status=admin στον κώδικα που σου έδωσα πάνω δεν δουλεύει! Δεν καταλαβαίνω τι γίνεται! Φίλε μου σε ευχαριστώ πολύ για το ενδιαφέρον αλλά καθώς φαίνεται δεν μπορώ να βγάλω άκρη! Είνια και το καταραμένο flash ενδιάμεσα που τα χαλάει!

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

php login

Δημοσίευση από fafos » 30 Ιουν 2010 17:29

na kano mia xazh erothsh? to pedio usrgrp yparxei sthn vash?

decpariem
Δημοσιεύσεις: 15
Εγγραφή: 04 Μάιος 2010 18:11

php login

Δημοσίευση από decpariem » 30 Ιουν 2010 17:30

φυσικά!

Απάντηση

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

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

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