Avatar billede gil-galad Nybegynder
28. juni 2004 - 15:44 Der er 28 kommentarer og
1 løsning

Hjælp til MySQL udtræk

Hejsa

Jeg har en tabel der ser sådan ud:
CREATE TABLE `solsystemet` (
  `id` varchar(50) default NULL,
  `subid` varchar(50) default NULL,
  `overskrift` varchar(50) default NULL,
  `billede1` varchar(50) default NULL,
  `billede2` varchar(50) default NULL,
  `billede3` varchar(50) default NULL,
  `tekst` text
)
'id' kan fx være merkur el. jorden

'subid' kan enten være NULL, fakta, moon, moonfakta

'billede1-3' kan enten være NULL eller stien til et billede, altså jeg ved ikke om alle, ingen eller fx. to af dem er fyldt(med en url fx images/jorden.jpg).


og et script der ser sådan ud:
<?php
$id = ($_GET["id"]);
$subid = ($_GET["subid"]);

if ($id){
$result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id'") or die(mysql_error());
if (mysql_num_rows($result)>0) {
  while($row = mysql_fetch_array($result) ) {
  echo "<h3>".$row['overskrift']."</h3>".**BILLEDERNE HER!**."".$row['tekst']."<br>";
}}
else {echo "E..........

Jeg vil gerne have 'id' trukket ud af databasen, medmindre 'subid' ikke er NULL. Hvis 'subid' fx. er 'moon' skal teksten ud fra 'moon' trækkes ud sammen med 'overskrif' og billederne1-3.

Billederne skal skrives ud som html, så jeg skal kende height/width så hvis PHP finder height/width, og så automatisk sætter dem på <img> tag'et ville det være kanon!

Screenshot af min tabel: http://spiff.users.whitehat.dk/tabel.jpg

...
Avatar billede jaw Nybegynder
28. juni 2004 - 15:47 #1
Der er noget jeg ikke helt forstår... Men det med størrelserne på billederne, kan du i hvert fald løse med:

$size1 = getimagesize($row[billede1]);
echo "<img src='$row[billede1]' width='$size1[0]' height='$size1[1]'>

Resten må du uddybe lidt...
Avatar billede gil-galad Nybegynder
28. juni 2004 - 15:52 #2
Det er noget svært at forklare...

FX: jupiter

Id bestemmer hvilken planet man vil se ( http://spiff.users.whitehat.dk/index.php?action=solsystemet )

Men man kan også vælge at læse om fx. månerne til en planet, det er det subid skal hjælpe med. Hvis den = moon skal der trækkes ud af databasen der hvor id=jupiter og subid = moon  ( http://spiff.users.whitehat.dk/tabel.jpg )

Sig til hvis der er noget du ikke forstår
Avatar billede gil-galad Nybegynder
28. juni 2004 - 15:53 #3
Hvis den = moon        ==          Hvis subid = moon
Avatar billede jaw Nybegynder
28. juni 2004 - 15:55 #4
Sådan her?
SELECT * FROM solsystemet WHERE id = '$subid'

Så vil den udtage alle rækker, hvor id har samme værdi som subid -> altså hvis $subid indeholder "moon" vil den udhente alle rækker hvor id er "moon"
Avatar billede gil-galad Nybegynder
28. juni 2004 - 16:06 #5
Ikke helt. Forestil dig at jeg har skrevet om alle planeterne, deres måner, fakta om planeterne og fakta om månerne. Alle planeterne ligger så i denne tabel. planeter = id   

Underkatergorierne (deres måner, fakta om planeterne og fakta om månerne) = subid.   

ved planeter uden måner liger der ikke subid = fakta om månerne, eller deres måner.

om det er teksten om planeten eller en underkategori, afgøres derfor af subid og dens indhold...

Her er det forklaret:
http://spiff.users.whitehat.dk/tabel2.jpg
Avatar billede jaw Nybegynder
28. juni 2004 - 16:11 #6
Er det på samme side det her? Altså det bliver styret af ?subid= id= i adresse-linjen?
Avatar billede gil-galad Nybegynder
28. juni 2004 - 16:13 #7
ja det styres af ?subid= id= i adresse-linjen... men det link jeg har givet dig, er en gammel version der ikke bruger database...
Avatar billede jaw Nybegynder
28. juni 2004 - 16:18 #8
Ok, jeg prøve så lige igen :)

if(!$_GET['subid']) {
  $subid = "NULL";
} else {
  $subid = $_GET['subid'];
}

$result = mysql_query("SELECT * FROM solsystemet WHERE id = '$id' AND subid = '$subid'");

Den her vil sætte $subid til "NULL" hvis den ikke er sat i adresse-linjen - altså så den udtager den række hvor subid er "NULL". Er det sådan du mener?
Avatar billede gil-galad Nybegynder
28. juni 2004 - 16:21 #9
den er da automatisk NULL hvis der ikke står noget i den ... altså den er blank? eller er det mig der tager fejl?  (der står ikke fysisk NULL i databasen, men ingenting. Kaldes ingentin ikke NULL?)
Avatar billede jaw Nybegynder
28. juni 2004 - 16:37 #10
Joh, men prøver at forstå hvad det er du vil... For jeg er stadig meget forvirret...

Hvis KUN id er sat i adresse-linien, så skal den udhente rækker hvor id = $id
Hvis BÅDE id og subid er sat, skal den udhente rækker hvor id = $id og subid = $subid

?
Avatar billede gil-galad Nybegynder
28. juni 2004 - 16:46 #11
præcis :-)
Avatar billede jaw Nybegynder
28. juni 2004 - 17:10 #12
Ok, så kan du jo:

if(isset($_GET['id']) && $_GET['id'] != "") {
  $$result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id'") or die(mysql_error());
} elseif($isset($_GET['id']) && $_GET['id'] != "" && isset($_GET['subid']) && $_GET['subid'] != "") {
$result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id' AND subid = '$subid'") or die(mysql_error());
}


Og den der med NULL skal du bare glemme igen, der havde jeg en (lille) hjerneblødning :)
Avatar billede gil-galad Nybegynder
28. juni 2004 - 17:18 #13
ok, er lidt ring til PHP, så hvis du vil hvise mig hvordan jeg skriver data'ene ud ville det være fedt.

Det skal stå sådan:
echo $overskrift, $billederne*, $tekst;

men mangler der ikke noget med  if( $row = mysql_fetch_array($index) ) {  og sådan ?
Avatar billede jaw Nybegynder
28. juni 2004 - 17:26 #14
Så må vi være ude i noget a'la:

<?

$id = ($_GET["id"]);
$subid = ($_GET["subid"]);


if(isset($_GET['id']) && $_GET['id'] != "") {
  $result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id'") or die(mysql_error());
} elseif($isset($_GET['id']) && $_GET['id'] != "" && isset($_GET['subid']) && $_GET['subid'] != "") {
  $result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id' AND subid = '$subid'") or die(mysql_error());
}

if (mysql_num_rows($result)>0) {
  while($row = mysql_fetch_array($result) ) {
    echo $row[overskrift];
    for($i = 1; $i <= 3; $i++) {
      $img = ${'row[billede' . $i . ']'};
      if($img != "") {
        $size = getimagesize($img);
        echo"<img src='$img' width='$size[0]' height='$size[1]'>";
      }
    }
    echo $row[tekst];
  }
}

?>

Du kan jo teste det, men tag altid lige en backup af filen hvis du overskriver noget...
Avatar billede gil-galad Nybegynder
28. juni 2004 - 17:28 #15
Avatar billede jaw Nybegynder
28. juni 2004 - 17:40 #16
Ok, ja det kan jeg godt se hvorfor... Jeg smider lige det hele i en db hos mig, for at (så vidt muligt!) undgå flere fejl...

Øjeblik...
Avatar billede gil-galad Nybegynder
28. juni 2004 - 17:41 #17
:-)
Avatar billede jaw Nybegynder
28. juni 2004 - 17:58 #18
Oooookey, så lad os prøve igen:

<?
$id = ($_GET["id"]);
$subid = ($_GET["subid"]);


if(isset($_GET['id']) && $_GET['id'] != "" && $_GET['subid'] == "") {
  $result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id' AND `subid` IS NULL") or die(mysql_error());
} elseif(isset($_GET['id']) && $_GET['id'] != "" && isset($_GET['subid']) && $_GET['subid'] != "") {
  $result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id' AND subid = '$subid'") or die(mysql_error());
}

if (mysql_num_rows($result)>0) {
  while($row = mysql_fetch_array($result) ) {
    echo $row[overskrift] . " ";
    if($row[billede1] != "") {
      $size = getimagesize($row[billede1]);
      echo"<img src='$row[billede1]' width='$size[0]' height='$size[1]'>";
    }
    if($row[billede2] != "") {
      $size = getimagesize($row[billede2]);
      echo"<img src='$row[billede2]' width='$size[0]' height='$size[1]'>";
    }
    if($row[billede3] != "") {
      $size = getimagesize($row[billede3]);
      echo"<img src='$row[billede3]' width='$size[0]' height='$size[1]'>";
    }
    echo $row[tekst];
  }
}

?>
Avatar billede gil-galad Nybegynder
28. juni 2004 - 18:19 #19
det virker perfekt! smid et svar!

Har flettet det ind i den resterende kode nu,  kan du se noget problem eller kodemæssig dumhed?

<?
$id = ($_GET["id"]);
$subid = ($_GET["subid"]);

if ($id){
if(isset($_GET['id']) && $_GET['id'] != "" && $_GET['subid'] == "") {
  $result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id' AND `subid` IS NULL") or die(mysql_error());
} elseif(isset($_GET['id']) && $_GET['id'] != "" && isset($_GET['subid']) && $_GET['subid'] != "") {
  $result = mysql_query("SELECT subid,overskrift,billede1,billede2,billede3,tekst FROM solsystemet WHERE id = '$id' AND subid = '$subid'") or die(mysql_error());
}

if (mysql_num_rows($result)>0) {
  while($row = mysql_fetch_array($result) ) {
    echo "<h3>".$row[overskrift]."</h3>" . " ";
    if($row[billede1] != "") {
      $size = getimagesize($row[billede1]);
      echo "<img src=\"$row[billede1]\" width=\"$size[0]px\" height=\"$size[1]px\">";
    }
    if($row[billede2] != "") {
      $size = getimagesize($row[billede2]);
      echo "<br><img src=\"$row[billede2]\" width=\"$size[0]px\" height=\"$size[1]px\">";
    }
    if($row[billede3] != "") {
      $size = getimagesize($row[billede3]);
      echo "<br><img src=\"$row[billede3]\" width=\"$size[0]px\" height=\"$size[1]px\">";
    }
    echo $row[tekst];
  }
}
}else{
$index = mysql_query("SELECT overskrift,tekst FROM standart WHERE id = 'solsystemet'") or die(mysql_error());
if( $row = mysql_fetch_array($index) ) {
  echo "<h3>".$row['overskrift']."</h3>".$row['tekst']."";
}
else{echo "En fejl er opstået. Kontakt Webmaster.";}
}
?>
Avatar billede jaw Nybegynder
28. juni 2004 - 18:21 #20
Næh, ikke umiddelbart... Jeg har leget lidt videre med min variable variabel (hedder det vist) som jeg ikke kunne få til at virke... Det kan jeg nu :) Så jeg synes du skal udskifte:

    if($row[billede1] != "") {
      $size = getimagesize($row[billede1]);
      echo "<img src=\"$row[billede1]\" width=\"$size[0]px\" height=\"$size[1]px\">";
    }
    if($row[billede2] != "") {
      $size = getimagesize($row[billede2]);
      echo "<br><img src=\"$row[billede2]\" width=\"$size[0]px\" height=\"$size[1]px\">";
    }
    if($row[billede3] != "") {
      $size = getimagesize($row[billede3]);
      echo "<br><img src=\"$row[billede3]\" width=\"$size[0]px\" height=\"$size[1]px\">";
    }

