Zur Navigation

Daten einer Zeile abrufen

1 Tilman

Hallo!

Ich habe eine Liste von Büchern auf meiner Webseite, die ich in eine Datenbank eintragen will, damit ich bei einem eventuellen Designwechsel nicht nocheinmal alle Daten eingeben muss.

Es soll die Spallten wie z.B. autor, titel, inhalt und id in der Datenbank geben, jedes Buch hat seine eigene Zeile.

Ich hätte gerne, dass wenn man z.B. die Seite buecher.php?id=1 aufruft, dann automatisch die Felder autor, titel usw. mit den Daten aus der Zeile mit id=1 gefüllt werden.

Wie kann ich das machen?

27.05.2008 17:19

2 Jörg

Abrufen kannst du die Daten mit einer einfachen SELECT-Abfrage inklusive WHERE-Klausel

<php

$id = (int)$_GET['id'];

/* Datenbankverbindung aufbauen, falls noch nicht geschehen */

$buch = mysql_query("SELECT autor, titel, inhalt FROM buecher WHERE id = " . $id);

list($autor, $titel, $inhalt) = mysql_fetch_row($buch);

?>

27.05.2008 17:35

3 Tilman

<php

$id = (int)$_GET['id'];

$buch = mysql_query("SELECT autor, titel, inhalt FROM buecher WHERE id = " . $id);

list($autor, $titel, $inhalt) = mysql_fetch_row($buch);

?>

Soll anstatt $buch der Name der Tabelle stehen ($tabellenname)?

Ich benutze folgenden Code, um die Verbindung aufzunehemn:
<?
  $host = "localhost";
  $user = "tilman";
  $pass = "test";
  $database = "datenbanknamen";
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);
?>

28.05.2008 15:13

4 Jörg

Das $buch bezeichnet in dem Beispielcode das Ergebnis der SELECT-Abfrage - dafür kannst du auch eine andere Bezeichnung wählen, wie z.B. $result. Der Tabellenname wird in der FROM-Klausel aufgeführt

$result = mysql_query("SELECT autor, titel, inhalt FROM tabellenname WHERE id = " . $id);
list($autor, $titel, $inhalt) = mysql_fetch_row($result);

28.05.2008 17:38

5 Tilman

Hallo!

Bei mir funktioniert das irgendwie nicht!
Was mache ich falsch?


<?
  $host = "localhost";
  $user = "tilman";
  $pass = "test";
  $database = "datenbankname";
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);
?>
<php
$dz = mysql_query("SELECT autor, titel, inhalt FROM buecherdaten WHERE id = " . $id)";
list($autor, $titel, $inahlt) = mysql_fetch_row($dz);

?>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Testseite - <?=$titel?> (<?=$autor?>)</title>
<link rel="stylesheet" href="../css/format.css" type="text/css">
<link rel="stylesheet" type="text/css" href="../css/books.css">
<link rel="stylesheet" media="print" type="text/css" href="../css/print.css">
</head>
<body>
<table width="920" border="0" cellspacing="0" cellpadding="0" id="maintable">
<? include ("../scripts/head.php"); ?>
<? include ("menu.php"); ?>
<tr><td width="690" id="inhalt">
<h2>&UUML;berschrift</h2>
<div width="680">

...
</body>
</html>

29.05.2008 14:17

6 Jörg

Die ID musst du noch aus dem Query String auslesen

<php

$id = (int)$_GET['id'];

$host = "localhost";
  $user = "tilman";
  $pass = "test";
  $database = "datenbankname";
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);

Und hier ist das Anführungszeichen am Ende überflüssig:

$dz = mysql_query("SELECT autor, titel, inhalt FROM buecherdaten WHERE id = " . $id)";

29.05.2008 14:27 | geändert: 29.05.2008 14:29

7 Tilman

Dort, wo dann der Autorenname stehen soll, wie soll ich den Code denn schreiben?

Ich glaube, dass dieser Code nicht richtig ist:
<?=$autor?>

29.05.2008 15:05

8 Jörg

Du kannst den Autorennamen schon so einfügen, wie du das gemacht hast. Ich würde zur Sicherheit noch die Variablen wegen eventuell vorhandener Steuerzeichen vor der Ausgabe im HTML-Dokument mit htmlentities() oder htmlspecialchars() behandeln

$dz = mysql_query("SELECT autor, titel, inhalt FROM buecherdaten WHERE id = " . $id);
list($autor, $titel, $inhalt) = mysql_fetch_row($dz);

$autor = htmlspecialchars($autor);
$titel = htmlspecialchars($titel);
$inhalt = htmlspecialchars($inhalt);

Wenn immer noch nichts ausgegeben wird, kannst du dir (nach der Datenbankabfrage) mit mysql_error() einen eventuellen Fehler in der Datenbankabfrage ausgeben lassen

$dz = mysql_query("SELECT autor, titel, inhalt FROM buecherdaten WHERE id = " . $id);

echo mysql_error();

... und gegebenenfalls den Fehler hier posten...

29.05.2008 16:47 | geändert: 29.05.2008 16:48

9 Tilman

Also, bei mir kommt da auch keine Fehlermeldung!

Bei mir sieht der Code momentan so aus:
<?
  $id = (int)$_GET['id'];
  $host = "localhost";
  $user = "tilman";
  $pass = "test";
  $database = "datenbankname";
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);

?>

<php
$ergebnis = mysql_query("SELECT autor, titel, inhalt FROM buecherdaten WHERE id = " . $id);
echo mysql_error();

$autor = htmlspecialchars($autor);
$title = htmlspecialchars($titel);
$buchtext = htmlspecialchars($inhalt);

?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Testseite - <?=$titel?> ( <?=$autor?> )</title>
<link rel="stylesheet" href="../css/format.css" type="text/css">
<link rel="stylesheet" type="text/css" href="../css/books.css">
<link rel="stylesheet" media="print" type="text/css" href="../css/print.css">

</head>
<body>
<table width="920" border="0" cellspacing="0" cellpadding="0" id="maintable">
<? include ("../scripts/head.php"); ?>
<? include ("menu.php"); ?>

<tr><td width="690" id="inhalt">

<h2><?=$autor?></h2>
<div width="680">

<div id="lspalt">


<div class="tbook" style="margin-bottom: 10px;">
<div class="kuschrift">Das Buch</div>
<div class="textb">

<b>Inhalt:</b><br>
<?=$inhalt?>
</div>
</div>

<div class="tbook">
<div class="kuschrift">Über den Autor</div>
<div class="textb">
<? include ("autoren/mats_wahl.php"); ?>
</div>
</div>


</div>

<div id="rspalt">



<? include ("rechtspalte.php"); ?>

</div>

<div class="footer"></div></div>
<? include ("buecherzusatz.php"); ?>

</td>
<td width="210" id="tdright">
<? include ("righttr.php"); ?>
</td>
</tr>
<? include ("../scripts/bottomline.php"); ?>
</table>
</body>
</html>

29.05.2008 18:02

10 Jörg

Hier fehlt noch eine Zeile:

<php
$ergebnis = mysql_query("SELECT autor, titel, inhalt FROM buecherdaten WHERE id = " . $id);
echo mysql_error();
list($autor, $titel, $inhalt) = mysql_fetch_row($dz);
$autor = htmlspecialchars($autor);
$title = htmlspecialchars($titel);
$buchtext = htmlspecialchars($inhalt);

?>

Wie rufst du das Script auf - wie oben beschrieben als buecher.php?id=1 (?)

Und der Datensatz mit dieser ID ist in der Datenbanktabelle auch vorhanden?

29.05.2008 18:45