Avatar billede Slettet bruger
15. januar 2008 - 17:32 Der er 39 kommentarer og
1 løsning

Kan ikke hente data ud af MySQL databasen.

Hej!
Jeg har dette script:
include("scripts/connect.php");
include("scripts/header.php");

$query = mysql_query("SELECT * FROM gttu_adgangskoder WHERE username=".$_POST['username']);
$row = mysql_fetch_assoc($query);

echo "row['password'] = " . $row['password'];
echo "<br /><hr /><br />_POST['password'] = " . $_POST['password'];
echo "<br /><hr /><br />row['username'] = " . $row['username'];
echo "<br /><hr /><br />_POST['username'] = " . $_POST['username'];

Idéen er at jeg vil lave et loginsystem, men problemet er at jeg ikke kan få de variabler som bliver fyldt ud fra databasen til at retunere noget. De er simpelthen tomme. Der er noget i $_POST variablerne, men ikke i $row. Den er tom.

Nogen idéer?

Venlig hilsen Anders.
Avatar billede dkfire Nybegynder
15. januar 2008 - 17:37 #1
Det er altid en god ide lige at sæte or die(mysql_error()); efter sine mysql funktioner, således at du kan se om der er nogle fejl.

$query = mysql_query("SELECT * FROM gttu_adgangskoder WHERE username=".$_POST['username']) or die(mysql_error());
$row = mysql_fetch_assoc($query) or die(mysql_error());
Avatar billede erikjacobsen Ekspert
15. januar 2008 - 18:06 #2
Og hvis feltet username ikke er et talfelt, så skal du minimum:

$query = mysql_query("SELECT * FROM gttu_adgangskoder WHERE username='".$_POST['username']."'") or die(mysql_error());
Avatar billede Slettet bruger
15. januar 2008 - 19:15 #3
Det virker stadig ikke. Nu er MySQL delen sådan:
mysql_query("SELECT * FROM gttu_adgangskoder WHERE username='".$_POST['username']."'") or die(mysql_error());
$row = mysql_fetch_assoc($query) or die(mysql_error());
Avatar billede dkfire Nybegynder
15. januar 2008 - 20:41 #4
Og giver mysql nogen fejl ??
Avatar billede Slettet bruger
15. januar 2008 - 21:06 #5
Nej slet ikke... Det hvor variablen skulle have været er der bare en tom plads...
Avatar billede dkfire Nybegynder
15. januar 2008 - 21:11 #6
Har du mulighed for at vise _hele_ din kode som du lige har testet.

evt kan du lave en print_r($row) som vil skrive ud alt hvad $row indeholder.

Der er også mulighed for at se hvor mange rækker mysql egentlig har fundet. Det kan du gøre med funktionen mysql_num_rows( $query )
Avatar billede Slettet bruger
15. januar 2008 - 21:19 #7
Her er hele koden:

<?php

include("scripts/connect.php");
include("scripts/header.php");

$query = mysql_query("SELECT * FROM gttu_adgangskoder WHERE username=".$_POST['username']);
$row = mysql_fetch_assoc($query);

echo "row['password'] = " . $row['password'];
echo "<br /><hr /><br />_POST['password'] = " . $_POST['password'];
echo "<br /><hr /><br />row['username'] = " . $row['username'];
echo "<br /><hr /><br />_POST['username'] = " . $_POST['username'];

?>

Da jeg brugte print_r($row) fik jeg et et-tal tilbage???
Avatar billede dkfire Nybegynder
15. januar 2008 - 21:28 #8
Hmmm du har jo ikke skrevet noget af det vi har forslået.
Vis den kode som _lige_ har testet med, og så indeholder de ændringer vi har skrevet.
Avatar billede Slettet bruger
15. januar 2008 - 21:36 #9
Sorry!!! Er ret træt... Må have glemt at uploade.

Men nu kommer der indhold i det hele, men $_POST['username'] levere noget mærkeligt tilbage:

AndersArray ( [username] => Anders [password] => anderspyro [id] => 4 )

