Sk!ppy Skrevet 19. mars 2009 Del Skrevet 19. mars 2009 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
OIS Skrevet 19. mars 2009 Del Skrevet 19. mars 2009 (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 19. mars 2009 av OIS Lenke til kommentar
Martin A. Skrevet 20. mars 2009 Del Skrevet 20. mars 2009 (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 20. mars 2009 av m4rtin Lenke til kommentar
Jonas Skrevet 20. mars 2009 Del Skrevet 20. mars 2009 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå