Seite mit includes aufbauen?

Was genau ist denn der Inhalt von $fehler ? Sprich wo und wie deklariere ich die Variable?

Ich bin mal von meiner Klasse ausgegangen in meinen fall gibt die Variable nur die fehlerhaften sql befehle wieder zurück die von der Klasse kommen.

Ist in der Entwiklungzeit hilfreich bei der Fehler Analyse. In der Laufzeit(Betriebszeit) würd ich allerding die Routnie wieder rausnehmen. Da es möglicherweiße einen Angriffpunkt liefert (Sql injection).

In deiner obenen geposten klasse würd das dann so ausschauen:
PHP:
$host="127.0.0.1";
$user="name";
$passwd="password";
$db="datenbankname";
$db=new sql($host, $user, $passwd, $db);  // Objekt wird erzeugt
// Alternative könntes auch so schreiben
$db=new sql('localhost','name','password','datenbankname');  // Objekt wird erzeugt
Wobei mir deine obenen gepostet klasse nicht so gefällt weil da müßtes jedes mal die Zugangsdaten auch mit übergeben.

Besser ist es nur einmal entweder fix die Zugangs daten bei der Klasse einzutragen oder sie includieren.

Damit wenn sich mal deine Daten änderen nicht alles umschreiben mußt.

Ich will mal nicht so sein und stell dir mal meine Db klasse zu verfügung
Dort ist allerdings auch ein automatisch sql Backup funktion integriert.
Daher auf das Verzeichniss und die datei rechte achten

PHP:
 define ('CRLF', chr(13).chr(10)); # Zeilenumbruch 
 define ('PATH', $_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control/'); # Pfad zur Logdatei 

class db {

	var $db_name = 'dbname';           // Datenbankname
	var $serv = 'localhost' ;           // Server
	var $uid = 'user' ;                // Benutzer
	var $pw = 'password' ;                    // Password

	var $conn;                 // Resultat von mysql_connect().
	var $query_id;             // Resultat von mysql_query().
	var $record     = array(); // Letzter Record.	
	var $row        = 0;       // Aktuelle Ergebniszeile.

	var $num_rows   = "";      // Anzahl Zeilen der letzten Anfrage.
	var $num_fields = "";      // Anzahl Felder der letzten Anfrage.
	var $locked     = false;   // True, wenn Tabellen gelockt sind.

	var $fehler;           // Fehler abfangen Objekt klasse.

	// Konstruktor der Db Klasse.
	function db ($fehler) {
		$this->fehler = $fehler;
	}

	// Verbindung zur Datenbank herstellen.
	function connect () {
		// Wenn Fehler in Verbindung wird versucht eine neue verbinden aufzubauen.
		if (! is_resource($this->conn)) {
			$this->conn = @mysql_connect($this->serv, $this->uid, $this->pw);

			// Schlug der Verbindungsaufbau fehl, geben wir einen Fehler aus.
			if (! is_resource($this->conn)) {
				$this->fehler->db_error(
                    "Konnte keine Verbindung zur Datenbank herstellen.<br>
                    Versuchen Sie es bitte zu einem Spätern Zeitpunk nochmals"
                    );
			}

			// Jetzt versuchen wir die richtige Datenbank auszuwaehlen.
			// Schlaegt das fehl, geben wir einen Fehler aus.
			if (! mysql_select_db($this->db_name)) {
				$this->fehler->db_error(	
					sprintf("Die Datenbank [%s] konnte nicht ausgewählt werden.", 
                            $this->db_name),
					mysql_error(),
					mysql_errno()
				);
			}
		}
	}

	// Versucht die offene Verbindung zur Datenbank zu beenden.
	function close () {
        	@mysql_close();
	}

	// Fuehrt einen uebergebenen Querystring aus.
	function query ($query_string) {
		// Automatisch einen Verbindungsaufbau durchfuehren, wenn noch keine 
		// Verbindung offen ist.
		$this->connect();

		// Den SQL Befehl ausfuehren.
		$this->query_id     = @mysql_query($query_string);
		$this->row          = 0;

        	// Anzahl Reihen und Spalten speichern.
        	$this->num_rows     = @mysql_num_rows($this->query_id);
        	$this->num_fields   = @mysql_num_fields($this->query_id);
    
		// Wenn wir keine gueltige Anfrageid erhalten haben, geben wir einen Fehler aus.
		if (! $this->query_id) {
            		// Bevor den Fehler ausgeben, versuchen wir noch die Tabellen zu entsperren.
            		if ($this->locked) {
                		$this->unlock();
            		}

			$this->fehler->db_error(
				sprintf("Falscher SQL Befehl: [%s].", $query_string),
				mysql_error(),
				mysql_errno()
                	);
		} //einfüg Backup funktion
		$sql_date = date("d.m.y, H:i:s"); # Aktuelles Datum und aktuelle Zeit setzen 
             
            # Überprüfen ob das Verzeichnis existiert in dem die Logdatei abgelegt werden soll.. Ansonsten Wird das Verzeichnis erstellt.. 
            if(!is_dir($_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control')){ 
            	echo $_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control';
            		mkdir ($_SERVER['DOCUMENT_ROOT'].'/backup', 0664); 
                mkdir ($_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control', 0644); 
            } 
             
            # Nur SQL Befehle loggen, die einen Datensatz verändern.. Also keine SELECT Befehle mitloggen 
            if(preg_match('/(^insert)|(^update)|(^alter)|(^create)|(^delete)/i', $query_string, $type)){ 
                # SQL Befehl in die Logdatei schreiben.. Datum, Zeit und Zeilenumbruch werden angehängt.. 
                $this->sl_writeFile(PATH.'sql_report.sql', $query_string.';'."\t\t\t# ".$sql_date.CRLF); 
            } 
            //return mysql_query($sql); # "mysql_query()" wird ausgeführt 
   //einfüg ende      
	}
# Funktion zum Schreiben in eine Datei 
        function sl_writeFile($file, $data, $mode = 'a'){ 
            $fp = fopen($file, $mode); 
            fwrite($fp, $data); 
            fclose($fp); 
        } 
        
	// Liefert in einem Array die letzten Anfragergebnisse.
	function next_record () {
		// Die naechste Zeile der Anfrage speichern und die Anzahl
		// der abgefragten Zeilen um eins erhoehen.
		$this->record       = mysql_fetch_array($this->query_id);
		$this->row         += 1;

		// Pruefen ob wir ein Array zurueck bekommen haben.
		if (! is_array($this->record)) {
			mysql_free_result($this->query_id);
			$this->query_id = "";
		}
    
		return $this->record;
	}

	// Springen in einer Ergebnistabelle.  
	function seek ($pos) {
		if (mysql_data_seek($this->query_id, $pos)) {
			$this->row = $pos;
		}
	}

	// Ergebnis als assoziatives Array zurueck geben.
	function fetch_array () {
        return mysql_fetch_array($this->query_id);
	}
	
	// Gibt einen bestimmten Wert zurueck.
	function r ($data) {  	
		return $this->record[$data];
	}

	// Gibt den wert auf Bildschirm aus.
	function e ($data) {
		echo $this->record[$data];
	}

// Gibt den wert auf Bildschirm aus.
	function p ($data) {
		print $this->record[$data];
	}

	// Einen Ausdruck quoten, damit er sicher in einem 
	// SQL-Statement verwendet werden kann.
	function quote ($value = "") {
		return addslashes($value);
	}

	// Versucht den Speicher von der letzten gemachten Anfrage 
	// wieder freizueben.
	function free () {
        	mysql_free_result($this->query_id);
		$this->query_id = "";
	}

        // Diese Funktion gibt die Id des letzten Inserts zurueck,
        // wo der Primary Key vom Typ AUTO_INCREMENT ist.
	function insert_id () {
        	return mysql_insert_id();
	}

	// Diese Funktion setzt einen SQL String aus den uebergebenen
	// Tabellen zusammen mit dem entsprechenden Modus und sperrt
	// diese Tabellen.
	function lock ($tables) {
        	$count = count($tables);
        	$sql   = "LOCK TABLES ";

        	// Alle Tabellen in dem Array durchgehen.
       		for ($i = 0; $i < $count; $i++) {
            		$sql .= sprintf("%s %s", key($tables), current($tables));

            		// Nur bei der letzten Tabelle fuegen wir ein Semikoleon an,
            		// sonst ein Komma.
            		if ($i < ($count - 1)) {
                		$sql .= ",";
            		} else {
                		$sql .= ";";
            		}

            		next($tables);                    
        	}
               
        	// Das Sperren der Tabellen ausführen.
        	$this->query($sql);

        	// Markieren, dass wir Tabellen gesperrt haben.
        	$this->locked = true;
    	}

    	// Hiermit werden die gesperrten Tabellen entsperrt.
    	function unlock () {
        	if ($this->locked) {
            		$this->locked = false;

           		// Tabellen entsperren.
           	 	$this->query("UNLOCK TABLES");
        	}
    	}




}


Parr funktionen darin sind überflüssig kanste ja dann rauslöschen was du davon nicht brauchst.

Mfg Splasch
 
Zuletzt bearbeitet:
Und wenn ich jetzt z.B. einen Datensatz auslesen möchte include ich die Klasse und nehme dann einfach folgenden Quellcode:

PHP:
$Sqlstr="SELECT * From tabelle WHERE id='1'";
$db->query($Sqlstr);
while ($db->next_record())
{
 $tabelenspalte=$db->r("Spalte1");
 echo "$tabelenspalte<br />";
}

Richtig? Was bedeutet das r eigentlich?

*UPDATE*

Achso was ich noch fragen wollte. Diese Log-Datei wozu genau dient die? Wie die heißt, kann ich ja der Klasse entnehmen. Welche Rechte brauch die? Read/Write? Oder auch execute? Was bewirken die defines oben eigentlich?
 
Zuletzt bearbeitet:
Genau nur mußte nach dem include mindesten 1 mal das Obejekt erzeugen

$db = new db($fehler);

Danach kanste die anderen Befehle so oft ausführen wie du möchtest.

Wie du dann die Variable bennenst kanst du dir ausuchen
Wenn du das Objekt mit:
$sql = new db($fehler);
erzeug dann schaun die abfragen dann so aus
PHP:
$Sqlstr="SELECT * From tabelle WHERE id='1'"; 
$sql->query($Sqlstr); 
while ($sql->next_record()) 
{ 
 $tabelenspalte=$sql->r("Spalte1"); 
 echo $tabelenspalte."<br />"; 
}

Mfg Splasch
 
Zuletzt bearbeitet:
4Mb index.php... ^^ *ich lach mich tot*
Was glaubst du denn was ich meine, du Freak ^^
Ich hab nen komplettes Communitysystem geschrieben und hab insgesamt nicht mal 10MB voll ^^

Natürlich sollste dat net alles in eine File klatschen, denn logische Strukturierungen sind das A und O in der Programmierung... Mit welcher Sprache is dabei egal... Is keine Ordnung im Skript, dann viel Spaß beim debuggen ^^

Wie du dir das denkst mit dem include geht... Hab ich ja auch ^^
Du musst nur auf die verlinkung achten, denn es wird immer von der Dateiposition der File ausgegangen in der das include steht...
Wenn du z.B: in der index.php die /menu/menu.php includest und in der menu.php ne grafik aus dem ordner Icons benutzt, dann brauhcst du nciht erst mit ../ den ordner menu verlassen, sondern muss die Position der Grafik von der index.php aus bestimmen...

Hoffe das ist verständlich ausgedrückt^^

Für die MySQL-Verbindung ne Klasse zu verwenden is nicht verkehrt, da es flexibler ist...

Für die Sit ein halte selbst leg dir ne passende SQL-DB an, bau dir ne Admin-Oberfläche, um die Daten in der SQL einzutragen, includier in der index.php ne inhalt.php in der legst du die kriterien für die wahl der site fest...

FERTIG ^^
 
Richtig? Was bedeutet das r eigentlich?
Achso was ich noch fragen wollte. Diese Log-Datei wozu genau dient die?

Um genau zu sein handelt es bei der Datei um eine Sql datei in der werden alle Änderung gespeichert. Strütz dir mal aus irgendeinen grund der Datenbanserver ab und die Daten gehen verloren, dann kanste mit der Sql datei den letzen aktuellen Stand wiederherstellen.

Das heißt du spielst zuerst dein letztes Backup ein was du von der Hompade hast und dann die Sql datei um die letzen änderung auch wieder zuhaben.
Das ganze nennt man differenzelle sicherung. Hat den Vorteil das man keinen Datenverlust hat wenn nur 1 von den beiden Server abstürtzt oder wenn ein hacker deine Db gelöscht hat. Dann kanste sie damit wieder auf den Letzen stand bringen ohne verluste einbüsen zu müssen.

Wegen dem r schau dir einfach die Funktion an das gibt nur den record von der Abfrage zurück.

// Gibt einen bestimmten Wert zurueck.
function r ($data) {
return $this->record[$data];
}

Welche Rechte brauch die? Read/Write? Oder auch execute? Was bewirken die defines oben eigentlich?
Du brauchst Schreib und Lese rechte darauf.
define definiert eine konstante mehr darüber unter http://at.php.net/define

Mfg Splasch
 
Zuletzt bearbeitet:
Um mal wieder was zum Thema zuliefern...

Hab ne etwas simplere SQL-Klasse mit der Backup-Funktion verfeinert...

Ich möchte anmerken, dass die Klasse für PHP 5.x gültigen Code enthält, also möglicherweise auf früheren PHP-Versionen nicht richtig funktioniert...
Code:
<?php
class MySQL
{
	  private $con
	  private $result
	
	  public function __construct ($host, $user, $password, $database)
      {
		$this -> con = mysql_connect ($host, $user, $password) 
     	or die (mysql_error());
   
  		if (is_resource ($this -> con))
  		{
	    	mysql_select_db ($database) or die (mysql_error());
   		}
      }
      public function __destruct ()
      {
        if (is_resource ($this -> con))
   		{
     		mysql_close ($this -> con);
 		}
      }
      protected function doQuery ($query)
      {
        if ($this -> result = mysql_query ($query))
   		{                
      		$aff_rows = mysql_affected_rows();
      		if ($aff_rows)
      		{
        		return true;
      		}
      		else
      		{
        		return false;
      		}
   		}
   		else
   		{
   			die (mysql_error());
   		}  
      }
      protected function doSelect($query)
      {
         if ($this -> result = mysql_query ($query))
   		 {
      	 	$output = array();
      	 	
      	 	      	 	
      	 	//einfüg Backup funktion
        $sql_date = date("d.m.y, H:i:s"); # Aktuelles Datum und aktuelle Zeit setzen 
             
            # Überprüfen ob das Verzeichnis existiert in dem die Logdatei abgelegt werden soll.. Ansonsten Wird das Verzeichnis erstellt.. 
            if(!is_dir($_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control')){ 
                echo $_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control';
                    mkdir ($_SERVER['DOCUMENT_ROOT'].'/backup', 0664); 
                mkdir ($_SERVER['DOCUMENT_ROOT'].'/backup/MySQL_Control', 0644); 
            } 
             
            # Nur SQL Befehle loggen, die einen Datensatz verändern.. Also keine SELECT Befehle mitloggen 
            if(preg_match('/(^insert)|(^update)|(^alter)|(^create)|(^delete)/i', $query, $type)){ 
                # SQL Befehl in die Logdatei schreiben.. Datum, Zeit und Zeilenumbruch werden angehängt.. 
                $this->sl_writeFile(PATH.'sql_report.sql', $query.';'."\t\t\t# ".$sql_date.CRLF); 
            } 
      		while ($row = mysql_fetch_assoc ($this -> result))
      		{
         		$output[] = $row;
      		}
      		if (count ($output) > 0)
      		{
         		return $output;
      		}
      	 	else
      	 	{
         		return false;
      	 	}
   		 }
   		 else
   		 {
      	 	die (mysql_error());
   		 }
      }


# Funktion zum Schreiben in eine Datei 
        protected function sl_writeFile($file, $data, $mode = 'a'){ 
            $fp = fopen($file, $mode); 
            fwrite($fp, $data); 
            fclose($fp); 
        }  
        
        
      public function checkQuery ($query)
	  {
   	  	 if (preg_match ("/^select/i", $query))
   	  	 {
      	 	$result = $this -> doSelect ($query);
      		if ($result)
      		{
         		return $result;
      		}
      		else
      		{
         		return false;
      		}
   		 }
		 else
  		 {
      	 $result = $this -> doQuery ($query); 
      		if ($result)
      		{
         		return $result;
     		}
      		else
      		{
         		return false;
      		}
   		 }   
	  }   
}

/* AUFRUF DER KLASSE:
new class MySQL
$ext = checkQuery($Abfrage)
*/

?>

Wie gesagt verwende ich PHP 5.x ab dieser Version gibt es eine autostart-Funktion:
Code:
function __autoload($class)
{
   require 'class/'.$class.'.class.php';
}

Stelle sicher, dass die oben genannte Klasse als MySQL.class.php abgeschpeichert ist und sich im Ordner /class/ befindet...
Die oben gezeigte autoload-funktion reagiert automatisch, sobald eine Klasse eingeleitet wird... Sie included dann die Datein die mit dem Namen der Klasse versehen ist und sicherheitshalber benutzen wir .class als Indikator für eine Datein mit ner Klasse darin ;)

Die construktor und destruktor funktionen Agieren selbstständig beim aufrufen und beenden der Klasse...

Ausserdem wurde die Klasse sicher geschrieben, wodurch ein User NUR auf die eine Funktion zum Prüfen des Query zugreifen kann und sonst auf absolut nichts in der Klasse... Also MySQL-Interjektion sicher ;)
 
Aber ich dachte, dadurch, dass ich in der Klassendatei die Datenbankdaten bestimme muss ich jetzt nicht nochmal manuell connecten? Dann müsste doch der

PHP:
$db=new sql('localhost','name','password','datenbankname');

bzw.

$sql = new db($fehler);

wegfallen oder nicht?

Splasch wie müsste ich deine Klasse erweitern um z.B. für eine Seite eine Blätterfunktion zu gestalten, wenn mehr als eine in der Datenbank bestehende Variable Datensätze vorhanden sind? Sprich die User können sagen ich will pro Seite X News sehen. Bei einem Wert von insgesamt X+1 oder mehr News soll unten eine Blätterfunktion. Auf der nächsten Seite soll dann wieder X News sein.

Oder ist es nicht sinnvoll das mit einer Klasse zu realisieren?

Kann mir jemand sagen, wie man am besten ein Kategoriesystem erstellt, wo der User mehrere Kategorien auswählen kann. Nur für diese bekommt er die News angezeigt. Das Problem ist die Kategorien können erstellt und gelöscht werden und haben damit sehr variable ID nummern, die auto_increment zugewiesen werden. Für die Kategorien gibt es extra eine Tabelle. Jede News hat dann die ID in der Newstabelle die auf die Kategorie Tabelle verweist. Aber wie lese ich nur die die der User auswählt ein? Jemand eine Idee? (Hoffe was ich will ist verständlich?)

Danke schonmal für eure Hilfe und für die bisher schon erbrachte Hilfe =)

@ Chaosengel_Gabriel danke für deine Klasse, aber die von splasch schaut mir übersichtlicher aus :D
 
Zuletzt bearbeitet:
Splasch wie müsste ich deine Klasse erweitern um z.B. für eine Seite eine Blätterfunktion zu gestalten, wenn mehr als eine in der Datenbank bestehende Variable Datensätze vorhanden sind? Sprich die User können sagen ich will pro Seite X News sehen. Bei einem Wert von insgesamt X+1 oder mehr News soll unten eine Blätterfunktion. Auf der nächsten Seite soll dann wieder X News sein

Für nee Blätterfunktion brauchst du die Klasse nicht erweiteren.Das machste mit dem Sql befehl Limit und ein wenig php code (Limit 0,10) beginne bei 0 und geb 10 nachflogende sätze aus (Limit 10,20) beginne bem 11 Datensatz und gebe 20 weitere Datensätze aus die nach dem 11 Datensatz kommen und soweiter so funktioniert das mit dem Blättern.

Aber ich dachte, dadurch, dass ich in der Klassendatei die Datenbankdaten bestimme muss ich jetzt nicht nochmal manuell connecten? Dann müsste doch der

Du verwechselt da was. Conecten brauchste manuel nicht mehr aber ein Objekt muß du schon erstellen ansonsten kanste die Klasse nicht ansprechen.

Und die Objekte die du gepostet sind von 2 verschiedenen Klassen.
$sql = new db($fehler); // Meine Klasse verbindungsdaten stehen schon in der klasse keine weiteren Angaben notwendig
$db=new sql('localhost','name','password','datenbankname'); // Fremde klasse hier mußt du die verbindungsdaten immer angeben.

Ich geb dir hier noch ein Beispiel zum aufruf
PHP:
include('db.php'); // Klasse includieren
$db = new db($fehler);  // Objekt wird erzeugt als $db 

$Sqlstr="SELECT * From tabele"; 
$db->query($Sqlstr);   // Sql query wird an die db klasse übergeben 

while ($db->next_record()) {  // So lange daten kommen von der Klasse  
$tabelenspalte=$db->r("Spalte1");  // Werte aus der abfrage von der table mit dem spaltennamen 
}  
// Limit für Blättern
$Sqlstr="SELECT * From produkt Where name like '%a' LIMIT 0,20"; // ersten 21 Datensätze ausgeben
$db->query($Sqlstr);   // Sql query wird an die db klasse übergeben 

while ($db->next_record()) {  // So lange daten kommen von der Klasse  
$tabelenspalte=$db->r("Spalte1");  }

Info zu Limit unter http://dev.mysql.com/doc/refman/5.1/de/select.html

Zitat von Refernzbuch:

Die LIMIT-Klausel kann zur Beschränkung der Anzahl der von der SELECT-Anweisung zurückgegebenen Datensätze verwendet werden. LIMIT nimmt ein oder zwei numerische Argumente entgegen, die (außer bei Verwendung vorbereiteter Anweisungen) beide nichtnegative Integer-Konstanten sein müssen.
Von den beiden Argumenten gibt das erste den Versatz des ersten zurückzugebenden Datensatzes an, das zweite die maximale Anzahl zurückzugebender Datensätze. Der Versatz des ersten Datensatzes ist 0 (nicht 1):
Zitat ende:

Mfg Splasch
 
Zuletzt bearbeitet:
Ich sag mal so es wäre gut, wenn du verstehen würdest, was da vorsich geht, aber zum einfachen Benutzen reicht es aus was ich dir gepostet habe...

Hab die Klasse nochmal überarbeitet und am Ende in den Kommentaren mehr gesagt dazu...

http://gabriel86.ga.funpic.de/testClasses/MySQL.class.phps

Wenn ihr Fehler findet oder Verbesserungen habt, dann postet es hier oder schreibt mir ne PN pls ;)


