Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11
  1. #1
    Ribston Pepping
    Themenstarter

    Registriert
    02.2009
    Ort
    Dortmund
    Alter
    24
    Beiträge
    295

    [PHP&MYSQL] Daten aus Datenbank mit Schleife auslesen

    Ich lese Daten aus einer mySQL Datenbank aus. Es sind Termine zu bestimmten Veranstaltungen. Ich habe etwas daran gearbeitet und habe ein Problem.
    Die Funktion createentry() wird mit den entpsrechenden Daten gefüttert. Die Variable $termin soll als Array übergeben werden. Mit einem Testarray klappt alles prima. In meiner Datenbank sind die Termine aber als termin1, termin2, termin3,... gespeichert. Deshalb will ich sie mit einer Schleife in ein Array schreiben. Hier mal mein Code, wie ich es "per Hand gemacht habe":

    Code:
        $termin[1]=$row->termin1;
        $termin[2]=$row->termin2;
        $termin[3]=$row->termin3;
        $termin[4]=$row->termin4;
        $termin[5]=$row->termin5;
        $termin[6]=$row->termin6;
    Das habe ich jetzt geändert zu:

    Code:
    $cname[] = array();
    $termin[] = array();
    
    $ergebnis = mysql_query("SELECT * FROM startseite");
      while($row = mysql_fetch_object($ergebnis))
      {
        $cname=$row->cname;
        $campl=$row->cnamel;
        $preis=$row->preis;
        
        for($k=1;$k<6;$k++){
            $e=empty($termin[$k]);        
            if($e == "1"){
                echo $k;
                $termin[$k]=$row->termin.$k;
            }
        }   
        $alter=$row->alter;
        createentry($cname,$campl,$termin,$status,$alter,$preis);
        $j++;
      }
    Als Ausgabe erhalte ich aber folgendes:

    Array
    1
    2
    3
    4
    5

    "Array" liegt wohl daran, dass das nullte Element ausgelesen wird, oder? Aber da sollten jetzt eigentlich die Werte wie "11.12" oder so stehen. Seht ihr einen Fehler, bzw. ist das Konzept nicht richtig?

  2. #2
    Dülmener Rosenapfel Avatar von das_micha
    Registriert
    03.2007
    Ort
    Bad Bevensen aka der A**** der Heide
    Alter
    34
    Beiträge
    1.666
    äh, irgendwie versteh ich nicht was du da vorhast. was ist das ziel des ganzen?
    zu allererst ein tip der es etwas schlanker und korrekter macht, aber noch nix mit der lösung deines problem zutun hat

    du schreibst $e = empty($termin[$k]);
    um dann im folgenden if zufragen ob $e == 1 ist also der index ohne inhalt ist
    schreibe es bitte wiefolgt: if(empty($termin[$k])
    denn empty gibt true (1) zurück und das kannst du direkt in den bedingungsblock setzen.

    Die ganze forschleife mit if-abfrage ist total überflüssig. du möchtest damit ja nur verhindern das du keine bestehenden indizeis überschreibst

    also den ganzen for-block raus und anstelle dessen einfach nur
    $termin[]=$row->termin.$k;

    schreiben. Damit wird bei jedem Durchlauf ein neuer index angelegt. in diesem Fall startet er bei 0 wenn er unbedingt,
    wofür ich allerdings keinen beweggrund sehe, bei 1 starten soll, kannst du den index 0 vorbelegen beim anlegen deines array
    oder durch ein ähnliches konstrukt wie du es schon hast so starten lassen:


    if(empty($termin[1]){
    $termin[1]=$row->termin;
    }else{
    $termin[]=$row->termin;
    }

    somit startet er mit index 1 und zählt dann automatisch hoch.

    aber nun nochmal zu deinem eigentlichen problem. was genau soll das endergebnis sein und was macht createentry()


    moment, hab das eben nochmal gelesen, seh ich das richtig das du in einem datensatz also einer tabellenzeile mehrere termine hast? wenn ja, wieso dieses? und du möchtest jetzt die einzelnen terminspalten durchlaufen und verwendest deshalb deine schleife?
    wenn dem so ist wird es so nicht hinhauen. denn durch die verknüpfung die du machst sucht er bei der werteübergabe nur nach der spalte $row->termine und nicht wie du willst nach $row->termine1
    um das hinzubekommen müsstest du es so schreiben:

    $spalte = termin.$k;
    $termin[$k]=$row->spalte;

    um ein dynamisch generiertes attribut auszulesen benötigt er einen komplett fertigen bezeichner als string.
    direkt beim ansprechen eines attributs das erst dynamisch zu generieren klappt nicht.

    wenn es aber mit den 6 terminen pro datensatz so ist wie ich es oben beschrieben habe würde ich nochmal die dbstrucktur überdenken. denn was ist wenn du nur 2 termine hast oder mal 8 brauchst?
    Geändert von das_micha (18.12.2010 um 10:33 Uhr)
    Vollzeitfalschparker....
    MacBook late '08 2,0 C2D - 4GB | iMac 27" i5 - 12GB | MacMini 1,83 C2D - 1GB | iPhone 3Gs weiß + iPad 32GB | ATV2
    last but not least: good old iPod Shuffle 512MB*g*

  3. #3
    Ribston Pepping
    Themenstarter

    Registriert
    02.2009
    Ort
    Dortmund
    Alter
    24
    Beiträge
    295
    Zitat Zitat von das_micha Beitrag anzeigen
    äh, irgendwie versteh ich nicht was du da vorhast. was ist das ziel des ganzen?
    Ich habe eine Datenbank. In dieser stehen Veranstaltungen mit mehreren Terminen. Also etwa Veranstaltung 1 am 12.1 und 13.4, Veranstaltung 2 am 13.6 und 18.9,... und so weiter.
    Diese werden via PHP auf einer Webseite ausgegeben.

    Zitat Zitat von das_micha Beitrag anzeigen
    aber nun nochmal zu deinem eigentlichen problem. was genau soll das endergebnis sein und was macht createentry()
    createentry($cname,$campl,$termin,$status,$alter,$ preis); Erzeugt eine HTML Tabelle und bekommt Variablen als Parameter übergeben.
    Zum Beispiel ist $cname der Name der Veranstaltung. $termin soll aber als Array übergeben werden, da zu einem $cname bis zu sechs
    Termine existieren.

    Das Problem besteht darin, die sechs Spalten aus meiner Datenbank (termin1,termin2,termin3,...) in ein Array $termin zu schreiben. Dann kann ich dieses übergeben und alles wird gut

  4. #4
    Dülmener Rosenapfel Avatar von das_micha
    Registriert
    03.2007
    Ort
    Bad Bevensen aka der A**** der Heide
    Alter
    34
    Beiträge
    1.666
    Zitat Zitat von Alecco Beitrag anzeigen
    Ich habe eine Datenbank. In dieser stehen Veranstaltungen mit mehreren Terminen. Also etwa Veranstaltung 1 am 12.1 und 13.4, Veranstaltung 2 am 13.6 und 18.9,... und so weiter.
    Diese werden via PHP auf einer Webseite ausgegeben.


    createentry($cname,$campl,$termin,$status,$alter,$ preis); Erzeugt eine HTML Tabelle und bekommt Variablen als Parameter übergeben.
    Zum Beispiel ist $cname der Name der Veranstaltung. $termin soll aber als Array übergeben werden, da zu einem $cname bis zu sechs
    Termine existieren.

    Das Problem besteht darin, die sechs Spalten aus meiner Datenbank (termin1,termin2,termin3,...) in ein Array $termin zu schreiben. Dann kann ich dieses übergeben und alles wird gut

    ließ dir nochmal durch was ich oben grade noch hinzugefügt habe. da steht zum einen die lösung deines problems zum anderen aber auch noch ein hinweis darauf das die struktur deiner db "ineffizient" scheint.
    Vollzeitfalschparker....
    MacBook late '08 2,0 C2D - 4GB | iMac 27" i5 - 12GB | MacMini 1,83 C2D - 1GB | iPhone 3Gs weiß + iPad 32GB | ATV2
    last but not least: good old iPod Shuffle 512MB*g*

  5. #5
    Ribston Pepping
    Themenstarter

    Registriert
    02.2009
    Ort
    Dortmund
    Alter
    24
    Beiträge
    295
    Habe ich, wollte nur das Problem erläutern. Die Datenbank habe ich nicht erstellt, ich lese sie nur aus :/
    BTW: Kann ich einen Datentyp Arrays in einer DB speichern?

    --
    EDIT: Ich hatte deinen Originalartikel gelesen, deshalb deine Lösung erst jetzt

  6. #6
    Ribston Pepping
    Themenstarter

    Registriert
    02.2009
    Ort
    Dortmund
    Alter
    24
    Beiträge
    295
    Zitat Zitat von das_micha Beitrag anzeigen
    wenn es aber mit den 6 terminen pro datensatz so ist wie ich es oben beschrieben habe würde ich nochmal die dbstrucktur überdenken. denn was ist wenn du nur 2 termine hast oder mal 8 brauchst?
    Mehr als 6 werden es nicht. Falls es z.B. nur 2 sind: Daher überprüfe ich doch mit empty, ob überhaupt Einträge existieren.

  7. #7
    Dülmener Rosenapfel Avatar von das_micha
    Registriert
    03.2007
    Ort
    Bad Bevensen aka der A**** der Heide
    Alter
    34
    Beiträge
    1.666
    Zitat Zitat von Alecco Beitrag anzeigen
    Habe ich, wollte nur das Problem erläutern. Die Datenbank habe ich nicht erstellt, ich lese sie nur aus :/
    BTW: Kann ich einen Datentyp Arrays in einer DB speichern?

    --
    EDIT: Ich hatte deinen Originalartikel gelesen, deshalb deine Lösung erst jetzt
    kein problem, hab deine antwort auch erst gelesen als ich mit tippen fertig war
    du meinst du willst eine spalte in der db als array deklarieren? ich glaub die möglichkeit bietet mysql nicht.
    brauchst du aber auch nicht. du könntest die werte in einem feld zum beispiel mit trennzeichen angeben z.B.
    01.01/02.01/03.01 usw und dann diesen string mit explode anhand des trennzeichens (/) in ein array zerlegen da kannst du dann soviele termine wie du willst reinballern.

    Ändert aber dennoch nix an der "schlechten" datenbankstruktur. eigentlich arbeitet man in dem fall über verweise. bedeutet du baust dir eine zweite tabelle in der nur die termine drin stehen plus einer spalte in der die id der veranstaltung drinsteht und verknüpfst diese beim auslesen.

    hat den vorteil das du durch ein entsprechendes query z.B. abgelaufene Termine garnicht mehr angezeigt bekommst.
    Vollzeitfalschparker....
    MacBook late '08 2,0 C2D - 4GB | iMac 27" i5 - 12GB | MacMini 1,83 C2D - 1GB | iPhone 3Gs weiß + iPad 32GB | ATV2
    last but not least: good old iPod Shuffle 512MB*g*

  8. #8
    Ribston Pepping
    Themenstarter

    Registriert
    02.2009
    Ort
    Dortmund
    Alter
    24
    Beiträge
    295
    Ja stimmt. Das kenn ich noch aus der Uni, aber das lag irgendwo vergraben. Da mussten wir uns immer übertrieben viel mit Zeigern in C++ herumschlagen. Ist ja so ähnlich... Es war ätzend! Und das als Nebenfächler :P

  9. #9
    Dülmener Rosenapfel Avatar von das_micha
    Registriert
    03.2007
    Ort
    Bad Bevensen aka der A**** der Heide
    Alter
    34
    Beiträge
    1.666
    Zitat Zitat von Alecco Beitrag anzeigen
    Mehr als 6 werden es nicht. Falls es z.B. nur 2 sind: Daher überprüfe ich doch mit empty, ob überhaupt Einträge existieren.
    ok, dann gehts ja noch. aber wo überprüfst du das? in der ausgabe? denn in deiner schleife prüfst du lediglich ob der index des arrays ohne wert ist.

    Zitat Zitat von Alecco Beitrag anzeigen
    Ja stimmt. Das kenn ich noch aus der Uni, aber das lag irgendwo vergraben. Da mussten wir uns immer übertrieben viel mit Zeigern in C++ herumschlagen. Ist ja so ähnlich... Es war ätzend! Und das als Nebenfächler :P
    hehe, nee ganz so dramatisch wie in c ist das nicht in c greifst du ja auf speicherbereiche wie quasi arrays zu. bei der datenbank bestimmst du quasi alles durch dein query. aber man muss ja nicht mit kanonen auf spatzen schießen und wenn sonst alles läuft alles umzustricken kann nervig sein, grade wenn man noch nicht zu 100% mit vertraut ist.
    Vollzeitfalschparker....
    MacBook late '08 2,0 C2D - 4GB | iMac 27" i5 - 12GB | MacMini 1,83 C2D - 1GB | iPhone 3Gs weiß + iPad 32GB | ATV2
    last but not least: good old iPod Shuffle 512MB*g*

  10. #10
    Ribston Pepping
    Themenstarter

    Registriert
    02.2009
    Ort
    Dortmund
    Alter
    24
    Beiträge
    295
    Ja habe ich auch gerade noch gemerkt. Das werde ich noch implementieren. Ich denke ich werde es in der Schleife einbauen. Oder halt die DB umbauen.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •