PHP Tabelle mit einer Funktion ausgeben

phoenix430

Lt. Commander
Registriert
Juni 2008
Beiträge
1.446
Hallo Leute,

ich habe ein kleines Formular zum übern erstellt. Das ganze funktioniert schon. Das ganze ist aber recht unübersichtlich.
PHP:
$_GET[id];

require("DatenbankSQL.php");

$auswertung2 =  "SELECT * FROM ausgeliehen WHERE Titelnr = "  . intval($_GET['id']) . " AND ISNULL(rueckgabedatum)";
    $ergebnis2 = mysql_query($auswertung2);
    if(mysql_num_rows($ergebnis2)<>0 ){
       echo '<td><span style="color: #FF0000;">Titel ist ausgeliehen</span></td>'."\r\n";
       echo '</tr>';
    }
    else{
       echo '<td><span style="color: #0000FF;">Titel ist verfügbar</span></td>'."\r\n";
       echo '</tr>';
    };

    $auswertung =   "SELECT Titel,Komponist,Herausgeber,Verlag,Anschaffungsdatum,Begleitmaterial,Ort,Standort,Bemerkungen,kat_typ.bezeichnung AS Kategoriebezeichnung,
                    kat_schwierigkeit.Bezeichnung AS Schwierigkeitsbezeichnung,kat_genre.Bezeichnung AS Genrebezeichnung,kat_fachbereich.Bezeichnung AS Fachbereichsbezeichnung,
                    kat_besetzung.Bezeichnung AS Besetzungsbezeichnung, kat_art.Bezeichnung AS Artbezeichnung
                    FROM titel
                    LEFT JOIN kat_typ ON titel.KAT_typ = kat_typ.id
                    LEFT JOIN kat_schwierigkeit ON titel.KAT_schwierigkeit = kat_schwierigkeit.ID
                    LEFT JOIN kat_genre ON titel.KAT_Genre = kat_genre.ID
                    LEFT JOIN kat_fachbereich ON titel.KAT_fachbereich = kat_fachbereich.ID
                    LEFT JOIN kat_besetzung ON titel.KAT_besetzung = kat_besetzung.ID
                    LEFT JOIN kat_art ON titel.KAT_art = kat_art.ID
                    WHERE titel.ID = " . intval($_GET['id']);
    $ergebnis = mysql_query($auswertung);
    while($row = mysql_fetch_object($ergebnis)){

error_reporting(-1);
echo '<table border="1" cellpadding="1" cellspacing="1" summary="">';
echo    '<tr>';
echo        '<td>'.'Titel'.'</td>';
echo        '<td>'.$row->Titel.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Komponist'.'</td>';
echo        '<td>'.$row->Komponist.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Herausgeber'.'</td>';
echo        '<td>'.$row->Herausgeber.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Verlag'.'</td>';
echo        '<td>'.$row->Verlag.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Anschaffungsdatum'.'</td>';
echo        '<td>'.$row->Anschaffungsdatum.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Begleitmaterial'.'</td>';
echo        '<td>'.$row->Begleitmaterial.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Ort'.'</td>';
echo        '<td>'.$row->Ort.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Standort'.'</td>';
echo        '<td>'.$row->Standort.'</td>';
echo    '</tr>';
echo        '<td>'.'Bemerkungen'.'</td>';
echo        '<td>'.$row->Bemerkungen.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Artbezeichnung'.'</td>';
echo        '<td>'.$row->Artbezeichnung.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Besetzungsbezeichnung'.'</td>';
echo        '<td>'.$row->Besetzungsbezeichnung.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Fachbereichsbezeichnung'.'</td>';
echo        '<td>'.$row->Fachbereichsbezeichnung.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Genrebezeichnung'.'</td>';
echo        '<td>'.$row->Genrebezeichnung.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Schwierigkeitsbezeichnung'.'</td>';
echo        '<td>'.$row->Schwierigkeitsbezeichnung.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Kategoriebezeichnung'.'</td>';
echo        '<td>'.$row->Kategoriebezeichnung.'</td>';
echo    '</tr>';
    }
echo '</table>';
?>
Ist es möglich am Ende meine Tabelle mit einer Funktion auszugeben? Und wenn ja wie? Könntet ihr mir einen Schubs in die richtige Richtung geben?
 
