chrism4111 Δημοσ. 10 Αυγούστου 2010 Δημοσ. 10 Αυγούστου 2010 Γεια σε ολους .. Φτιαχνω ενα site καθαρα για εκπαιδευτικο σκοπό ετσι ωστε να αρχισω να μαθαινω την τεχνολογια της PHP . Κανω χρηση της PHP 5.3.1 , και του XAMPP(apache , mysql , php ,phpmyadmin). Το προβλημα μ ειναι στο script που εφτιαξα για την σελιδα login... Σας παραθέτω τον παρακατω κώδικα > <?php session_start(); if ($_POST['username'] && $_POST['password']) { mysql_pconnect("localhost","root","root"); mysql_select_db("myproject"); $query = "select * from users where User_Name =".$_POST["username"]; $results = mysql_query($query); $num = mysql_num_rows($results); if($num==1) { $row = mysql_fetch_array($results); if($_POST['username'] == $row["User_Name"] && $_POST['password'] == $row["Password"]) { $valid_user = $row["UserID"]; session_register("valid_user"); header("Location:index.php"); } } else { $error="Το UserName ή το Password είναι λάθος"; } } ?> <div class="login-form"> <form method="post" name="login_form" action="index.php?page=login"> <span class="login-text">Username:</span> <input class="input-text" type="text" name="username" /><br> <span class="login-text">Password :</span> <input class="input-text" type="password" name="password" /><input type="submit" value="Login" /> </form> <?php if ($error) { echo '<span class="error">'.$error.'</span>'; } ?> </div> Ο παραπανω κωδικας φορτωνετε οταν μεταφερθούμε στη σελιδα index.php?page=login To προβλημα εμφανίζετε στο session Μολις μεταφερομαι στην παραπανω σελιδα η PHP μου βγάζει τα παρακάτω warnings: Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\myproject\index.php:4) in C:\xampp\htdocs\myproject\login.php on line 2 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\myproject\index.php:4) in C:\xampp\htdocs\myproject\login.php on line 2 Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\myproject\login.php on line 9 Googlara λιγο και βρηκα οτι ηταν θεμα κωδικοποιησεις κειμένου και οτι επρεπε απο ANSI που ηταν, να κωδικωποιηθεί σε UTF8 without BOM... To έκανα αλλά και πάλι μου πέταει τα Warnings αυτα...
nik1992 Δημοσ. 10 Αυγούστου 2010 Δημοσ. 10 Αυγούστου 2010 Στον φάκελο που έχει εγκατασταθεί το xampp βρες το php.ini, ένοιξέ το και ψάξε κάπου λέει output_buffering = off. αντί off βάλε on κάνε επανεκίνηση του apache και θα λειτουργει...
chrism4111 Δημοσ. 10 Αυγούστου 2010 Μέλος Δημοσ. 10 Αυγούστου 2010 Στον φάκελο που έχει εγκατασταθεί το xampp βρες το php.ini, ένοιξέ το και ψάξε κάπου λέει output_buffering = off. αντί off βάλε on κάνε επανεκίνηση του apache και θα λειτουργει... Ευχαριστω φιλε να 'σαι καλα ... ---------- Προσθήκη στις 17:31 ---------- Προηγούμενο μήνυμα στις 14:30 ---------- Μπορει καποιος να με βοηθησει τωρα και στο τριτο warning που μου βγαζει η PHP ; Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\myproject\login.php on line 9 Δεν εχω ιδεα για ποιον λογο μου το πεταει αυτο αν και το query που εχω φτιαξει ειναι (νομίζω) σωστο.Η βαση δεδομένων εχει αποθηκευτει σε latin_swedish_ci (με την default επιλογη)(αν αυτο παιζει καποιο ρολο)
lion2486 Δημοσ. 10 Αυγούστου 2010 Δημοσ. 10 Αυγούστου 2010 Όπως λέει και το σφάλμα δίνεις ένα boolean αντί για αποτελέσματα mysql_query.
chrism4111 Δημοσ. 10 Αυγούστου 2010 Μέλος Δημοσ. 10 Αυγούστου 2010 Όπως λέει και το σφάλμα δίνεις ένα boolean αντί για αποτελέσματα mysql_query. Για ποιο λογο ομως το $results επιστρεφει boolean και οχι αποτελεσμα mysql_query;;;;
lion2486 Δημοσ. 10 Αυγούστου 2010 Δημοσ. 10 Αυγούστου 2010 Μπορείς να δώσεις την εντολή καταχώρησης αυτής της μεταβλητής (το ερώτημα στη βάση σου δηλαδή.
routsounmanman Δημοσ. 10 Αυγούστου 2010 Δημοσ. 10 Αυγούστου 2010 Για ποιο λογο ομως το $results επιστρεφει boolean και οχι αποτελεσμα mysql_query;;;; Δοκίμασε να δώσεις το ίδιο query στην phpMyAdmin και δες τι λάθος σου επιστρέφει.
chrism4111 Δημοσ. 10 Αυγούστου 2010 Μέλος Δημοσ. 10 Αυγούστου 2010 Δοκίμασε να δώσεις το ίδιο query στην phpMyAdmin και δες τι λάθος σου επιστρέφει. Δεν μου εβγαλε καποιο λαθος αλλα παρατηρησα κατι που δεν ξερω αν παιζει καποιο ρολο οταν μπηκα στον πινακα και μετα πατησα το κουμπι SQL για να κανω το ερωτημα μ το text box που εμφανιστηκε ειχε ειδη ενα default ερωτημα που παραθετω παρακατω > SELECT * FROM `users` WHERE 1
routsounmanman Δημοσ. 10 Αυγούστου 2010 Δημοσ. 10 Αυγούστου 2010 Δεν μου εβγαλε καποιο λαθος αλλα παρατηρησα κατι που δεν ξερω αν παιζει καποιο ρολο οταν μπηκα στον πινακα και μετα πατησα το κουμπι SQL για να κανω το ερωτημα μ το text box που εμφανιστηκε ειχε ειδη ενα default ερωτημα που παραθετω παρακατω > SELECT * FROM `users` WHERE 1 Δεν είναι κάτι λάθος αυτό, είναι το default query σου δίνει η phpMyAdmin για τον τρέχον πίνακα. Κάνε το εξής, πρόσθεσε αυτή τη γραμμή κώδικα: >echo "$_POST['username'] = ". $_POST['username']; Για να ελέγξεις μήπως υπάρχει κάποιο πρόβλημα με POST. Επίσης, γιατί κάνεις redirect με το header; Καλύτερα με javascript, IMO.
chrism4111 Δημοσ. 10 Αυγούστου 2010 Μέλος Δημοσ. 10 Αυγούστου 2010 Βεβαια πρεπει να εχω ξεχασει να βαλω και τα quotes στο query αρα θα γινει καπως ετσι: $query = "select * from users where User_Name =' ".$_POST["username"]." ' "; αλλα και παλι δεν διορθωνετε κατι ---------- Προσθήκη στις 20:49 ---------- Προηγούμενο μήνυμα στις 20:14 ---------- Λυθηκε ειχα προβλημα με τη συνδεση στην βαση απλα ειχε γινει μπερδεμα με τους 2 χρηστες που ειχα βαλει και μολις τους διεγραψα λειτουργησε κανονικα .. Τωρα ομως εχω προβλημα με τον session γιατι αφου κανει register το παρακατω δεν μου δουλευει > <?php if(session_is_registered('valid_user')) { οτιδηποτε θελω να φενετε μονο για εγγεγραμένα μελη } ?> Επίσης, γιατί κάνεις redirect με το header; Καλύτερα με javascript, IMO. απλα ειμαι καινουριος στο χωρο της PHP και λειτουργω οπως θα σκεφτομουνα με την asp.NET (C#)
routsounmanman Δημοσ. 10 Αυγούστου 2010 Δημοσ. 10 Αυγούστου 2010 > [...] if($_POST['username'] == $row["User_Name"] && $_POST['password'] == $row["Password"]){ $_SESSION['myapp']['time'] = time(); $_SESSION['myapp']['logged'] = true; } [...] if($_SESSION['myapp']['logged'] == true && (time() - $_SESSION['myapp']['time'] <= 3600)){ echo " <script language='javascript'> href.location=\"http://mysite.gr/administrator/\"; </script> "; } else{ $_SESSION['myapp'] = null; echo "Δεν έχετε συνδεθεί ή το session σας έχει λήξει!"; }
chrism4111 Δημοσ. 12 Αυγούστου 2010 Μέλος Δημοσ. 12 Αυγούστου 2010 > if ($_POST['username'] && $_POST['password']) { mysql_pconnect("localhost","root",""); mysql_select_db("myproject"); $query = sprintf("SELECT * FROM users WHERE User_Name='%s'",mysql_real_escape_string($_POST["username"])); $results = mysql_query($query); $num = mysql_num_rows($results); if($num == 1) { $row = mysql_fetch_array($results); if($_POST['username'] == $row['User_Name'] && $_POST['password'] == $row['Password']) { session_start(); session_register('myapp'); $_SESSION['myapp']=$row['UserID']; } if(session_is_registered('myapp')) { header("Location:index.php"); } if($_POST['username'] != $row['User_Name'] || $_POST['password'] != $row['Password']) { session_start(); //περιτό session_destroy(); //περιτό $error="Δεν έχετε συνδεθεί"; } } } ?> <div class="login-form"> <form method="post" name="login_form" action="index.php?page=login"> <span class="login-text">Username:</span> <input class="input-text" type="text" name="username" /><br> <span class="login-text">Password :</span> <input class="input-text" type="password" name="password" /><input type="submit" value="Login" /> </form> <?php if($error) { echo '<p><span class="error">'.$error.'</span></p>'; } ?> </div> Τελικα το προτίμησα με αυτον τον τροπο δεν ξερω αν ειναι ο σωστος αλλα μου δουλευει γι'αυτο που θέλω (για την ωρα να μαθω την PHP). Καταλαβα τον τροπο σκεψης του session['myapp']['time'] και τι ελεγχει αλλα θα το ενσωματωσω στο τέλος ... Ενα πραγμα ομως δεν καταλαβαινω. Γιατι εαν πατησω λαθος password η username δεν εμφανίζετε το μύνημα $error.
routsounmanman Δημοσ. 12 Αυγούστου 2010 Δημοσ. 12 Αυγούστου 2010 Mήπως έχεις βάλει το επάνω κομμάτι σε function και το $error δεν είναι προσβάσιμο; Για δοκίμασε να βάλεις >if($error != "" || $error != null) Αντί του >if($error)
chrism4111 Δημοσ. 12 Αυγούστου 2010 Μέλος Δημοσ. 12 Αυγούστου 2010 Mήπως έχεις βάλει το επάνω κομμάτι σε function και το $error δεν είναι προσβάσιμο; Για δοκίμασε να βάλεις >if($error != "" || $error != null) Αντί του >if($error) Ωραία μου δουλεψε. και ετσι και με το if (isset($error)){..... Thnks (και για το ενδιαφερον και την υπομονη) Κατι αλλο.... προσθεσα λιγο παρακατω και αυτο > if($num<1){ $error="........Μυνυμα ταδε"; } } else { $error="Παρακαλω πληκτρολογηστε UserName και Password" } // Το else αυτο αντιστοιχει στο πρωτο if του ολοκληρωμένου κωδικα Αυτο που ειναι λογικο να συμβαινει (μολις φορτωσει για πρωτη φορα η σελιδα) ειναι οτι οντως το username και το Password ειναι κενα και δεν στελνουν κατι ετσι ωστε να ισχυει μια συνθηκη απο τις προηγουμενες και ετσι δεσμευετε το $error και στην πρωτη φορτωση της σελιδας μου εμφανίζετε το τελευταιο μυνημα. Πως θα μπορεσω να το διορθωσω; Μήπως με αρχικοποιηση του username και του password;Και αν ναι πως γιατι ξεμεινα απο σκεψη. Ευχαριστω για το ενδιαφερων και την υπομονή(και παλι).
routsounmanman Δημοσ. 12 Αυγούστου 2010 Δημοσ. 12 Αυγούστου 2010 Βάλε το από τελευταίο πρώτο και όλο το υπόλοιπο σε else, πχ > if(!isset($_POST["username"]) && !isset($_POST["password"])) $error = "Παρακαλώ δώστε στοιχεία"; else { //Τα υπόλοιπα }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.