Jeg skrev bare "Anders" (uden gåseøjne) i mit username felt. Hvordan kommer alt dette med???
Avatar billede Slettet bruger
15. januar 2008 - 21:37 #10
Hvor helvedet får den 4 fra??? Det er dens ID i databasen...
Avatar billede dkfire Nybegynder
15. januar 2008 - 21:51 #11
Ja du beder den om hente alt information for alle de rækker hvor username er anders.
Dvs. den henter alle felter.
Det er ikke særligt klogt at gemme password direkte. Oftes gemmes password krypteret for at højne sikkerheden.
Avatar billede Slettet bruger
15. januar 2008 - 21:54 #12
Jamen vi er bare et lille site, som kun har fire faste medlemmer.. Man kan ikke selv oprette sig.

Men når jeg skriver 'username' ind i array'en burde den jo kun give username delen???

Men smutter offline nu, kommer først på igen i morgen...
Avatar billede dkfire Nybegynder
15. januar 2008 - 22:03 #13
Det gør det også.
print_r( $row ) giver : Array ( [username] => Anders [password] => anderspyro [id] => 4 )

$row['username'] giver: Anders
Avatar billede erikjacobsen Ekspert
15. januar 2008 - 22:35 #14
Når du siger "SELECT * FROM ..." får du alle felter. Det er "*" der gør det. Det du anbringer efter "WHERE" udvælger den eller de rækker du får.
Avatar billede Slettet bruger
16. januar 2008 - 14:14 #15
Men det er ikke en variable der bliver fyldt ud fra databasen! $row bliver fyldt ud fra databasen, men $_POST bliver fyldt ud af en HTML form!
Avatar billede dkfire Nybegynder
16. januar 2008 - 14:18 #16
say what ??
Avatar billede Slettet bruger
16. januar 2008 - 14:29 #17
Denne her HTML form skriver jeg data ind i:

<center>
<form method='post' action='godkend.php'>
User:<br>
<input type='text' name='username'><br>
Password:<br>
<input type='password' name='password'><br>
<input type='submit' value='Login'>
</form>
</center>

Som så sender data til godkend.php (som er det script i har set på). Lige nu ser det sådan ud:

<?php

include("scripts/connect.php");
include("scripts/header.php");

$query = mysql_query("SELECT * FROM gttu_adgangskoder WHERE username='".$_POST['user']."'") or die(mysql_error());
$row = mysql_fetch_assoc($query) or die(mysql_error());

echo "row['password'] = " . $row['password'];
echo "<br /><hr /><br />_POST['password'] = " . $_POST['password'];
echo "<br /><hr /><br />row['username'] = " . $row['username'];
echo "<br /><hr /><br />_POST['username'] = " . $_POST['username'];
echo "<br /><hr /><br />Hele row variablen: " .print_r($row);

?>

Har I nogen idé eller er I helt lost???
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 14:33 #18
Vi har det skam meget godt. Den skriver præcis det ud den skal. Hvad mener du den skal skrive ud, og hvorfor?
Avatar billede Slettet bruger
16. januar 2008 - 14:39 #19
For mig opfører den sig åbenbart som det passer den??? Nu er hele siden bare blank???

Men $_POST['username'] skal ikke skrive "AndersArray ( [username] => Anders [password] => anderspyro [id] => 4 )" da den ikke kontakter databasen! Den får sin information fra HTML formen, som jeg bare skriver "Anders" i (alt uden gåseøjne).

Og print_r($row) skriver bare "1" ud.
Avatar billede dkfire Nybegynder
16. januar 2008 - 14:59 #20
Har du huske at gemme og uploade din kode som du sidst har skrevet her ??
Avatar billede dkfire Nybegynder
16. januar 2008 - 15:00 #21
Evt kan du give et link til siden
Avatar billede Slettet bruger
16. januar 2008 - 15:09 #22
Ja jeg har uploadet...
Scriptet ligger her:

kleto.dk/admin/logon.php

Username: Anders
Password: anderspyro