Nutz mal mysql_fetch_array(). Dann kannst du die Tabelle problemlos ohne viel Schreibarbeit erstellen.
PHP:
function fn( $Data )
{
  echo '<table border="1" cellpadding="1" cellspacing="1" summary="">';
  echo    '<tr>';
  foreach( $Data as $key => $value )
    echo '<td>'.$key.'</td><td>'.$value.'</td></tr><tr>';
  echo    '</tr>'; 
  echo '</table>';
}
 
Wenn ich fetch array benutze
PHP:
while($row = mysql_fetch_array($ergebnis)){

Bekomme ich in meinem Formular folgende Meldung
Code:
Notice: Trying to get property of non-object in C:\xampp\xampp\htdocs\weiterleiten.php on line 35
  
Komponist 
Notice: Trying to get property of non-object in C:\xampp\xampp\htdocs\weiterleiten.php on line 39

Benutze ich aber
PHP:
while($row = mysql_fetch_object($ergebnis)){
so wird alles richtig angezeigt?
 
Hast du auch die Schleife dementsprechend abgeändert? So wie die Fehlermeldung aussieht, versuchst du die Daten immer noch als Objekt zu behandeln, welches aber nun ein Array von Daten ist.
PHP:
while( $r = mysql_fetch_array( $ergebnis ) )
  fn( $r );
 
fetch_object ist die passende Methode für Deine Art auf die Werte zuzugreifen ($obj->val).
 
philippgerard schrieb:
fetch_object ist die passende Methode für Deine Art auf die Werte zuzugreifen ($obj->val).

OK das heißt
PHP:
while($row = mysql_fetch_object($ergebnis)){
war richtig so wie ich es hatte.
Wie kann ich es denn dann machen, dass ich nicht ständig
PHP:
echo '<table border="1" cellpadding="1" cellspacing="1" summary="">';
echo    '<tr>';
echo        '<td>'.'Titel'.'</td>';
echo        '<td>'.$row->Titel.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Komponist'.'</td>';
echo        '<td>'.$row->Komponist.'</td>';
echo    '</tr>';
echo    '<tr>';
echo        '<td>'.'Herausgeber'.'</td>';
echo        '<td>'.$row->Herausgeber.'</td>';
echo    '</tr>';
sagen muss. Das wiederholt sich ja. Kann ich das irgendwie zusammen fassen?
 
PHP:
echo '<table border="1" cellpadding="1" cellspacing="1" summary="">'; 
foreach($row as $key => $val)
{
   echo    '<tr>'; 
   echo        '<td>'.$key.'</td>'; 
   echo        '<td>'.$val.'</td>'; 
   echo    '</tr>'; 
}
echo '</table>';

Durchiterieren geht auch bei Objekten. Effektiv macht es bei dieser Schreibweise keinen Unterschied mehr, ob Du fetch_object oder fetch_array benutzt. Das Ergebnis ist identisch. Die Feldbenennung muss hier halt 1:1 mit dem gewünschten Spaltennamen übereinstimmen, was i.d.R. bei Datenbanktabellen nicht gegeben ist, es sei denn man kann sie alle selbst benennen...
 
Zuletzt bearbeitet:
OK danke, ich werde das mal ausprobieren.
Vielen Dank habe meins jetzt angebpasst und es funktioniert super :)
Leider habe ich nun ein weiteres Problem.
Aus diesem Code baue ich mir eine Abfrage zusammen. Leider wieder total Übersichtlich. Kann man das auch anders machen?
Wenn ja kann mir vlt. wieder jemand einen Stups in die Richtung geben? Vielen Dank
PHP:
<?php
echo '<table width="1000"  cellpadding="10" cellspacing="10" border="10">';
echo '<tr>';
echo '<th>Titel</th>';
echo '<th>Komponist</th>';
echo '<th>Herausgeber</th>';
echo '<th>Verlag</th>';
echo '<th>Ausgeliehen</th>';
echo '</tr>';

$titel=$_POST['titel'];
$beschreibung=$_POST['beschreibung'];
$begleitmaterial=$_POST['begleitmaterial'];
$typ=$_POST['typ'];
$herausgeber=$_POST['herausgeber'];
$ort=$_POST['ort'];
$standort=$_POST['standort'];
$beschreibung=$_POST['beschreibung'];
$begleitmaterial=$_POST['begleitmaterial'];
$art=$_POST['art'];
$fachbereich=$_POST['fachbereich'];
$schwierigkeit=$_POST['schwierigkeit'];
$komponist=$_POST['komponist'];
$verlag=$_POST['verlag'];
$besetzung=$_POST['besetzung'];
$genre=$_POST['genre'];

require("DatenbankSQL.php");

// Abfrage zusammen bauen

$abfrage="";
if ($titel <> ""){
    $suchworte = explode(" ",$titel);
    $count = count($suchworte);
    $abfrage.="(";
    for($i=0;$i <$count;$i++){
        $abfrage.="Titel LIKE '%".$suchworte[$i]."%'";
        if ($i<($count-1)){
            $abfrage.= " AND ";
        }
    }
    $abfrage.= " ) ";
}
if ($beschreibung <> ""){
    $suchworte = explode(" ",$beschreibung);
    $count = count($suchworte);
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
         $abfrage.= " (";
    }
    for($i=0;$i <$count;$i++){
        $abfrage.="Bemerkungen LIKE '%".$suchworte[$i]."%'";
        if ($i<($count-1)){
            $abfrage.= " AND ";
        }
    }
    $abfrage.= " ) ";
}
if ($begleitmaterial <> ""){
    $suchworte = explode(" ",$begleitmaterial);
    $count = count($suchworte);
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    for($i=0;$i <$count;$i++){
        $abfrage.="Begleitmaterial LIKE '%".$suchworte[$i]."%'";
        if ($i<($count-1)){
            $abfrage.= " AND ";
        }
    }
    $abfrage.= " ) ";
}
//  ID Liste

if ($typ <> 0){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.="KAT_typ = ".$typ;
    $abfrage.= " ) ";
}
if ($art <> 0){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.="KAT_art = ".$art."";
    $abfrage.= " ) ";
}

if ($fachbereich <> 0){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.="KAT_fachbereich = ".$fachbereich."";
    $abfrage.= " )";
}

if ($schwierigkeit <> 0){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.="KAT_schwierigkeit = ".$schwierigkeit."";
    $abfrage.= " )";
}

if ($besetzung <> 0){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.="KAT_besetzung = ".$besetzung."";
    $abfrage.= " )";
}

if ($genre <> 0){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.="KAT_genre = ".$genre."";
    $abfrage.= " )";
}
//  Liste

if (($herausgeber <> "") AND ($herausgeber <> "Bitte wählen")){
    if ($abfrage <> "") {
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.='herausgeber = "'.$herausgeber.'"';
    $abfrage.= " )";
}

if (($ort <> "") AND ($ort <> "Bitte wählen")){
    if ($abfrage <> "") {
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.='ort = "'.$ort.'"';
    $abfrage.= " )";
}

if (($standort <> "") AND ($standort <> "Bitte wählen")){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.='standort = "'.$standort.'"';
    $abfrage.= " )";
}

if (($komponist <> "") AND ($komponist <> "Bitte wählen")){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.='komponist = "'.$komponist.'"';
    $abfrage.= " )";
}

if (($verlag <> "") AND ($verlag <> "Bitte wählen")){
    if ($abfrage <> ""){
        $abfrage.= " AND (";
    }
    else {
        $abfrage.= " (";
    }
    $abfrage.='abfrage = "'.$abfrage.'"';
    $abfrage.= " )";
}

// Ausgabe
    $auswertung = "SELECT * FROM titel WHERE";
    $auswertung.= $abfrage;

$ergebnis = mysql_query($auswertung);
while($row = mysql_fetch_object($ergebnis)){

error_reporting(-1);
    // meine erste Abfrage hier wird die Auswahl des users angezeigt
    echo '<tr>'."\r\n";
    echo '<td><a href = "weiterleiten.php?id='.$row->ID.'" target ="blank"/>'.$row->Titel.'</a></td>'."\r\n";
    echo '<td>'.$row->Komponist.'</td>'."\r\n";
    echo '<td>'.$row->Herausgeber.'</td>'."\r\n";
    echo '<td>'.$row->Verlag.'</td>'."\r\n";
    $id=$row->ID;
    // hier soll eine zweite Abfrage erfolgen, die dem user sagt ob ein Titel verfügbar ist oder nicht und in der Spalte ausgeliehen angezeigt
    $auswertung2 =  "SELECT * FROM ausgeliehen WHERE Titelnr = $row->ID AND ISNULL(rueckgabedatum)";
    $ergebnis2 = mysql_query($auswertung2);
    if(mysql_num_rows($ergebnis2)<>0 ){
       echo '<td>Titel ist ausgeliehen</td>'."\r\n";
       echo '</tr>';
    }
    else{
       echo '<td>Titel ist verfügbar</td>'."\r\n";
       echo '</tr>';
    };
 }
    echo '</table>';
?>
ich weiß nicht ob es relevant ist, aber obiger Code bezieht sich auf mein voriges Dokument
PHP:
<?php

require("DatenbankSQL.php");

function Liste ($abfrage){
   $ergebnis = mysql_query($abfrage);
   $anzeige = array();
while($row = mysql_fetch_object($ergebnis))
   {
   $anzeige[] = $row->bezeichnung;
   }
foreach($anzeige as $value){
   echo '<option value="'.$value.'">'.$value.'</option>';
   }
}

function IdListe ($abfrage){
   $ergebnis = mysql_query($abfrage);
   $anzeige = array();
while($row = mysql_fetch_object($ergebnis))
   {
   echo '<option value="'.$row->id.'">'.$row->bezeichnung.'</option>';
   }
}

echo '
<form action="ausgabe.php" method="post">
Typ: <select name="typ" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
IdListe ("SELECT bezeichnung, id FROM kat_typ ");
echo '</select>';
echo '
Titel enthält <input type="text" name="titel" size="40"/>';
echo '
Herausgeber enthält <select name="herausgeber" id="dropdown">
<option value="Bitte wählen" selected="selected">Bitte wählen</option>';
Liste ("SELECT Herausgeber AS bezeichnung FROM titel WHERE (Herausgeber IS NOT NULL AND Herausgeber <>'') GROUP BY Herausgeber");
echo '</select>';
echo '
Ort enthält <select name="ort" id="dropdown">
<option value="Bitte wählen" selected="selected">Bitte wählen</option>';
Liste ("SELECT Ort AS bezeichnung FROM titel WHERE (Ort IS NOT NULL AND Ort <>'') GROUP BY Ort");
echo '</select>';
echo '
Standort enthält <select name="standort" id="dropdown">
<option value="Bitte wählen" selected="selected">Bitte wählen</option>';
Liste ("SELECT Standort AS bezeichnung FROM titel WHERE Standort IS NOT NULL GROUP BY Standort");
echo '</select>';
echo '
Beschreibung enthält <input type="text" name="beschreibung" size="40"/> ';
echo '
Begleitmaterial enthält <input type="text" name="begleitmaterial" size="40"/> ';
echo '
Art <select name="art" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
IdListe ("SELECT Bezeichnung AS bezeichnung,ID AS id FROM kat_art");
echo '</select>';
echo '
Fachbereich <select name="fachbereich" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
IdListe ("SELECT Bezeichnung AS bezeichnung,ID AS id FROM kat_fachbereich");
echo '</select> ';
echo '
Schwierigkeit <select name="schwierigkeit" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
IdListe ("SELECT Bezeichnung AS bezeichnung,ID AS id FROM kat_schwierigkeit");
echo '</select> ';
echo '
Komponist enthält <select name="komponist" id="dropdown">
<option value="Bitte wählen" selected="selected">Bitte wählen</option>';
Liste ("SELECT Komponist AS bezeichnung FROM titel WHERE (Komponist IS NOT NULL AND Komponist <> '')GROUP BY Komponist");
echo '</select> ';
echo '
Verlag enthält <select name="verlag" id="dropdown">
<option value="Bitte wählen" selected="selected">Bitte wählen</option>';
Liste ("SELECT Verlag AS bezeichnung FROM titel WHERE (Verlag IS NOT NULL AND Verlag <> '')GROUP BY Verlag");
echo '</select> ';
echo '
Besetzung <select name="besetzung" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
IdListe ("SELECT Bezeichnung AS bezeichnung,ID AS id FROM kat_besetzung");
echo '</select> ';
echo '
Genre <select name="genre" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
IdListe ("SELECT Bezeichnung AS bezeichnung,ID AS id FROM kat_genre");
echo '</select>
<input type="submit" value="Suche starten" name="abschicken">
</form>';
?>
 
Zuletzt bearbeitet:
Zurück
Oben