Where Clause Frage

rollerueckwaerts

Erfahrenes Mitglied
Dies ist ein Teil eines Scriptes welches die neuesten registrierten Benutzer der Seite in einer Liste darstellen soll. Das klappt auch, nur möchte ich einige Nutzer herausfiltern.
Die Nutzer sind in verschiedene Usergruppen eingeteilt. Diese Einträge werden in der Datenbank Tabelle #__users Spalte usertype gespeichert.
Mit Where möchte ich nun angeben das nur User der Benutzergruppe user1 angezeigt werden.


Für mich persönlich ist der Code nicht durchschaubar doch sicher gibt es jemanden der das kann :)

PHP:
<?php

		function s4jNewUsers( &$params ) {
			global $database;
			$this->_db 		= $database;
			$this->_s4j		= new s4jLibNewUsers( $params, 2,  "mod_s4jnewusers" );
			$this->_params	= & $params;
		}
		
		
		function GetDataRows() {
			$max_user_shown	= $this->_params->get('max_user_shown', 3); 
			
			$sql = "SELECT DISTINCT
						u.id, u.username, u.name,
						s.userid as s4jonline";
			$sql .= $this->_s4j->GetFields();
			$sql .= " FROM
						( #__users u INNER JOIN #__comprofiler c ON u.id = c.user_id AND u.block =0 AND c.confirmed =1 AND c.approved =1 ) 
						LEFT JOIN #__session s ON s.userid = u.id AND s.guest = 0";
			$sql .= $this->_s4j->GetFilter("c", "u", "WHERE");
			$sql .=	" ORDER BY registerdate DESC
					  LIMIT 0, " . $max_user_shown;
					
			$this->_db->setQuery( $sql );
			$rows = $this->_db->loadObjectList();
			return $rows;
		}
		
		function Show() {
			$columns_count	= $this->_params->get('columns_count', 5); 
			$rows			= $this->GetDataRows();
			
			$tr 			= 1;
			$ind			= 0;
			$rows_count		= count($rows); //NOTE: Improve later
	
			$result 		= "<table border='0'>"; // TODO: Change template
			foreach ($rows as $row) {
				if( $tr == 1) 
					$result .= "<tr>";
				$result .= "<td valign='top'>".$this->_s4j->GetUser( $row )."</td>";
				
				if($tr == $columns_count) {
					$result .= "</tr>";
					$tr=1;
				} else if( $ind == $rows_count ) {
					for($j = $tr; $j < $columns_count; $j++) {
						$result .= "<td style='display:none;'>&nbsp;</td>";
					}
					$result .= "</tr>";
	
				} else {
					$tr++;
				}
				$ind++;
	
			}
	
			$result 		.= "</table>";
			return $result;
		}
	}

	function s4jNewUsersCaching( & $params ){
		$s4NewUsers = new s4jNewUsers( $params ); 
		echo $s4NewUsers->Show();
	}
}

?>


Habe im Code bereits den Eintrag u.usertype, hinzugefügt
PHP:
$sql = "SELECT DISTINCT
						u.id, u.username, u.name, u.usertype,
						s.userid as s4jonline";

und hier hab ich aus >GetFilter("c", "u", "WHERE"); das hier gemacht

PHP:
$sql .= $this->_s4j->GetFilter("c", "u", "WHERE usertype = 'user1';");
$sql .= " ORDER BY registerdate DESC
LIMIT 0, " . $max_user_shown;

führt leider nur zu dem Fehler
Invalid argument supplied for foreach() :(

Höchstwahrscheinlich bin ich völlig auf dem Holzweg, aber mehr Einfälle habe ich leider als völliger PHP-Newbie nicht *g

Hoffe das Ganze ist vielleicht wieder mit einem kleinen zusätzlichen Codegeschnippsel durchführbar :) Freue mich auf eure Unterstützung.

Vielen Dank schonmal jetz !

Lg
Tobs
 
Gibt er dir keine SQL-Fehlermeldung aus? Ist das von dir programmierter Code? Wenn nein, schau ob die Fehler vielleicht unterdrückt und in ein Log-File gespeichert werden. So spontan sehe ich nur:

PHP:
//Hier muss vor usertype vermutlich noch der Tabellenbezeichner vom  Join (u.) angehängt werden
$sql .= $this->_s4j->GetFilter("c", "u", "WHERE u.usertype = 'user1';");

Der Fehler der foreach-Schleife weist darauf hin, dass der Datentyp der Variable, über die du die Schleife laufen lassen willst, kein Datentyp ist, der von foreach verwendet werden kann. Foreach funktioniert nur mit Arrays.

Lass dir mal $rows ausgeben und schaue was für ein Datentyp es ist. mit der Funktion is_array() kannst du prüfen, ob es sich dabei um ein Array handelt.
 
Zurück