MySQL Einzelne Einträge abrufen

dsNDesign

Erfahrenes Mitglied
Hi,
ich habe eine Datenbank, in der sich mehrere Einträge befinden. Diese habe ich alle abgerufen. Nun zu meiner Frage. Die Einträge befinden sich alle untereinander. Nun möchte ich, dass man aus der "Liste" mit den Einträge einzelne auswählen kann. Das soll ungefähr so wie bei Wordpress funktionieren. Da sind ja alle News untereinander. Wenn man jetzt eine anklickt, wird nur die angeklickte angezeigt. Wie setze ich das um, dass ich so einzelne Datenbank einträge mit einem Mausklick auswählen und anzeigen lassen kann?

Ich hoffe man versteht was ich meine :)

Grüße

EDIT:
Ich habe es jetzt so, dass ich per Link die ID abrufen kann. Der Titel ist also immer ein Link mit der dazugehörigen id.
Der Link sieht dann immer wiefolgt aus: /index.php?id=25
Jedoch werden dann immernoch alle Einträge angezeigt und nicht nur der, mit der jeweiligen id. Wie mache ich es, dass dann nur der Eintrag mit z.B. der id 25 angezeigt wird?

EDIT2:
Ich hab hier mal den ganzen momentanen Code:
PHP:
<?php include_once("db_news.php");

$sql = "SELECT * FROM `news`;";
$eintrage = mysql_num_rows(mysql_query($sql));
$maxproseite = 3;
 
 
$i = 0;
$ab =1;
if (isset($_GET['page'])) $ab = $_GET['page'];

$anzahl_seiten = ($eintrage / $maxproseite);

if (!isset($_GET['page'])) {
    $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT 0,".$maxproseite.";";  
} else {
    $abeintrag = $_GET['page'] * $maxproseite - $maxproseite;
    $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT ".$abeintrag.",".$maxproseite.";";
}
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
    echo '
  <div style="margin-left:10px">
  <a href="index.php?id='.$row['id'].'"><b>'.$row['titel'].'</b></a><br />
  <a class="datum">'.$row['datum'].'</a><br />
  '.$row['text'].'<br /><br /></div>
  <div align="center"><img src="image/grenze.png" alt="gre"/></div><br />';
    }
$i=$ab ;
if($i > 1)
{
   echo "<a href=\"index.php?section=gb&amp;page=".($i-1)."\">&lt;&lt;Zur&uuml;ck</a> ";
} 
if($i <= $anzahl_seiten)
{
   echo "&nbsp;&nbsp;<a href=\"index.php?section=gb&amp;page=".($i+1)."\">N&auml;chste&gt;&gt;</a>";
}


?>

oben der row['titel'] wird ja mi der id verlinkt. Wenn man auf diesen klickt, soll nur dieser Eintrag angezeigt werden.
 
Zuletzt bearbeitet:
also. inwzischen habe ich es hinbekommen, dass wenn ich auf den titel klicke, dass es durch die id den eintrag anzeigt. jedoch ist es im code bisher nur so, dass es den eintrag unten unter den anderen anzeigt, da ich es ja auch einfach so geschrieben habe.

so sieht es aus:
PHP:
<?php include_once("db_news.php");

$sql = "SELECT * FROM `news`;";
$eintrage = mysql_num_rows(mysql_query($sql));
$maxproseite = 3;
 
$i = 0;
$ab =1;
if (isset($_GET['page'])) $ab = $_GET['page'];

$anzahl_seiten = ($eintrage / $maxproseite);

if (!isset($_GET['page'])) {
    $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT 0,".$maxproseite.";";  
} else {
    $abeintrag = $_GET['page'] * $maxproseite - $maxproseite;
    $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT ".$abeintrag.",".$maxproseite.";";
}
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
    echo '
  <div style="margin-left:10px">
  <a href="index.php?id='.$row['id'].'"><b>'.$row['titel'].'</b></a><br />
  <a class="datum">'.$row['datum'].'</a><br />
  '.$row['text'].'<br /><br /></div>
  <div align="center"><img src="image/grenze.png" alt="gre"/></div><br />';
    }
$i=$ab ;
if($i > 1)
{
   echo "<a href=\"index.php?section=gb&amp;page=".($i-1)."\">&lt;&lt;Zur&uuml;ck</a> ";
} 
if($i <= $anzahl_seiten)
{
   echo "&nbsp;&nbsp;<a href=\"index.php?section=gb&amp;page=".($i+1)."\">N&auml;chste&gt;&gt;</a>";
}

// einzelner Eintrag
$id = $_GET['id'];

 $sql2 = mysql_query("SELECT * FROM news WHERE id = '$id'");
 if($row = mysql_fetch_assoc($sql2)) {
    echo '
  <div style="margin-left:10px">
  <a href="index.php?id='.$row['id'].'"><b>'.$row['titel'].'</b></a><br />
  <a class="datum">'.$row['datum'].'</a><br />
  '.$row['text'].'<br /><br /></div>
  <div align="center"><img src="image/grenze.png" alt="gre"/></div><br />';
}
?>

Nun möchte ich mit einer if-Anweisung abfragen, ob die URL nur index.php beträgt oder z.B. index.php?id=24. Ich möchte es nämlich so machen, dass bei index.php ganz normal die einträge untereinander angezeigt werden, und wenn noch ein ?id=24 dabei ist, soll nur der Eintrag mit der dazugehörigen id angezeigt werden.

Wie kann ich mit den hinteren Teil der URL überprüfen lassen (also das ?id=24)?

Grüße
 
Zuletzt bearbeitet:
Ich weiß auch nicht so genau, wo das Problem lag. Irgendwie stand ich auf dem Schlauch.

Inzwischen geht es. Hier mein Final Code:
PHP:
<?php include_once("db_news.php");

$sql = "SELECT * FROM `news`;";
$eintrage = mysql_num_rows(mysql_query($sql));
$maxproseite = 3;
 
$i = 0;
$ab =1;
if (isset($_GET['page'])) $ab = $_GET['page'];

$anzahl_seiten = ($eintrage / $maxproseite);

if (!isset($_GET['page'])) {
    $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT 0,".$maxproseite.";";  
} else {
    $abeintrag = $_GET['page'] * $maxproseite - $maxproseite;
    $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT ".$abeintrag.",".$maxproseite.";";
}
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
	if(!isset($_GET['id'])) {
    echo '
  <div style="margin-left:10px">
  <a href="index.php?id='.$row['id'].'"><b>'.$row['titel'].'</b></a><br />
  <a class="datum">'.$row['datum'].'</a><br />
  '.$row['text'].'<br /><br /></div>
  <div align="center"><img src="image/grenze.png" alt="gre"/></div><br />';
    }}
$i=$ab ;
if($i > 1 and !isset($_GET['id']))
{
   echo "<a href=\"index.php?section=gb&amp;page=".($i-1)."\">&lt;&lt;Zur&uuml;ck</a> ";
} 
if($i <= $anzahl_seiten and !isset($_GET['id']))
{
   echo "&nbsp;&nbsp;<a href=\"index.php?section=gb&amp;page=".($i+1)."\">N&auml;chste&gt;&gt;</a>";
}

// einzelner Eintrag
$id = $_GET['id'];

 $sql2 = mysql_query("SELECT * FROM news WHERE id = '$id'");
 if($row = mysql_fetch_assoc($sql2) and isset($_GET['id'])) {
    echo '
  <div style="margin-left:10px">
  <a href="index.php?id='.$row['id'].'"><b>'.$row['titel'].'</b></a><br />
  <a class="datum">'.$row['datum'].'</a><br />
  '.$row['text'].'<br /><br /></div>
  <div align="center"><img src="image/grenze.png" alt="gre"/></div><br />';
}
?>
 
Hi,

noch ein Hinweis zur Sicherheit: Du solltest niemals Daten aus Usereingaben ungeprüft verwenden (z.B. in Datenbankabfragen). Google mal nach dem Stichwort SQL-Injection.

LG
 
du solltest auch noch alles prüfen was der nutzer verändern kann!!

PHP:
$id = $_GET["id"];
$id = mysql_real_escape_string($id);

glaube dem nutzer nie :rolleyes:
 
Hi,

da die id aber vermutlich ein integer-Wert ist, sollte man sie auch dementsprechend behandeln. mysql_real_escape_string() maskiert Zeichen mit Sonderbedeutung in Strings. Ich würde hier eher abfragen, ob $_GET['id'] überhaupt ein integer ist.

LG
 
Zurück