Προς το περιεχόμενο

έλεγχος στο login!!! [php]


hackertom

Προτεινόμενες αναρτήσεις

Δημοσ.

Παιδιά καλησπέρα... θέλω να κάνω έναν έλεγχο στο login του site μου!!!

 

θέλω στο login: να μην είναι μικρότερο από 4 χαρακτήρες - αν βάλει κάποιος να πετάει μήνυμα να βάλει πάνω απο 4!!!

 

και στο e-mail που θα πληκτρολογώ να έχει προεπιλεγμένο στοιχειό το "@" αυτό πώς το κάνω ???

Δημοσ.

α) Ελέγχεις μέσω JavaScript πόσους χαρακτήρες έχει το username και εαν οι χαρακτήρες είναι παραπάνω από Χ τότε εμφανίζεις το κουμπί «login/register/οτι θες»

β) Εφόσον πατηθεί το submit button της φόρμας σου, ελέγχεις πάλι μέσω JavaScript αν ικανοποιούνται όλες οι συνθήκες που σε ενδιαφέρουν. Αν όχι κάνεις ένα return false ώστε να μην μπορεί να συνεχίσει ο χρήστης

γ) Κάνεις submit την φορμα σου και ελέγχεις όλες τις μεταβλητές που θέλεις μέσω PHP. Αν όλα είναι εντάξει, συνεχίζεις. Αν όχι κάνεις redirect στην login σελίδα και εμφανίζεις ότι μήνυμα θέλεις

Δημοσ.

Θεωρώ ότι έχεις 4 inputs, ένα με name='username', ένα με name='password', ένα με name='email_name' και ένα με name='email_domain'.

 

>
<?php
 $username = mysql_real_escape_string($_POST['username']);
 $password = mysql_real_escape_string($_POST['password']);
 $email = mysql_real_escape_string($_POST['email_name'])."@".mysql_real_escape_string($_POST['email_domain']);

 if (strlen($username) < 4) {
    header("Location:<εδώ/το/path/της/φόρμας.php?error=username");
    exit;
 }
 // εδώ ο κώδικας αν είναι επιτυχής η σύνδεση
?>

 

Σημείωση: Για να είναι προεπιλεγμένο το παπάκι, έχω υποθέσει ότι έχεις βάλει 2 input για το mail, και έχεις δώσει hardcoded το παπάκι. Καλύτερη λύση θα ήταν να αφήνεις τον χρήστη να πληκτρολογεί το mail του as-is μαζί με το παπάκι, και μετά να ελέγχεις με χρήση της strstr():

 

