Avatar billede coldray Nybegynder
18. oktober 2007 - 18:07 Der er 26 kommentarer og
1 løsning

Spørgsmål angående databaseforbindelse

Jeg er simpelthen ved at rykke håret af mig selv nu! Efter godt et års pause med php, føler jeg ikke jeg kan få noget som helst til at fungere!

include 'opendb.php';                                                    // Åbner databasen
$query = "SELECT * FROM brugere WHERE ID = '".$_GET['ID']."'";          // Skaffer brugernavnet på den pågældende bruger
$result = mysql_query($query)or die("MySQL fejl: " . mysql_error());   

$log = mysql_fetch_array($result);

$sUsername = $log['username'];                                          // Gemmer brugernavnet som $sUsername
echo $sUsername;

Når jeg udskriver $sUsername, returnerer den ingenting!

feltet username eksisterer i tabelen brugere, og der er 7 records i tabelen, derfor forstår jeg simpelthen ikke hvad der er galt!
Avatar billede Frederik Nybegynder
18. oktober 2007 - 19:20 #1
Prøv med denne kode:

<?
include('opendb.php');

if( isset( $_GET['id'] ) )
  $id = $_GET['id'];
else
  $id = null;


if( $id !== null ) {
$query = mysql_query("SELECT username FROM brugere WHERE id = '$id'") or die(mysql_error());
$result = mysql_fetch_array($result);
  if( $query == null )
    die("Fandt ikke brugeren");

$log = mysql_fetch_array($result)
$sUsername = $log['username'];
echo ($sUsername);
?>
Avatar billede nielle Nybegynder
18. oktober 2007 - 19:26 #2
Spørgsmålet er ikke om der et 7 rækker i din tabel, men om der er en af dem som svarer til det ID du angiver i din SQL.
Avatar billede olebole Juniormester
18. oktober 2007 - 19:26 #3
<ole>

Hedder feltet i DB'en 'ID' eller 'id'? Hedder variablen 'ID' eller 'id'?

xuzem >> For at være helt sikker:
    if( isset($_GET['id']) && $_GET['id']!="" )

- i tilfælde af: http://www.domain.dk/sti/side.php?id=  ;o)


/mvh
</bole>
Avatar billede nielle Nybegynder
18. oktober 2007 - 19:27 #4
Desuden skal det være:

$log = mysql_fetch_assoc($result);

i stedet for:

$log = mysql_fetch_array($result);
Avatar billede olebole Juniormester
18. oktober 2007 - 19:36 #5
nielle >> skal ikke, men bør  ;o)
Avatar billede nielle Nybegynder
18. oktober 2007 - 19:39 #6
Har (gen)opdaget det :^)
Avatar billede coldray Nybegynder
18. oktober 2007 - 20:01 #7
Hej igen!

Har kigget på koden, men den er lidt tricky. Rettede et par småfejl i koden du gav, men den returnerer fejl nu. Det skal siges at jeg benytter php4, jeg ved ikke om det har noget at sige? Nevertheless, her er koden:

if( isset( $_GET['id'] ) )
  $id = $_GET['id'];
else
  $id = null;


if( $id !== null ) {
$query = mysql_query("SELECT username FROM brugere WHERE id = '$id'") or die(mysql_error());
$result = mysql_fetch_array($result);
  if( $query == null )
    die("Fandt ikke brugeren");

$log = mysql_fetch_array($result);
$sUsername = $log['username'];
echo ($sUsername);
}

---

Jeg får følgende fejl:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /..../history.php on line 12

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /..../history.php on line 16

---

Der er tale om linjerne
$result = mysql_fetch_array($result);
og
$log = mysql_fetch_array($result)

Den første af de to fejl, mener jeg, burde omskrives til $result = mysql_query($query);

men jeg forstår mig ikke på den anden. Jeg har prøvet at erstatte mysql_fetch_array med mysql_fetch_assoc, men de giver begge samme fejl.
Avatar billede nielle Nybegynder
18. oktober 2007 - 20:11 #8
Du skal ændre dine:

$result = mysql_fetch_array($result);

til

$result = mysql_fetch_array($query);
Avatar billede olebole Juniormester
18. oktober 2007 - 20:13 #9
- og så bør du nok forholde dig til spørgsmålene: "Hedder feltet i DB'en 'ID' eller 'id'? Hedder variablen 'ID' eller 'id'?". Det er ekstremt vigtigt  ;o)
Avatar billede nielle Nybegynder
18. oktober 2007 - 20:22 #10
olebole >> Umiddelbart ville jeg forvente at der så kom en SQL fejl, hvis det havde en betydning?
Avatar billede coldray Nybegynder
18. oktober 2007 - 20:22 #11
Sådan, nu melder den ingen fejl - men tilgengæld kommer der stadig ikke noget fra databasen, jeg forstår det simpelthen ikke!

Jeg har 7 rækker i min database, fra ID 1 -> 7.

Koden giver ingen fejl, og den falder ikke i if-sætningernes die's.

Der er tekst til samtlige [username] i tabellen.

<?
include('opendb.php');

if( isset( $_GET['ID'] ) )
  $sID = $_GET['ID'];
else
  $sID = null;


if( $sID !== null ) {
$query = mysql_query("SELECT username FROM brugere WHERE ID = '$sID'") or die(mysql_error());
$result = mysql_fetch_assoc($query);
  if( $query == null )
    die("Fandt ikke brugeren");

$log = mysql_fetch_assoc($result);
$sUsername = $log['username'];
echo ($sUsername);
}
Avatar billede coldray Nybegynder
18. oktober 2007 - 20:23 #12
Jeg kom forresten af med de warnings ved at omdøbe min $id variabel til $sID konsekvent, som olebole også gjorde opmærksom på.
Avatar billede nielle Nybegynder
18. oktober 2007 - 20:25 #13
Det var nu ikke det olebole skrev - det var database-felte han spurgte til.
Avatar billede nielle Nybegynder
18. oktober 2007 - 20:27 #14
Tid til noget dqbugning:

