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

PHP : warnings σε session


chrism4111

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

Δημοσ.

Γεια σε ολους ..

Φτιαχνω ενα 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 αυτα...

Δημοσ.

Στον φάκελο που έχει εγκατασταθεί το xampp βρες το php.ini, ένοιξέ το και ψάξε κάπου λέει output_buffering = off. αντί off βάλε on κάνε επανεκίνηση του apache και θα λειτουργει...

Δημοσ.
Στον φάκελο που έχει εγκατασταθεί το 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 επιλογη)(αν αυτο παιζει καποιο ρολο)

Δημοσ.
Όπως λέει και το σφάλμα δίνεις ένα boolean αντί για αποτελέσματα mysql_query.

 

Για ποιο λογο ομως το $results επιστρεφει boolean και οχι αποτελεσμα mysql_query;;;;

Δημοσ.
Για ποιο λογο ομως το $results επιστρεφει boolean και οχι αποτελεσμα mysql_query;;;;

 

Δοκίμασε να δώσεις το ίδιο query στην phpMyAdmin και δες τι λάθος σου επιστρέφει.

Δημοσ.
Δοκίμασε να δώσεις το ίδιο query στην phpMyAdmin και δες τι λάθος σου επιστρέφει.

 

Δεν μου εβγαλε καποιο λαθος αλλα παρατηρησα κατι που δεν ξερω αν παιζει καποιο ρολο

οταν μπηκα στον πινακα και μετα πατησα το κουμπι SQL για να κανω το ερωτημα μ

το text box που εμφανιστηκε ειχε ειδη ενα default ερωτημα που παραθετω παρακατω

>
SELECT * FROM `users` WHERE 1

Δημοσ.
Δεν μου εβγαλε καποιο λαθος αλλα παρατηρησα κατι που δεν ξερω αν παιζει καποιο ρολο

οταν μπηκα στον πινακα και μετα πατησα το κουμπι SQL για να κανω το ερωτημα μ

το text box που εμφανιστηκε ειχε ειδη ενα default ερωτημα που παραθετω παρακατω

>
SELECT * FROM `users` WHERE 1

 

Δεν είναι κάτι λάθος αυτό, είναι το default query σου δίνει η phpMyAdmin για τον τρέχον πίνακα.

 

Κάνε το εξής, πρόσθεσε αυτή τη γραμμή κώδικα:

 

>echo "$_POST['username'] = ". $_POST['username'];

 

Για να ελέγξεις μήπως υπάρχει κάποιο πρόβλημα με POST.

 

Επίσης, γιατί κάνεις redirect με το header; Καλύτερα με javascript, IMO.

Δημοσ.

Βεβαια πρεπει να εχω ξεχασει να βαλω και τα 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#)

Δημοσ.
>    [...]

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 σας έχει λήξει!";
	
}

Δημοσ.

>
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.

Δημοσ.

Mήπως έχεις βάλει το επάνω κομμάτι σε function και το $error δεν είναι προσβάσιμο; Για δοκίμασε να βάλεις

 

>if($error != "" || $error != null)

 

Αντί του

 

>if($error)

Δημοσ.
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;Και αν ναι πως γιατι ξεμεινα απο σκεψη.

Ευχαριστω για το ενδιαφερων και την υπομονή(και παλι).

Δημοσ.

Βάλε το από τελευταίο πρώτο και όλο το υπόλοιπο σε else, πχ

 

>

if(!isset($_POST["username"]) && !isset($_POST["password"]))
    $error = "Παρακαλώ δώστε στοιχεία";
else
    {

         //Τα υπόλοιπα

    }

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

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

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