Gå til innhold

Returnerer i array(?!)


Anbefalte innlegg

Skrevet

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!

Videoannonse
Annonse
Skrevet (endret)

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
Skrevet (endret)

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

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