>
<?php
 $username = mysql_real_escape_string($_POST['username']);
 $password = mysql_real_escape_string($_POST['password']);
 $email = mysql_real_escape_string($_POST['email']);

 if (strlen($username) < 4) {
    header("Location:<εδώ/το/path/της/φόρμας.php?error=username");
    exit;
 }
 if (!strstr($email, '@') {
    header("Location:<εδώ/το/path/της/φόρμας.php?error=email");
    exit;
 }
 // εδώ ο κώδικας αν είναι επιτυχής η σύνδεση
?>

 

Σημείωση 2: Θα πρέπει στην σελίδα της φόρμας σου να βάλεις και αυτόν τον κώδικα που θα διαβάζει την περίπτωση σφάλματος:

>
<?php
 if (isset($_GET['error']) && $_GET['error'] == 'username'){
    print "<div class='error'>Το όνομα χρήστη πρέπει να είναι μεγαλύτερο από 4 χαρακτήρες.</div>";
 }
 if (isset($_GET['error']) && $_GET['error'] == 'email'){
    print "<div class='error'>Το email που δώσατε δεν είναι έγκυρο.</div>";
 }
?>

 

Σημείωση 3: Έχε υπ' όψιν ότι οι έλεγχοι που κάνεις είναι ελλειπείς. Για παράδειγμα, θα πρέπει να περιορίσεις τα επιτρεπόμενα email με χρήση κάποιου regular expression κλπ. Περισσότερες πληροφορίες εδώ, εδώ και εδώ.

Δημοσ.

 

>
 if (!strstr($email, '@') {
    header("Location:<εδώ/το/path/της/φόρμας.php?error=email");
    exit;
 }

 

Για τον έλεγχο των παραμέτρων που περνάς με GET ή POST μπορείς να χρησιμποιήσεις και τα έτοιμα φίλτρα της PHP για INPUT.

π.χ. για το email :

>
 if (filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL) {
    header("Location:<εδώ/το/path/της/φόρμας.php?error=email");
 }

Το exit; δε χρειάζεται εφόσον κάνει redirect με το header.

 

Πληροφορίες για τα φίλτρα που μπορείς να χρησιμοποιήσεις έχει εδώ http://docs.php.net/manual/en/book.filter.php

Δημοσ.

το

>if (strlen($login) < 4) {

δούλεψε κανονικά που είναι ο έλεγχος των χαρακτήρων !!!

το

>if (!strstr($email, '@') {

δεν ξέρω γιατί αλλά δεν μου δουλεύει... :blink:

εδώ είναι τμήμα από τον κώδικά μου μέσα στο πλαίσιο θέλω απλά να έχει το "@"

></td></tr>
<tr><td>Επιθυμιτό E-MAIL:</td><td>
<input type="email" name="email" maxlength="15">
</td></tr>

mailzw.png

Δημοσ.

Όπως είπε και ο Thanocaster θα πρέπει να βάλεις 2 input

 

>
</td></tr>
<tr><td>Επιθυμητό E-MAIL:</td><td>
<input type="email_name" name="email_name" maxlength="15">@<input type="email_domain" name="email_domain" maxlength="15">
</td></tr>

 

και στο κομμάτι του ελέγχου να τα ενώσεις πριν κάνεις τον έλεγχο.

 

>
$email = trim($_POST['email_name']) . '@' . trim($_POST['email_domain']);
if (!strstr($email, '@') {
    header("Location:<εδώ/το/path/της/φόρμας.php?error=email");
}

 

με τη trim βγάζεις τα κενά από τις άκρες του string.

Δημοσ.

Όπως είπε και ο Thanocaster θα πρέπει να βάλεις 2 input

 

>
</td></tr>
<tr><td>Επιθυμητό E-MAIL:</td><td>
<input type="email_name" name="email_name" maxlength="15">@<input type="email_domain" name="email_domain" maxlength="15">
</td></tr>

 

και στο κομμάτι του ελέγχου να τα ενώσεις πριν κάνεις τον έλεγχο.

 

>
$email = trim($_POST['email_name']) . '@' . trim($_POST['email_domain']);
if (!strstr($email, '@') {
    header("Location:<εδώ/το/path/της/φόρμας.php?error=email");
}

 

με τη trim βγάζεις τα κενά από τις άκρες του string.

 

 

sorry κιόλας ρε παιδιά αλλά αυτό που κάνει στην ουσία αυτό είναι να "κόβει" το μαιλ στα δύο και απλά το @ θα μπαίνει αυτόματα?

και αν κάποιος χρήστης βάλει @ από μόνος του δηλαδή 2 @ τότε τι γίνεται..? ή δέν κατάλαβα εγώ καλά τη κάνει ο κώδικας ακόμα..... :unsure:

Δημοσ.

sorry κιόλας ρε παιδιά αλλά αυτό που κάνει στην ουσία αυτό είναι να "κόβει" το μαιλ στα δύο και απλά το @ θα μπαίνει αυτόματα?

και αν κάποιος χρήστης βάλει @ από μόνος του δηλαδή 2 @ τότε τι γίνεται..? ή δέν κατάλαβα εγώ καλά τη κάνει ο κώδικας ακόμα..... :unsure:

 

Σωστά κατάλαβες. Αυτό κάνει.

Σαν ιδέα δεν είναι καθόλου σωστή, αλλά αφού αυτό σου αρέσει... :P

 

Το σωστό είναι να έχει ένα πεδίο για το email και στον έλεγχο να χρησιμοποιήσει είτε τη filter_input, ή ακόμα καλύτερα κάποιο regular expression για ποιό σωστή πιστοποίηση του email.

Δημοσ.

@hackertom: Εσύ ζήτησες να έχεις προεπιλεγμένο το παπάκι και ο χρήστης να βάζει το όνομα του λογαριασμού του και το domain (αυτό κατάλαβα από το πρώτο μήνυμά σου).

 

Από εκεί και πέρα σου λέω στη 3η σημείωση πως ο καλύτερος τρόπος είναι να έχεις ένα πεδίο για το μέιλ και να κάνεις χρήση των regular expresssions για τον έλεγχο.

 

Όσον αφορά στην strstr(), φυσικά και δεν δούλεψε, αφού έγραψα ό,τι νά 'ναι... Αντί για την strstr (που κόβει το string στον χαρακτήρα που του δίνεις σαν δεύτερο όρισμα), χρησιμοποίησε την strpos(). :rolleyes:

 

@kostasxx: Δεν μου αρέσει καθόλου η ιδέα του "σπασμένου" mail address, γι αυτό πρότεινα τη χρήση των regex. Καλό θα είναι πριν ειρωνευτείς κάποιον που έγραφε ένα ποστ αναλυτικότατο προσφέροντας έτοιμες λύσεις και παραθέσεις σε πολλές άλλες πληροφορίες να διαβάζεις καλά τί έχει γράψει. <_<

Δημοσ.

mail1l.png

 

ανεβάζω ακόμη μια φώτο για να καταλάβετε τη θέλω... πριν πατήσει κάποιος κάτι το "@" θα βρίσκετε στην περιοχή του mail ήδη σαν προεπιλογή από το σύστημα

τώρα αν ο χρήστης το διαγράψει και κάνει υποβολή χωρίς να έχει πατήσει "@" πουθενά να του πετάει μήνυμα πρέπει να βάλεις "@"

 

αυτό θέλω παίδες μου αλλά δεν βρίσκω λύση έκανα το παρακάτω :

 

><textarea>@</textarea> 

 

αλλά δεν μπορώ να τραβήξω την τιμή από εκεί και να την αποθηκεύσω στην βάση του xampp ...

Δημοσ.

><input name="email" type="text" value="@" maxlength="15" >

 

τελικά με λίγη προσπάθεια όλα γίνονται τώρα μου μένει μόνο ο έλεγχος .... B)

Δημοσ.

 

@kostasxx: Δεν μου αρέσει καθόλου η ιδέα του "σπασμένου" mail address, γι αυτό πρότεινα τη χρήση των regex. Καλό θα είναι πριν ειρωνευτείς κάποιον που έγραφε ένα ποστ αναλυτικότατο προσφέροντας έτοιμες λύσεις και παραθέσεις σε πολλές άλλες πληροφορίες να διαβάζεις καλά τί έχει γράψει. <_<

 

Κατ' αρχήν δεν ειρωνεύτηκα κανέναν (τυπογραφικό λάθος ήταν). Διάβασε ξανά το post.

 

Έπειτα (επειδή διάβασα το post σου), μάλλον δε κατάλαβες οτι συμφωνώ με τη πρόταση σου. Γι' αυτό και του προτείνω στην ουσία ότι του είπες κ εσυ. Αφού δε θέλει να χρησιμοποιήσει javascript στο Input.

 

Ελπίζω να λύθηκε η παρεξήγηση. :)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...