login σε forum

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

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

Απάντηση
eleng
Δημοσιεύσεις: 2
Εγγραφή: 12 Ιουν 2010 18:12

login σε forum

Δημοσίευση από eleng » 12 Ιουν 2010 18:19

Παιδιά καλησπέρα, έχω φτιάξει κώδικες για login και logout καθώς και ένα forum.Το θέμα μου είναι ότι θέλω να έχουν πρόσβαση στο φορουμ μόνο τα μέλη. Πριν την αρχική σελίδα του φορουμ έχω βάλει μια άλλη σελίδα για login ή εγγραφή και κάποιος μπορεί να προχωρήσει μόνο αν κάνει login αλλά αν πχ βάλω κατ'ευθείαν στο λινκ του φόρουμ μπαίνει έχοντας παραλείψει τη διαδικασία του login...Πως μπορώ να το κάνω αυτό;;

Επίσης, για να εμφανίζεται το όνομα του συγγραφέα κάθε πόστ, θα πρέπει να χρησιμοποιείται μια μεταβλητή από άλλη σελίδα (τη σελίδα του login). Δηλαδή θέλω να περάσω τη μεταβλητή username που έχει μπει στην φόρμα που υπάρχει στη σελίδα login.php στον κώδικα της σελίδας index_forum.php ώστε να ταυτίζεται ο συγγραφέας με τον χρήστη που είναι συνδεδεμένος...

Όποιος μπορεί να βοηθήσει...
Ευχαριστώ πολύ....

Άβαταρ μέλους
dimitrisdamo
Δημοσιεύσεις: 78
Εγγραφή: 19 Νοέμ 2009 20:00
Επικοινωνία:

login σε forum

Δημοσίευση από dimitrisdamo » 12 Ιουν 2010 20:05

θα σου προτεινα η με cookies η με session's και σε καθε σελιδα να ελεγχεις αν υπαρχει το cookie η το session αν ναι μπορει να προχωρησει στην σελιδα που ζητησε ειδαλως θα τον κανει redirect στο login

eleng
Δημοσιεύσεις: 2
Εγγραφή: 12 Ιουν 2010 18:12

login σε forum

Δημοσίευση από eleng » 13 Ιουν 2010 17:32

thanx για την απάντηση!

Αυτό που έχω κάνει είναι εάν στο login είναι επιτυχές:

session_start();
session_register("authenticated");

Και στην αρχική του φόρουμ έχω βάλει:

if(session_register(authenticated)){

....... να εμφανίζεται η σελίδα του φορουμ.........

....................

}

Αλλά και πάλι μου βγάζει Cannot send session cache limiter - headers already sent

Τι να πώ,αν κάποιος έχει μια ιδέα ....

Επίσης, μια μεταβλητή από προγηούμενη σελίδα "κρατιέται" έτσι ώστε να μπορώ να τη χρησιμοποιήσω σε μια άλλη σελίδα του site μου;

Ευχαριστώ

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

login σε forum

Δημοσίευση από Apostolis_38 » 13 Ιουν 2010 19:36

Το headers already sent είναι κλασσικό μήνυμα λάθους που εμφανίζεται είτε γιατί υπάρχουν κενά πρίν το session_start είτε γιατί υπάρχει html.

Το session_start το βάζουμε πάντα μα πάντα πριν από οτιδήποτε στη σελίδα.

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

<?php session_start&#40;&#41;;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml">
<head> 
Ούτε κενά δεν πρέπει να έχει πρίν.

Επίσης μπορούμε να βάλουμε και ένα

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

ob_start&#40;&#41;;
αμέσως μετά για να προλάβουμε τυχόν προβλήματα με την html.
Στο τέλος της σελίδας βάζουμε το

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

</body>
</html>
<?php ob_flush&#40;&#41;;?>
Αυτό ισχύει και για τις σελίδες που κάνουμε include/require

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

login σε forum

Δημοσίευση από nbc » 13 Ιουν 2010 22:59

Δεν έχουν πρόβλημα τα κενά πριν το session_start(). Μπορείς να έχεις όσα κενά θέλεις. Για την ακρίβεια, μπορείς να έχεις και όσες σελίδες κώδικα θέλεις. Μπορείς να κάνεις include 3000 αρχεία και μετά να ρίξεις και ένα session_start().

Το πρόβλημα που πολύ ορθά αναφέρεις ως κλασσικό έχει να κάνει με τα headers. Η php, για να λειτουργήσει το session, πρέπει να στείλει ορισμένα και συγκεκριμένα headers στον browser. Ως γνωστόν, οι headers προηγούνται του content. Που σημαίνει, αν για οποιοδήποτε λόγο, η PHP αναγκαστεί να στείλει content, τότε δεν μπορεί πλέον να στείλει άλλον header.

Πότε η PHP στέλνει content?

- Σε php mode (δηλαδή μετά από <?php) μετά από echo, print, και γενικά οποιαδήποτε εντολή προκαλεί output. Άρα, μετά το <?php, και εφόσον δεν τυπώνεις κάτι, το session_start μπορεί να είναι οπουδήποτε.

- Σε html mode, δηλαδή πριν το <?php, οτιδήποτε.

Και εδώ έρχονται τα κενά που αναφέρεις. Οποιοσδήποτε χαρακτήρας πριν από το <?php, προκαλεί output. Πριν όχι μετά.

Οι πιο συνηθισμένες περιπτώσεις είναι 2:

1) Το αρχείο έχει σωθεί σε UTF-8 με BOM (πχ από Windows Notepad) - άρα υπάρχουν 3 χαρακτήρες πριν το <?php
2) Υπάρχει whitespace μετά το ?> (end tag) από προηγούμενο αρχείο. Γι αυτό και συνιστάται να μην κλείνουμε τα αρχεία με το end tag.

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

login σε forum

Δημοσίευση από Apostolis_38 » 14 Ιουν 2010 09:15

nbc έγραψε:1) Το αρχείο έχει σωθεί σε UTF-8 με BOM (πχ από Windows Notepad) - άρα υπάρχουν 3 χαρακτήρες πριν το <?php
Αυτό είναι το πρόβλημα, αν αφήσεις κενά δημιουργείς εσύ χαρακτήρες οι οποίοι προκαλούν δυσλειτουργεία στο session.
Γιατί φυσικά κενά δημιουργούνται από το spacebar, το enter ή με άλλο τρόπο. Η σελίδα από μόνη της δεν έχει κενά. Αρα ουσιαστικά μιλάμε για χαρακτήρες.

Εκτός κι αν είχα πέσει εγώ σε μυστήριες περιπτώσεις.
Αλλά μέχρι να το καταλάβω μου είχε τύχει αρκετές φορές για να είναι σύμπτωση.

Άβαταρ μέλους
dimitrisdamo
Δημοσιεύσεις: 78
Εγγραφή: 19 Νοέμ 2009 20:00
Επικοινωνία:

login σε forum

Δημοσίευση από dimitrisdamo » 15 Ιουν 2010 15:38

Θα προτεινα δεν ξερω αν συμφωνειτε να παρει τον κωδικα του copy paste στο
Notepad++ εγω προσωπικα αυτο χρησιμοποιω και να αποθηκευσει το εγγραφο χωρις BOM .
Διορθωστε με αν ειμαι καπου λαθος
:pint: :pint:

Απάντηση

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

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

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