med:

      for($i = 1; $i <= 3; $i++) {
        $img = $row{"billede" . $i};
        if($img != "") {
            $size = getimagesize($img);
          echo "<img src='$img'>";
        }
      }
Avatar billede jaw Nybegynder
28. juni 2004 - 18:22 #21
baah,
echo "<img src='$img'>";

skal selvf. være:
echo "<img src='$img' width='$size[0]' height='$size[1]'>";
Avatar billede gil-galad Nybegynder
28. juni 2004 - 18:32 #22
ok, men så må du hjælpe mig... har tilføjet 3 nye felter i tabellen, og kalder dem med  alt=\"$row[alt1]\"  alt=\"$row[alt2]\"  alt=\"$row[alt3]\"  altså så alt="hej" også kommer med på billederne

fx:
<img src=\"$row[billede3]\" alt=\"$row[alt3]\" width=\"$size[0]px\" height=\"$size[1]px\">";
Avatar billede jaw Nybegynder
28. juni 2004 - 18:35 #23
for($i = 1; $i <= 3; $i++) {
        $alt = $row{"alt" . $i};
        $img = $row{"billede" . $i};
        if($img != "") {
            $size = getimagesize($img);
          echo "<img src='$img' width='$size[0]' height='size[1]' alt='$alt'>";
        }
      }

men der er nu heller ikke noget galt i din løsning, resultatet bliver den samme... Det smarte er bare, hvis du en dag måske ender med 50 billeder, så kan det gøres på 3-4 linier...
Avatar billede gil-galad Nybegynder
28. juni 2004 - 18:38 #24
nu outputter den height='size[1]' i html'en?
Avatar billede jaw Nybegynder
28. juni 2004 - 18:39 #25
der mangler en $ i koden min fejl:

echo "<img src='$img' width='$size[0]' height='$size[1]' alt='$alt'>";
Avatar billede gil-galad Nybegynder
28. juni 2004 - 18:41 #26
Tak for din gode hjælp. Du har været yderst tålmodig :-)
Avatar billede jaw Nybegynder
28. juni 2004 - 18:42 #27
hehe, jeg kunne jo bare have ladet være med alle fejlene og misforståelserne i starten :)

Men jeg siger tak, du fik det hele til at funke?
Avatar billede gil-galad Nybegynder
28. juni 2004 - 18:47 #28
ja, du kan se det her: http://spiff.users.whitehat.dk/sql/index.php?action=solsystemet (kun venus er i databasen)
Avatar billede jaw Nybegynder
28. juni 2004 - 18:51 #29
Ok, perfekt :)
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