[php] εμφανιση συνενδεμενου username με sessions

...IDE, compilers, κλπ

Συντονιστής: konnn

[php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό koslibpro » 16 Ιουν 2012, 17:44

Καλησπερα και παλι φιλοι μου,

εχω φτιαξει μια πλατφορμα register-login με php.
και θελω οταν συνδεεται ενας χρηστης,κανοντας επιτυχημενα Log in,να τον ανακατευθυνει σε ενα Index.php αρχειο στο οποιο θα γραφει κατι σαν "welcome user <to_username_tou>" Και να εχει και την επιλογη του Log out. Αυτο θα γινει με χρηση sessions.οποτε εγω το επιχειρω με τον εξης τροπο:

index.php
Κώδικας: Επιλογή όλων
<?php
session_start();
?>
<html>
<head>
</head>

<body>
<?php
if(!session_is_registered("username")){?>
<form action="login.php" method="post">
<b style="font-size:150%;">Log in</b><br/>
Username: <input type="text" name="username"/><br/>
Password: <input type="password" name="password"/><br/>
<input type="submit" value="Log in"/>
</form>
Don`t have an account?
<form action="register.php" method="post"><br/>
<b style="font-size:150%;">Register</b><br/>
Username: <input type="text" name="username"/><br/>
Password: <input type="password" name="password"/><br/>
Retype password: <input type="password" name="retype-password"/><br />
E-mail: <input type="email" name="email"/><br />
<input type="submit" value="Register" />
</form>
<?php }
else{
echo 'Welcome user ' . $_SESSION["username"] . '<br/><a href="logout.php">Log off</a>';
include ("upload.php");

}?>
<?php include ("system/footer.php"); ?>
</body>
</html>



login.php
Κώδικας: Επιλογή όλων
<?php
session_start();
mysql_connect('localhost', 'root', 'password')
or die ("Error establishing database connection".mysql_error());
mysql_select_db('dbname')
or die ("Error establishing a database connection ".mysql_error());
$pass = hash("sha256", $_POST['password']);
$query = sprintf("SELECT * FROM users WHERE username='%s' and  password='%s'", mysql_real_escape_string($user),  mysql_real_escape_string($pass));
$result = mysql_query($query) ;
if($result){
session_register("username");
header("location:index.php");
}
else {
echo 'Wrong username or password!';
}
?>


θεωρω πως το εχω σωστο.γιατι ομως δεν το εμφανιζει το username?

ευχαριστω εκ των προτερων για οποιαδηποτε βοηθεια!
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό parenthesis » 16 Ιουν 2012, 18:44

Σύμφωνα με αυτό, καλό θα ήταν να αποφύγεις τη χρήση του session_register.
Αντί γι' αυτό, μπορείς απλά να γράψεις :
Κώδικας: Επιλογή όλων
$_SESSION[ 'username' ] = $username;


Δοκίμασε το παρακάτω login.php :
Κώδικας: Επιλογή όλων
<?php
   session_start();
   mysql_connect('localhost', 'root', 'password')
   or die ("Error establishing database connection".mysql_error());
   mysql_select_db('dbname')
   or die ("Error establishing a database connection ".mysql_error());
   
   $password = $_POST[ "password" ];
   $username = $_POST[ "username" ];
   $query = sprintf('SELECT * FROM users WHERE username = "' . $username . '" AND password = "' . $password . '"');
   $result = mysql_query($query) ;

   if ( mysql_num_rows( $result ) == 1 ) {
        $_SESSION[ "username" ] = $username;
        header( 'Location: index.php' );
    } else {
        echo 'Wrong username or password!';
   }
?>
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό koslibpro » 16 Ιουν 2012, 19:10

το δοκιμασα αυτο που μου προτινες φιλε μου,ομως δεν λειτουργει σωστα.καθως καθε φορα μου βγαζει οτι δινω λαθος στοιχεια!και νομιζω πως κατι δεν παει καλα με την sha256 encryption που εχω βαλει..αλλα οπως και αν αλλαξω τον κωδικα σου,το ιδιο σφαλμα μου βγαζει...
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό parenthesis » 16 Ιουν 2012, 19:33

Έχεις γεμίσει σίγουρα τον πίνακα users με κάποιο (username, password) και τα δίνεις σωστά;
Γιατί εγώ που το δοκίμασα, μια χαρά τρέχει... :problem:
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό koslibpro » 16 Ιουν 2012, 19:35

στειλε μια και το register και το Login αρχειο..γιατι εχω γεμισει τον πινακα με καποια στοιχεια...αλλα δεν....
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό parenthesis » 16 Ιουν 2012, 20:13

index.php
Κώδικας: Επιλογή όλων
<?php
    session_start();
?>
<html>
<head></head>

<body>
   <?php
      if(!isset($_SESSION[ "username" ])){?>
         <form action="login.php" method="post">
         <b style="font-size:150%;">Log in</b><br/>
         Username: <input type="text" name="username"/><br/>
         Password: <input type="password" name="password"/><br/>
         <input type="submit" value="Log in"/>
         </form>
         Don`t have an account?
         <form action="register.php" method="post"><br/>
         <b style="font-size:150%;">Register</b><br/>
         Username: <input type="text" name="username"/><br/>
         Password: <input type="password" name="password"/><br/>
         Retype password: <input type="password" name="retype-password"/><br />
         E-mail: <input type="email" name="email"/><br />
         <input type="submit" value="Register" />
         </form>
      <?php }
      else{
         echo 'Welcome user ' . $_SESSION["username"] . '<br/><a href="logout.php">Log off</a>';
      include ("upload.php");
   }?>
</body>
</html>



register.php
Κώδικας: Επιλογή όλων
<?php
    session_start();

   mysql_connect('localhost', 'root', 'password')
   or die ("Error establishing database connection".mysql_error());
   mysql_select_db('dbname')
   or die ("Error establishing a database connection ".mysql_error());
   
    if ( (isset( $_POST[ 'username' ] )) && (isset( $_POST[ 'password' ] )) && ($_POST[ 'username' ] != null) && ($_POST[ 'password' ] != null) ) {
        $username = $_POST[ 'username' ];
        $password = $_POST[ 'password' ];
        // check if username exists
        $res = mysql_query(
            'SELECT
                username
            FROM
                users
            WHERE
                username = "' . $username . '";'
        );
        if ( mysql_num_rows( $res ) == 0 ) {
            mysql_query(
                'INSERT INTO
                    users
                SET
                    username = "' . $username . '",
                    password = "' . $password . '";'
            );
           
            $_SESSION[ 'username' ] = $username;
            header( 'Location: index.php' );
        }
        else {
            echo ( 'Error encountered during registration.' );
        }
    }
    else {
        echo( 'Please provide both a username and a password.' );
    }
?>


logout.php
Κώδικας: Επιλογή όλων
<?php
    session_start();
     
    unset( $_SESSION[ "username" ] ) ;
    header( 'Location: index.php' );
?>
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό koslibpro » 16 Ιουν 2012, 20:24

Οντως,ετσι τρεχουν και σε εμενα μια χαρα.απλα μας ξεφυγε μαλλον το encryption,γιαυτο δημιουργηθηκε θεμα πριν..
Οποτε,απλα βαζω και το sha256 encryption και ειναι λειτουργικοτατο!
Σε ευχαριστω παρα πολυ φιλε μου!

υγ:αν προκυψει τιποτα,θα ξανα-ποσταρω
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό koslibpro » 17 Ιουν 2012, 01:21

αλλαξα λιγο το register.php αρχειο για να ταιριαζει στις αναγκες μου(δηλ. να εχει sha256 encryption το password και να εισαγεται και το e-mail),oποτε ειναι αυτος ο κωδικας μου πια:
Κώδικας: Επιλογή όλων
<?php
        session_start();

       mysql_connect('localhost', 'root', 'password')
       or die ("Error establishing database connection".mysql_error());
       mysql_select_db('dbname')
       or die ("Error establishing a database connection ".mysql_error());
       
        if ( (isset( $_POST[ 'username' ] )) && (isset( $_POST[ 'password' ] )) && ($_POST[ 'username' ] != null) && ($_POST[ 'password' ] != null) ) {
            $username = $_POST[ 'username' ];
            $password = $_POST[ 'password' ];
            $email = $_POST[ 'email' ];
            $password = hash("sha256",$password);
            // check if username exists
            $res = mysql_query('SELECT username FROM users WHERE username = "' . $username . '";');
            if ( mysql_num_rows( $res ) == 0 ) {
                mysql_query('INSERT INTO users SET username = "' . $username . '", password = "' . $password . '", email = "' . $email . '";');
               
                $_SESSION[ 'username' ] = $username;
                header( 'Location: index.php' );
            }
            else {
                echo ( 'Error encountered during registration.' );
            }
        }
        else {
            echo( 'Please provide both a username and a password.' );
        }
    ?>

όμως,καθε φορα που προσπαθω να κανω ενα registration,μου πεταει το σφαλμα που λεει "Error encountered during registration."

τι φταιει αυτη την φορα....?
Spoiler: show
1 Γνώσεις → Linux: Χαμηλό>Μεσαίο┃ Προγραμματισμός: PHP,C ┃ Αγγλικά: Proficiency
2 Λειτουργικό → Ubuntu 13.04 precise 32-bit (en_US.UTF-8)
3 Προδιαγραφές → CPU: i3-2310M 2.1Ghz ‖ RAM 4Gb
4 Κάρτες γραφικών: NVidia GeForce GT 540M 1Gb

Personal blog - website
Άβαταρ μέλους
koslibpro
dudeTUX
dudeTUX
 
Δημοσιεύσεις: 356
Εγγραφή: 12 Μάιος 2011, 16:37
Τοποθεσία: Piraeus
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό parenthesis » 17 Ιουν 2012, 02:18

Ειλικρινά, δεν ξέρω. Εμένα μου πετάει αυτό το σφάλμα μόνο όταν επιχειρώ να κάνω registrate κάποιο χρήστη που ήδη υπάρχει (δηλ το username του υπάρχει στη βάση). Μήπως κάνεις το ίδιο;;
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Πολύ καλό
2 Dual boot:
  • Ubuntu 13.04 raring 3.8.0-34-generic 64bit (el_GR.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic
  • Fedora 19 Schrödinger’s Cat 3.13.5-101.fc19.x86_64 64bit (el_GR.utf8, gnome)
3 Intel Core i5-3337U CPU @ 1.80GHz ‖ RAM 3844 MiB ‖ TOSHIBA VCUAA - TOSHIBA SATELLITE U940
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 eth0: Realtek RTL8101E/RTL8102E Ethernet [10ec:8136] (rev 05) ⋮ wlan0: Intel Centrino Wireless-N 2230 [8086:0887] (rev c4)
Άβαταρ μέλους
parenthesis
punkTUX
punkTUX
 
Δημοσιεύσεις: 150
Εγγραφή: 06 Οκτ 2009, 22:47
Launchpad: mara_sdr
Εκτύπωση

Re: [php] εμφανιση συνενδεμενου username με sessions

Δημοσίευσηαπό medigeek » 17 Ιουν 2012, 08:49

koslibpro έγραψε:[...]
res = mysql_query('SELECT username FROM users WHERE username = "' . $username . '";');
if ( mysql_num_rows( $res ) == 0 ) {
mysql_query('INSERT INTO users SET username = "' . $username . '", password = "' . $password . '", email = "' . $email . '";');
[...]

Ποτέ, μα ποτέ μην γράφεις το mysql_query έτσι, εκτός κι αν θέλεις να ρισκάρεις να σε χακάρουν.
Υπάρχουν οδηγοί στο php.net ειδικά γι' αυτό το λόγο: http://php.net/manual/en/function.mysql-query.php

Κώδικας: Επιλογή όλων
// Formulate Query
// This is the best way to perform an SQL query
// For more examples, see mysql_real_escape_string()
$query = sprintf("SELECT firstname, lastname, address, age FROM friends
    WHERE firstname='%s' AND lastname='%s'",
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));

// Perform Query
$result = mysql_query($query);


Ο λόγος είναι επειδή αν ο χρήστης χρησιμοποιήσει το ερωτηματικό (;) σε ένα από τα πεδία, τότε θα μπορέσει να εκτελέσει οποιαδήποτε εντολή θέλει μέσω mysql. Φυσικά πρέπει κι άλλες προϋποθέσεις να εκπληρωθούν ούτως ώστε να εμφανιστούν μερικά ευαίσθητα δεδομένα, αλλά είναι μια πιθανότητα την οποία κανείς δεν θα πρέπει να ρισκάρει.

parenthesis έγραψε:Εμένα μου πετάει αυτό το σφάλμα μόνο όταν επιχειρώ να κάνω registrate κάποιο χρήστη που ήδη υπάρχει (δηλ το username του υπάρχει στη βάση).

Μολις το δοκίμασα, συμφωνώ, το ίδιο και σε μένα. :)
Ίσως το echo ( 'Error encountered during registration.' ); θα έπρεπε να είναι echo ( 'Error: User already in database' );
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Επόμενο

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού

cron