får ikke noget ud af $rows - HJÆÆLP :P

Tags:    php

<< < 12 > >>
Hej,

jeg kan simpelthen ikke gennemskue hvorfor, at mit login ikke virker. Heller ikke når jeg hardcoder.
Fejlen ligger helt sikkert i den måde jeg prøver at hive $rows fra database class til min login class.

Database:
Fold kodeboks ind/udKode 


Login class:
Fold kodeboks ind/udKode 


Login side:
Fold kodeboks ind/udKode 


Håber i kan hjælpe :)



Indlæg senest redigeret d. 25.01.2010 16:33 af Bruger #14181
13 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Måske:
mysql_select_db($this->database, $this->connectlink);

og det samme med mysql_query($sql, $this->connectlink)....



$db->rows er ikke defineret og derfor vil følgende altid være false:

if (($db->rows) != null)

Mulig løsning:
Fold kodeboks ind/udKode 




Fold kodeboks ind/udKode 


Fold kodeboks ind/udKode 


I de to overstående har jeg fjernet det der er der pga at den returnerer et array med flere rækker, da jeg kunne forstille mig det virker, og jeg ikke kan se grunden til at hente flere rækker, siden jeg ikke går ud fra flere kan have det samme brugernavn og password.



Indlæg senest redigeret d. 26.01.2010 19:18 af Bruger #15624
Måske:
mysql_select_db($this->database, $this->connectlink);

og det samme med mysql_query($sql, $this->connectlink)....


Nope, det er ikke det :(
Jeg kan simpelthen ikke gennemskue det, men jeg ved, at min "mysql_select_db" og "mysql_query" er rigtig.

Det er helt sikkert noget med "$rows = $row" i database class, eller at jeg kalder det forkert i min login class.



Tak for hjælpen, men det virker stadig ikke.

istedet for at extend classen, kunne du bare kalde den vha. new.. fx.:


class login{
private $Database;

public function do_login($Username, $Password)
{
$this->Database = new database();

$this-Database->FunktionIDatabaseklasse();
}
}



Jeg skal jo stadig extende min class for at kunne bruge rows, der er protected.

Den siger stadig:
"Login failed, you typed a wrong username or password!"

Dette er som det ser ud nu:

Database klasse:
Fold kodeboks ind/udKode 


login klasse:
Fold kodeboks ind/udKode 


login side:
Fold kodeboks ind/udKode 




Lige som en kommentar, så forstår jeg ikke hvorfor du vil lade login klassen extende database. Typisk extender man fordi det som man vil lave har egenskaber der minder eller er lige som det oprindelige, men man vil tilføje nogle ting dertil. Jeg kan ikke se hvordan en klasse til at håndtere logins kan have en "query" metode og en "fetchRows" metode.

Som din login klasses er ud lige nu er der ingen grund til at den skal extende database. Du opretter endda et helt andet database objekt INDE i din login klasse. Herefter kalder du din "fetch_rows" metode på database objektet, men fetch_rows sætter ikke $rows variablen på objektet; den returnere rowsne! Hvis du vil have gemt rowsne skal du bruge:
Fold kodeboks ind/udKode 

... inden du forlader funktionen.
Selv hvis du gør dette, skal du dog ændre i database objektet, da $rows lige nu er protected, men du prøver at tilgå den "udefra", og derfor skal du benytte public. Alternativt kan du blot(denne løsning er for mig pænere) tage resultatet direkte fra fetch_rows, og returnere det(som du gør nu), og så sætte det i metoden sm kalder fetch_rows, ala:
Fold kodeboks ind/udKode 




Hej,

Jeg kan ikke helt se, hvor
Fold kodeboks ind/udKode 

skal sættes ind.

Jeg extender for at jeg kan bruge $rows, der er protected, så behøver den ikke at blive public. Er det ikke godt nok? - Det er det jeg har lært :P



Indlæg senest redigeret d. 26.01.2010 10:50 af Bruger #14181
Nej, det er ikke godt nok. protected virker ved at metoder i klasser som extender kan få adgang til "moderklassen"s medlemsvariabler. Eksempel:
Fold kodeboks ind/udKode 

Du prøver at gøre det sidste, altså tilgå en protected variabel udefra. Det kan du _ikke_ gøre, og derfor skal du gøre $this->rows public.

Mht. koden:
Fold kodeboks ind/udKode 

... så skal den indsættes før fetch_rows returnere, altså sidst i fetch_rows, lige før return kommandoen. Som du gør lige nu, returnere du blot $rows, men når du bagefter prøver at bruge rows, prøver du at bruge den som et medlem af dit database objekt. Dette vil derfor selvfølgelig ikke virke.



Jeg kan se at den i loginklassen på linie 14 siger:

Fold kodeboks ind/udKode 


Så vit jeg husker skal det være !==, da man ikke kan bruge != til at validere mod null.



Okay, men det virker stadig ikke.
Nu siger den følgende:
Fold kodeboks ind/udKode 


Jeg tror godt at kan godt forstå fejlen, men jeg ved ikke hvordan jeg fixer det.

Det må vel være fordi der ikke er noget $rows['ID'] osv..

Normalt plejer jeg at hente oplysningerne på den måde.

Jeg har ikke lavet det på denne måde før, men hvis jeg kan få det til at virke, så kan det fungere nemmere end mit tidligere værk. :)



Indlæg senest redigeret d. 26.01.2010 14:55 af Bruger #14181
<< < 12 > >>
t