Man bliver direkte sendt vidre til godkend.php, som er helt blank i øjeblikket... :(
Avatar billede dkfire Nybegynder
16. januar 2008 - 15:11 #23
Jamen, så skyldes det jo nok at du ikke viser hele koden for godkend.php
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 15:12 #24
Gå ind i dit kontrolpanel på (b)one.com og sæt fejlvisning til. Du kan have en simpel semikolon fejl, der giver blank side - med mindre du sætter et kryds et eller andet sted (kender ikke b-one)

Det er heller $_POST['username'] der indeholder "AndersArray ( [username] => Anders [password] => anderspyro [id] => 4 )" - den tekst får du fra print_r($row)
Avatar billede Slettet bruger
16. januar 2008 - 15:12 #25
Jeg prøvede at fjerne "or die(mysql_error());" fra det hele, og nu kom der noget tekst frem, variablerne blev bare ikke loadet ind... (har tilføjet det igen)
Avatar billede Slettet bruger
16. januar 2008 - 15:15 #26
Så har jeg slået fejlmeddelser til, men der kan gå 15 minutter til det træder i kraft.. Der sker ihvertfald ikke noget endnu...
Avatar billede dkfire Nybegynder
16. januar 2008 - 15:17 #27
Prøv at vise _hele_ koden til godkend.php filen, som du har lagt op nu, her.
Avatar billede Slettet bruger
16. januar 2008 - 15:19 #28
Her er den:

<?php

include("scripts/connect.php");
include("scripts/header.php");

$query = mysql_query("SELECT * FROM gttu_adgangskoder WHERE username='".$_POST['user']."'") or die(mysql_error());
$row = mysql_fetch_assoc($query) or die(mysql_error());

echo "<body>";
echo "row['password'] = " . $row['password'];
echo "<br /><hr /><br />_POST['password'] = " .$_POST['password']."";
echo "<br /><hr /><br />row['username'] = " .$row['username']."";
echo "<br /><hr /><br />_POST['username'] = " .$_POST['username']. "";
echo "<br /><hr /><br />Hele row variablen: " .print_r($row)."";
echo "</body>";

/*if $data['password'] == $_POST['password'] {
  session_start();
  $_SESSION['user'] = $_POST['username'];
  include("forside.php");
}
else {
  include("wrongpassword.php");
};  */


?>

Det det er som kommentar, vil jeg ikke have rettet lige nu, hvis i nu skulle finde en fejl i det :) Det står også som kommentar på serveren...
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 15:32 #29
Det kan svare sig at ændre
  echo "<br /><hr /><br />Hele row variablen: " .print_r($row)."";
til
  echo "<br /><hr /><br />Hele row variablen: ";print_r($row);

Så kommer udskriften det rigtige sted - måske hvad der forvirrede dig?
Avatar billede Slettet bruger
16. januar 2008 - 15:37 #30
Det virker stadig ikke :(

Da jeg prøvede at fjerne "or die(mysql_error());" fra koden kom der noget frem på skærmen, men variablerne fra databasen havde ikke det i sig som de skulle...
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 15:46 #31
Det er nu lidt som om det ikke er det rigtige indhold på godkend.php på serveren.
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 15:48 #32
Lad mig præcisere: hvis du har
  <input type='text' name='username'>
og så bruger
  $_POST['user']
...så kan jeg ikke se nogen grund til at den skal opføre sig anderledes.
Avatar billede Slettet bruger
16. januar 2008 - 15:50 #33
Men det er det...
Jeg includer jo to filer.. Her er deres indhold:

header.php:

<?php

//Linker til stylesheet.

echo "<head>
<link rel='stylesheet' type='text/css' href='../../style.css'>
</head>";

?>

connect.php:

<?php

mysql_connect("localhost","kleto_dk","*****") or die(mysql_error());
mysql_select_db("kleto_dk") or die(mysql_error());

?>
Avatar billede Slettet bruger
16. januar 2008 - 15:52 #34
WEE!!! erikjacobsen du er et geni!!! Nu virker det :P Du kan godt ligge et svar!!!
Avatar billede erikjacobsen Ekspert
16. januar 2008 - 15:55 #35
Det var godt du skjulte dit password ;)

Jamen, jeg samler slet ikke på point, tak. Det er bare sjovt at finde andres fejl. Jeg laver jo aldrig fejl selv .... (hmm, øh, sådan da....)  ;)
Avatar billede Slettet bruger
16. januar 2008 - 16:02 #36
Så skal dkfire have dem. Han har hjulpet meget... Dkfire lig et svar! :P
Avatar billede dkfire Nybegynder
16. januar 2008 - 16:07 #37
Jamen jeg vil da godt have point, nu når erik ikke vil ;-)
Avatar billede dkfire Nybegynder
16. januar 2008 - 16:08 #38
Og så lige som et svar da også ;-)
Avatar billede Slettet bruger
16. januar 2008 - 16:12 #39
Og det er accepteret :-)
Avatar billede dkfire Nybegynder
16. januar 2008 - 16:46 #40
Takker for point :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester