Schleifen zusammenfassen?

Also so?
PHP:
$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:
$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;
 
Hoppala, das sieht ja doch anders aus, als ich dachte.

Deine Select-Funktion hatte ich eher so erwartet:
PHP:
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
 
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
 
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
 
Also die SQL-Klasse ist so wie du sie oben gepostet hast...

Hier mal paar zeilen wo die Warnung kommt aber er korekt anzeigt:

PHP:
$r = $db->select("SELECT * FROM user WHERE UserSession='".session_id()."'");
 foreach ($r as $row){
 	extract ($row);
 	}
 echo '<p>Hallo '.$UserName.' <a href="?op=logout">Ausloggen</a><br>';

Hier zeigt er die Warnung und die tabelle mit doppelten daten:

PHP:
$r1 = $db->select("SELECT * from box  WHERE con_id='' order by box_id, box_no");
foreach ($r1 as $row){
 		extract($row);
 	echo '<tr><td>'.$article_id.'.'.$article_no.'</td></tr>';
 	}

Jedesmal ist die Zeile in der der die Warnung ist die extract() Zeile..

MfG Fips

Edit: Wenn ich print_r($row) mache bekomme ich ja auch das array mit den ganzen werten angezeigt...
 
Zuletzt bearbeitet:
hpvw hat gesagt.:
Hast Du das print_r direkt vor extract gemacht?
ja...
PHP:
$r = $db->select("SELECT * FROM user WHERE UserSession='".session_id()."'");
 foreach ($r as $row){
 	print_r($row);
 	extract ($row);
 	}

gibt dann folgendes aus:
Array ( [UserID] => 1 [UserName] => Ronald [UserPass] => 263bce650e68ab4e23f28263760b9fa5 [UserSession] => ec42df9561f4dd8783c1107ec4a2f445 )
Warning: extract(): First argument should be an array in /home/fips/public_html/lager/index.php on line 12
 
So richtig nachvollziehen kann ich das nicht. Das ist schon merkwürdig. Du könntest mal versuchen, ob Du noch vernünftige Ergebnisse erhältst, wenn Du vorher prüfst:
PHP:
//die Zeilen hinter denen debug steht löschen, wenn es funktioniert
$r = $db->select("SELECT * FROM user WHERE UserSession='".session_id()."'");
foreach ($r as $row) {
    print_r($row); //debug
    if (is_array($row)) {
        echo "\nis_array -> true\n"; //debug
        extract ($row);
    } else { //debug
        echo "\nis_array -> false\n"; //debug
    } 
}
 
also die Fehlermeldung ist jetzt weg aber der gibt mir jetzt beide echos aus...

Array ( [UserID] => 1 [UserName] => Ronald [UserPass] => 263bce650e68ab4e23f28263760b9fa5 [UserSession] => d05800c8405a49ae5ff6809f84847c8f ) is_array -> true is_array -> false
Hallo Ronald Ausloggen
 
Zurück