if ($sID !== null) {
    $sql = "SELECT username FROM brugere WHERE ID = $sID";

    echo "DEBUG: $sql<br>";

    $query = mysql_query($sql) or die(mysql_error());
    $result = mysql_fetch_assoc($query);
    if( $query == null )
        die("Fandt ikke brugeren");

    $log = mysql_fetch_assoc($result);
    $sUsername = $log['username'];
    echo $sUsername;
}
Avatar billede olebole Juniormester
18. oktober 2007 - 21:40 #15
Kan du ikke også lige kopiere resultatet af denne kode herind:

<xmp>
<?php
// Forbind til databasen her

$sql = "SHOW CREATE TABLE `brugere`";
$res = mysql_query( $sql ) or die ( mysql_error() );
$row = mysql_fetch_assoc($res);

print $row["Create Table"];
?>
</xmp>
Avatar billede olebole Juniormester
18. oktober 2007 - 21:41 #16
- og du bedes også kopiere den URL, du kalder dokumentet med, herind  :)
Avatar billede erikjacobsen Ekspert
18. oktober 2007 - 23:31 #17
Kan vi ikke holde det helt simpelt og efter almindelige principper uden det vrøvl, der blev introduceret i første indlæg - og som ingen rigtig har lagt mærke til. Fy! ;)

<?
include('opendb.php');

if( isset( $_GET['ID'] ) ) {
  $sID = $_GET['ID'];
  $query = mysql_query("SELECT username FROM brugere WHERE ID = '$sID'") or die(mysql_error());
  if ($result = mysql_fetch_assoc($query)) {
    $sUsername = $result['username'];
    print "Username: $sUsername";
  } else {
    print "Ingen bruger med $sID";
  }
} else {
  print "Angiv venligst et ID";
}

?>

Det er utestet ... men sørger for at der kun siges mysql_fetch_....  een gang. I nogle tilfælde er 2 for meget ;)
Avatar billede coldray Nybegynder
19. oktober 2007 - 09:32 #18
Sådan olebole:

CREATE TABLE `brugere` (
  `ID` int(1) NOT NULL auto_increment,
  `username` text NOT NULL,
  `password` text NOT NULL,
  `status` int(1) NOT NULL default '0',
  UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Brugere til bødekassen'

og URLen:
http://coldray.dk/.../default.php?page=history&id=1

Det gik op for mig at det måske var pga $_GET['ID'] er med stort, og det er med småt i URLen - men hvis jeg ændrer det til småt i koden, altså $sID = $_GET['id']; , så får jeg fejl:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /.../history.php on line 16
Avatar billede coldray Nybegynder
19. oktober 2007 - 09:36 #19
Ah okay, nu ser det ud til at virke - der var nogle fejl omkring netop mysql_fetch_assoc(), hvorfor jeg havde to til at starte med ved jeg virkelig ikke!

Hvis I vil smide et svar, så kan i få nogle velfortjente (ekstra)points!
Avatar billede nielle Nybegynder
19. oktober 2007 - 09:37 #20
Det skal være et stort "ID" i koden - det er derimod ligegyldigt hvad den hedde inden for i din

$_GET[' stort eller småt her ... det har ingen betydning ']
Avatar billede nielle Nybegynder
19. oktober 2007 - 09:41 #21
Du har da ikke 2 x mysql_fetch_array() i den kode du postede?

Men hvis det var tilfældet så er forklaringen jo simpel nok: 1. gang fandt den det der skulle bruges, og 2. gang forsøgte den at finde den næste post ... men siden at der jo kun er een post som svare til søgekriteriet så finder denne selvfølgelig ikke noget 2. gang.
Avatar billede erikjacobsen Ekspert
19. oktober 2007 - 10:38 #22
Nielle: I 18/10-2007 20:27:47 har du kopieret noget kode med 2 af slagsen ;) ;)
Avatar billede nielle Nybegynder
19. oktober 2007 - 10:43 #23
Korrekt, men det var jo noget som kom fra 18/10-2007 19:20:14 og ikke det originale spørgsmål...
Avatar billede erikjacobsen Ekspert
19. oktober 2007 - 10:48 #24
Korrekt igen, men hvorfor dog debugge noget, der er eklatant forkert.
Avatar billede nielle Nybegynder
19. oktober 2007 - 10:52 #25
Jeg er helt enig i din kommentar 18/10-2007 23:31:07 - *rødmer*

Men det den med dobbelte mysql_fetch_array() var ikke med i den oprindelig post, og alligevel lyder det (19/10-2007 09:36:44) som om at der var noget i den stil. Eller også har vi bare fået forvirret alt og alle (pånær en enkelt læser muligvis). ;^)
Avatar billede erikjacobsen Ekspert
19. oktober 2007 - 10:54 #26
Ja, og forvirringen opstod med det første indlæg, der er noget vrøvl.
Avatar billede olebole Juniormester
19. oktober 2007 - 16:05 #27
nielle >> Hvad mener du med:
    "$_GET[' stort eller småt her ... det har ingen betydning ']"

Når han kalder med:
    http://www.domain.dk/sti/fil.php?id=noget

- vil $id ikke indeholde noget ved:
    $id = $_GET["ID"];

- mens den her vil indeholde 'noget':
    $id = $_GET["id"];
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