Gå til innhold

Returnerer i array(?!)


Anbefalte innlegg

Hei.

 

har et lite logg-inn script, som jeg lagde.

 

men av en eller annen rar grunn, returnerer den i array(?!)

 

<?php
session_start();
ob_start();

include("inc.php");

if(isset($_SESSION['id'])) {
echo "Du er logget inn";
}

if(isset($_POST['login'])) {

class login {
public $user;
public $pass;


public function __construct () {
	if(isset($_POST['login'])) {
	$this -> user = $_POST['username'];
	$this -> pass = doublesalt($_POST['password'], $_POST['username']);
	}

}

public function check_info ($user, $pass) {

	$this -> user = quote_smart($user);
	$this -> pass = $pass;
	$pass = $this->pass;
	$q = mysql_query("SELECT * FROM `user` WHERE `user`='" .$this->user. "'");
	$q = mysql_fetch_array($q);
	if($q) {
		$this -> pass = doublesalt($_POST['password'], $_POST['username']);
		if($q['password'] == $pass) {
			return true;
			return $this -> id = $q['id'];
		}
		elseif(!$q['password'] == $this->pass)
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}
}

$login = new login;

if(isset($_POST['login'])) {
$user = $login->user;
$pass = $login->pass;
if($login->check_info($user, $pass) == true) {
	echo "<span class='great'>Du er nå logget inn</span>";
	$q = mysql_query("SELECT * FROM `user` WHERE `user`='" .$user. "'"); 
	$q = mysql_fetch_array($q);
	$_SESSION['id'] = $q['id'];
	header("Location: index.php");
}
elseif($login->check_info($user, $pass) == false)
{
	echo "<span class='error'>Feil brukernavn eller passord</span><br />";
}
}
}
?>

<form method="POST" action="">
Brukernavn: <input type="text" name="username" /><br />
Passord: <input type="password" name="password" /><br />
<input type="submit" name="login" value="Logg inn" /><br />
</form><br/>
<a href="registrer.php">Registrer deg</a> || <a href="glemtpw.php">Glemt passord</a>

 

Feilmelding:

 

array(2) { [0]=> string(3) "tes" [1]=> string(1) "t" }

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\prosjekt\login.php on line 32

 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\prosjekt\login.php on line 32

 

Ikke tenk på mysql_fetch_array(); error,

 

Takk på forhånd!

Lenke til kommentar
Videoannonse
Annonse

Vet ikke kor eg skal begynne, det der var litt rotete ...

 

Kan ikke isolere noe kode pga

include("inc.php");

og

doublesalt(

det er vel en av disse som skriver ut arrayet. se etter var_dump.

 

if(isset($_POST['login'])) {

class login {

Korfor definerer du denne klassen i en if setning?

 

	public function __construct () {
	if(isset($_POST['login'])) {
	$this -> user = $_POST['username'];
	$this -> pass = doublesalt($_POST['password'], $_POST['username']);
	}
}

username og password burde sendes inn som parametre.

 

 

		
	$this -> user = quote_smart($user);

Du burde escape etter hvilket medium strengen skal brukes i. HTML, urls, sql, etc. Behold den uescapede strengen.

 

		$this -> pass = $pass;
	$pass = $this->pass;

Morsomt

 

		$q = mysql_query("SELECT * FROM `user` WHERE `user`='" .$this->user. "'");
	$q = mysql_fetch_array($q);

Samme variabel?

 

			$this -> pass = doublesalt($_POST['password'], $_POST['username']);

Du gjorde dette i constructoren allerede? Hvis det var en login iallefall ...

 

			if($q['password'] == $pass) {
		}
		elseif(!$q['password'] == $this->pass)
		{
		}

Du burde erstatte elseif med bare else.

Og ulik skrives slik: $q['password'] != $this->pass

!$q['password'] == $this->pass betyr at først gjøres !$q['password'] om til en bool og får motsatt verdi, så gjøres vel $this->pass om til bool, så sammenlignes de.

Anbefaler deg å lese om rekkefølgen til php operators her.

Edit: Den vil alltid være false hvis begge strengene er mer enn en bokstav, som de sikkert er.

 

				return true;
			return $this -> id = $q['id'];

Kun en av disse returneres egentlig ...

 

$login = new login;

Denne blir vanskelig hvis login klassen ikke er definert?

 

if(isset($_POST['login'])) {
$user = $login->user;
$pass = $login->pass;
if($login->check_info($user, $pass) == true) {

user og pass eksisterer allerede i klassen. Det er dårlig OOP å hente variabler ut av en klasse for å sende dem inn igjen.

 

		$q = mysql_fetch_array($q);
	$_SESSION['id'] = $q['id'];

Du burde sjekke at det ikke var noen feil med spørringen.

 

		header("Location: index.php");
}

Koden stopper ikke et en header. Vil du redirecte, så bør du ha die() eller exit() etter en header.

 

	elseif($login->check_info($user, $pass) == false)

else ikke elseif

Endret av OIS
Lenke til kommentar

Kan man i det hele tatt kalle en egendefinert ikke-objektorientert funksjon i et OOP-miljø?

 

EDIT: Ja, det kunne man vist. Men er det en god vane?

 

				return true;
			return $this -> id = $q['id'];

Kun en av disse returneres egentlig ...

Det er vel bare den første som returneres, da funksjonen stopper så fort en return() oppstår.

Endret av m4rtin
Lenke til kommentar
Kan man i det hele tatt kalle en egendefinert ikke-objektorientert funksjon i et OOP-miljø?

 

EDIT: Ja, det kunne man vist. Men er det en god vane?

Tja. Jeg har definert en liten haug med array_funksjoner som gjør bruken av arrays litt morsommere. De følger nøyaktig samme konvensjoner som alle de allerede eksisterende array-relaterte funksjoner i PHP og burde jo da kunne brukes likestilt. Mener da jeg i hvert fall.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...