tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
21
ZUGRIFFE
824
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    Hi@all,

    also weis ja nich ob das irgendwie möglich ist was ich vorhabe. Habe in meinem Script mehrere Funktionen die die selbe schleife haben. Und zwar diese hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    $r = $db->select("SELECT * from main WHERE id='$id'");
        foreach ($r as $row) { 
            $id = $row[0];
            $box_id = $row[1];
            $con_id = $row[2];
            $article_id = $row[3];
            $article_no = $row[4];
            $article = $row[5];
            $designation = $row[6];
            $condition = $row[7];
            $worth = $row[8];
            $stock = $row[9];
            $existence = $row[10];
            $origin = $row[11];
            $man = $row[12];
            $mod = $row[13];
            $sn = $row[14];
            $img_b = $row[15];
            $img_s = $row[16];
            $zub = $row[17];
            $masse = $row[18];
            $status = $row[19];
        }
    ...
    // verschiedene Ausgabedesigns

    Kann man die schleife jetzt irgendwie zentralzusammenfssaen so das jede function darauf zugreifen kann und dann natürlich die ganzen variablen bekommt um sie in die verschiedenen Designs einzubinden?

    Hab schonmal versucht die Schleife in eine eigene Funktion zu packen... aber irgendwie klappt das mit dem returnen von mehreren Variablen nicht.

    Danke für eure Hilfe

    MfG
    Fips
     

  2. #2
    Registriert seit
    Sep 2003
    Ort
    Fürth(Franken)
    Beiträge
    1.060
    Blog-Einträge
    3
    Zitat Zitat von Fips
    Hab schonmal versucht die Schleife in eine eigene Funktion zu packen... aber irgendwie klappt das mit dem returnen von mehreren Variablen nicht.
    Du könntest die ganzen Variablen in ein Array packen und dann dieses Array zurückgeben lassen.

    greetz
    daddz
     
    be inspired...simplify...

  3. #3
    Julian Maicher Julian Maicher ist offline Mitglied Smaragd
    Registriert seit
    Jan 2004
    Ort
    Paderborn
    Beiträge
    1.210
    Lass dir doch einfach $row[] zurückgeben.
     

  4. #4
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    Zitat Zitat von daddz
    Du könntest die ganzen Variablen in ein Array packen und dann dieses Array zurückgeben lassen.

    greetz
    daddz
    ähh für was sollte ich dann die Schleife auslagern? Wenn ich ein Array zurückgebe muss ich es ja wieder auslesen... Dann kann ich auch gleich die eigentliche Schleife in der Funktion lassen. Dachte nur ich könnte halt bissl Code sparen indem ich die Schleife zusammenfasse...

    MfG
    Fips

    Edit: ahh sorry jetzt hab ich erst verstanden... bin heut nich so schnell
     

  5. #5
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Wenn mit mysql_fetch_assoc() arbeitest, kannst Du $row zurückgeben und erhältst ein assoziatives Array. Wenn Du die Felder in Deinem Select explizit erwähnst, weisst Du auch, welchen Arrayindex sie dann haben, ohne in die DB schauen zu müssen. Gefällt Dir der Name des Feldes nicht oder hältst Du ihn zwar in der DB für toll, im PHP aber für ungeeignet, kannst Du auch einen Aliasnamen mit "Feldname AS Aliasname" im Query angeben.
    Edit: wenn Du dieses assoziative Array dann in extract() reinschmeißt erhältst Du mit einer Anweisung die Variablen.

    Gruß hpvw
    Geändert von hpvw (20.04.05 um 17:32 Uhr)
     

  6. #6
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    Also meine SQL-Klasse arbeitet mit mysql_fetch_array... Versteh die ganze sache immer noch nicht... Steh heute irgendwie aufm Schlauch

    MfG
    Fips
     

  7. #7
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    PHP-Code:
    $r $db->select("SELECT id,boxid AS box_id,conid AS con_id,.......,status  from main WHERE id='$id'");
    //Daten in der DB-Klasse mit fetch_assoc, statt fetch_array auslesen!
         
    foreach ($r as $row) { 
                
    extract($row);
                echo 
    $id." ".$box_id;
         } 
     

  8. #8
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    PHP-Code:
    $res $db->execute("SELECT * from main WHERE id='$id'");
         
    $row mysql_fetch_assoc($res);
         
    extract($row);
    //... Ausgabe der Variablen im Design 
    hab das jetzt mal so gemacht und es scheint zu funktionieren... Kann doch jetzt eigentlich in meiner Klasse die Select Anweisung in mysql_fetch_assoc umändern und dann alle Select Anweisungen so ausführen
    PHP-Code:
    $res $db->select("SELECT * from main WHERE id='$id'");
         
    extract($row);
    //... Ausgabe der Variablen im Design 
    Oder?

    MfG und Danke für die Hilfe
    Fips
     

  9. #9
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Ja kannst Du.
    EDIT: Doch nicht, Du hast die Schleife, die alle Zeilen ausliest vergessen. Wenn ich das Ergebnis von DB->select aus Deinem ersten Post richtig interpretiere, gibt dieses ein zweidimensionales Array zurück. Durch die erste Array-Ebene musst Du immer noch von Hand mit foreach ($r as $row) durch. Extract ersetzt alle Zeilen zwischen den geschweiften Klammern, vorausgesetzt natürlich, Du arbeitest mit fetch_assoc. /EDIT

    Ich persönlich würde ohnehin immer mit mysql_fetch_assoc arbeiten, da dann die Arrayindizes immer den Feldern bzw. Aliasfeldern entsprechen. Der Zugriff auf die Feldnummern birgt immer die Gefahr, dass man bei einer Änderung im Query evtl. den gesamten Quellcode neuschreiben muss.
    Wenn man die Feldnamen nicht kennt, kann man ja auch bei mysql_fetch_assoc mit foreach durch das Zeilenarray wandern (und dabei gleich die Feldnamen erfahren).
    Geändert von hpvw (20.04.05 um 18:22 Uhr)
     

  10. #10
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    Zitat Zitat von hpvw
    Ja kannst Du.
    Ich persönlich würde ohnehin immer mit mysql_fetch_assoc arbeiten, da dann die Arrayindizes immer den Feldern bzw. Aliasfeldern entsprechen. Der Zugriff auf die Feldnummern birgt immer die Gefahr, dass man bei einer Änderung im Query evtl. den gesamten Quellcode neuschreiben muss.
    Wenn man die Feldnamen nicht kennt, kann man ja auch bei mysql_fetch_assoc mit foreach durch das Zeilenarray wandern (und dabei gleich die Feldnamen erfahren).
    Ja werd das jetzt mal umstellen... Hatte ne fertige SQL-Klasse genommen aber hab mir da schon einige andere Sachen angepasst. Danke nochmal

    MfG
    Fips

    Edit: Ähh wie iss das eigentlich wenn ich mehr wie ein datensatz auslese?
    Geändert von Fips (20.04.05 um 18:24 Uhr)
     

  11. #11
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    Also so?
    PHP-Code:
    $res $db->select("SELECT * from main WHERE id='$id'");
         foreach (
    $res as $row)
                            {
                     
    extract($row);
                            
    //... Ausgabe im Design
               

    Meine Select Anweisung sieht jetzt so aus:
    PHP-Code:
    $conn $this->connection;
             if (
    $this->debug_on$this->writeDebugLog(0$sql"select");
             
    $results mysql_query($sql,$conn);
               if( (!
    $results) or (empty($results)) ) {
                   
    mysql_free_result($results);
                   return 
    false;
               }
               
    $data myaql_fetch_assoc($result);
              
    mysql_free_result($results);
               return 
    $data
     

  12. #12
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Hoppala, das sieht ja doch anders aus, als ich dachte.

    Deine Select-Funktion hatte ich eher so erwartet:
    PHP-Code:
    class Datenbank {

    //...
        
    function select($sql) {
            
    $conn $this->connection;
            if (
    $this->debug_on) {
                
    //Persönliche Meinung zur Übersicht:
                //If immer mit Klammern, auch wenn es
                //nur ein Statement gibt.
                
    $this->writeDebugLog(0$sql"select");
            }
            
    $results mysql_query($sql,$conn);
            if( (!
    $results) or (empty($results)) ) {
                
    mysql_free_result($results);
                return 
    false;
            }
            
    $data = array();
            while (
    $data[] = mysql_fetch_assoc($results)) {
                
    //Ich liebe Schleifen ohne Body ;)
            
    }
            
    mysql_free_result($results);
            return 
    $data
        }
    //...

    Dann kannst Du so auslesen, wie in Deinem ersten Code deines letzten Posts.

    Gruß hpvw
     

  13. #13
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    ok danke

    MfG
    Fips
     

  14. #14
    Fips Fips ist offline Mitglied
    Registriert seit
    Feb 2004
    Beiträge
    15
    Muss leider doch nochmal Posten... hab alles geändert aber jetzt kommt öfters im script folgendes:

    Warning: extract(): First argument should be an array in /home/fips/public_html/lager/index.php on line xxx
    Teilweise zeigt er ja richtig an aber teilweise auch doppelt oder garnicht...

    Kann jemand helfen?

    MfG
    Fips
     

  15. #15
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Zeige doch mal Deinen aktuellen Code, wie soll man so denn einen Fehler suchen?
    Die Meldung ist ja wohl klar, jetzt solltest Du Dir überlegen, wie es kommt, dass die Variable, die du übergibst kein Array ist und unter welchen Bedingungen sie kein Array ist.
    Könnte sein, dass sie false ist, weil das Query keine Ergebnisse bringt. Sowas solltest Du abfangen.

    Gruß hpvw
     

Ähnliche Themen

  1. Felder zusammenfassen
    Von DrMueller im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 30.04.09, 10:50
  2. .NET Assemblies zusammenfassen
    Von Passer im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 24.07.06, 21:35
  3. css tags zusammenfassen
    Von j©sh im Forum CSS
    Antworten: 2
    Letzter Beitrag: 06.03.05, 00:24
  4. texturen zusammenfassen
    Von IFI ManiA im Forum 3D Studio Max
    Antworten: 0
    Letzter Beitrag: 05.02.04, 15:32
  5. Variablen zusammenfassen
    Von Bigbutcher im Forum PHP
    Antworten: 2
    Letzter Beitrag: 03.06.03, 17:47