[EDIT]:
Ach ja, ich hab mir Snippets und Co zusammen gesammelt dafür...
ICH erhebe KEIN CopyRight auf den Source...
Wenn jemand meint, dass von ihm mehr zu finden ist oder sonst irgendwas ist, dann PNt me und ich schreibs CopyRight nachträglich rein ;)
 
Zuletzt bearbeitet:
PHP:
include('db.php'); // Klasse includieren
$db = new db($fehler);  // Objekt wird erzeugt als $db 

$Sqlstr="SELECT * From tabele"; 
$db->query($Sqlstr);   // Sql query wird an die db klasse übergeben 

while ($db->next_record()) {  // So lange daten kommen von der Klasse  
$tabelenspalte=$db->r("Spalte1");  // Werte aus der abfrage von der table mit dem spaltennamen 
}  
// Limit für Blättern
$Sqlstr="SELECT * From produkt Where name like '%a' LIMIT 0,20"; // ersten 21 Datensätze ausgeben
$db->query($Sqlstr);   // Sql query wird an die db klasse übergeben 

while ($db->next_record()) {  // So lange daten kommen von der Klasse  
$tabelenspalte=$db->r("Spalte1");  }
Aber dann versteh ich das $fehler immernoch nicht? Was muss ich denn als objekt eingeben. Sprich was beinhaltet die Variable Fehler. Ich meine ich erzeuge ja ein Objekt. Ich kann ja schließlich nicht irgendwelchen Schwachsinn erzeugen lassen. Oder ist der Wert des Objektes mehr oder weniger egal?

Zusammenfassend heißt das die Blätterfunktion in die Klasse aufzunehmen wäre schwachsinn? Ich dachte halt ich könnte z.B. erstmal kein Limit erzeugen über die SELECT Abfrage. Prüfe dann aber über die Klasse, ob die num_rows die Zahl X, welche der User auswählt, übersteigt. Ist dies der Fall ergänze ich die SELECT Abfrage mit ."LIMIT 0,$usereintrag". Und erzeuge dann die Blätterfunktion per Klasse.

P.S: Meine andere Fragen habt ihr leider nicht beantwortet oder beachtet? Wäre nett, da ich das auch gerne umsetzen würde. Ich schreibs nochmal rein hier.

Kann mir jemand sagen, wie man am besten ein Kategoriesystem erstellt, wo der User mehrere Kategorien auswählen kann. Nur für diese bekommt er die News angezeigt. Das Problem ist die Kategorien können erstellt und gelöscht werden und haben damit sehr variable ID nummern, die auto_increment zugewiesen werden. Für die Kategorien gibt es extra eine Tabelle wo jeder Kategorie eine ID zugewiesen bekommt. Auch jede News hat dann die ID in der Newstabelle, die auf die Kategorie Tabelle verweist. Aber wie lese ich nur die News aus, für welche der User die Kategorie auswählt ein? Sprich es gibt die Kategorien Extras (ID:3) , LAN (ID:4), Offtopic (ID:7), Internet (ID: 11). Die anderen dazwischen gestellten IDs sind durch Löschen der Kategorie aus der Tabelle entfallen. User XYZ legt jetzt fest, ich möchte nur News der Kategorie Extras (ID:3) und LAN (ID:4) lesen. Also sollen diese dem User ausschließlich angezeigt werden. Später erstellte Kategorien müssten beim User dann wohl auf aktiv gesetzt werden. Der User müsste darüber benachrichtigt werden, dass es eine neue Kategorie gibt. Jemand eine Idee zur Lösung des Problems? (Hoffe was ich will ist verständlich?) Ich hatte mal die Lösung eines JOINS angestrebt, hat mir aber nicht wirklich geholfen, bzw. ich habe es nicht zur korrekten Ausführung geschafft.

Hier mal mein Join Code:

PHP:
$get_news = mysql_db_query("$datenbank", "SELECT id,userid,schrift,text,datum,kommentare,katid FROM users as u, news as n, userkat as m WHERE u.id = m.userid AND m.katid = n.katid AND n.aktiv = '1' AND n.user = '0' ORDER BY n.id DESC LIMIT 0,$max");
 
Zurück