Mehrsprachiges CMS / mit dynamischem Tabellenkopf

Michelle85

Mitglied
Hallo,

ich schreibe gerade ein CMS mit PHP und MySQL. Ich hab 3 MySQL-Tabellen, in denen Kürzel wie z.B. RE_NR als Feldnamen stehen.
In einer anderen Tabelle, in der der 'Sprache'-Tabelle, habe ich folgende Spalten:
Code:
ID     (Inhalt zB '1')
key    (Inhalt 'RE_NR')
de     (Inhalt ' Rechnungsnummer ')
en     (Inhalt ' Invoice Number')

Hier mein Tabellenkopf:
PHP:
/**------------- Dynamisch aufgebauter Tabellenkopf --------------------- */

  function kopf ($database,&$table)
 {
    echo "  <div id=\"mitte\">\n"; // In der Mitte der Inhalt
    echo "<body>";
	
     $abfrage = mysql_list_fields($table,$database);   
     $menge = mysql_num_fields($abfrage);  
     
     echo "<table class='tabelle_hitlist'  > " ; 
	
          for($x=0;$x<$menge;$x++)
          {    
	echo  "<td align=center class ='tabelle_hitlist columns'   >";
	echo mysql_field_name($abfrage,$x)."<b> </td>";  
          }				 				
} 
?>

Ich bekomme einfach die Abfrage nicht hin. Kann mir bitte jemand helfen?

Wie finde ich per PHP heraus, welche Sprache im Betriebssystem eingestellt ist, um diese dann in meinem CMS zu verwenden?


Gruß Michelle
 
Es ist nicht wichtig, welche Sprach das Betriebssystem eingestellt hat, sondern welche Sprachen der Client akzeptiert. Bei jeder Anfrage wird der HTTP Header "Accept-Language" mitgesendet, der alle vom Benutzer "verstandenen" Sprachen in absteigender Priorität auflistet.

In meinem Fall wäre das:

Accept-Language: de, en

Mehr dazu im offiziellen HTTP Standard

Ich hoffe mal, ich habe dein Problem richtig verstanden:

Die Abfrage könnte irgendwie so aussehen:
PHP:
$query = "SELECT key, ".$language." AS head FROM DeineTabelle";
Wobei $language die vom client favorisierte und von dir unterstützte Sprache ist. Allerdings werden die Tabellenköpfe in beliebiger Reihenfolge ausgegeben. Du müsstest sie noch irgendwie ordnen...
 
Du könntest folgenden Algorithmus benutzen, um die höchstegewichtete Sprache zu ermitteln. Zusätzlich solltest du jedoch noch die Option einrichten, die Sprache nachträglich festzulegen.
 
Danke für die schnellen antworten!

Die Abfrage funktioniert aber immer noch nicht,
sobald ich den Befehl fetch_array verwende erscheint der Kopf gar nicht mehr!

PHP:
<?php
/**------------- Dynamisch aufgebauter Tabellenkopf --------------------- */

	function kopf ($database,&$table)
 {    
       echo "  <div id=\"mitte\">\n"; // In der Mitte der Inhalt
       echo "<body>";
	
                  $abfrage = mysql_list_fields($table,$database);   
	          $menge = mysql_num_fields($abfrage);
		  echo"<h4>$menge Treffer </h4>";
		  echo "<table class='tabelle_hitlist'  > " ; 
				
				for($x=0;$x<$menge;$x++)
				  {    
				  $search= mysql_field_name($abfrage,$x);
				
				  $result = mysql_query("SELECT ".$language." FROM sprache WHERE 'key'=".$search."); 
				 
					while($row =mysql_fetch_array($result,MYSQL_BOTH  ))  //ARRAY AUSGEBEN
						{   
						  echo  "<td align=center class ='tabelle_hitlist columns'   >";
						echo "<a href=\" hitlist.php?sort=$search\">.$row['$language'].</a><b> </td>"; 
					
						}
					
				  }				
} 
?>

habe mir den Thread: http://www.tutorials.de/forum/html/213827-mehrsprachige-html-e-mail.html durchgelesen, werds versuchen bei mir so einzubauen.
Dazu muss ich aber erstmal die Abfrage hinbekommen!
 
Zuletzt bearbeitet:
Wie dir die Hervorhebung der PHP-Syntax vielleicht schon verrät, ist eine Zeichenkette nicht richtig ausgezeichnet.
 
Danke, hab diesen Fehler jetzt behoben!
bekomme aber immer noch kein Ergebnis!
Da das Programm nie in die while Schleife springt!
PHP:
/**------------- Dynamisch aufgebauter Tabellenkopf --------------------- */
<?php


function kopf ($database,&$table)
 {    
       echo "  <div id=\"mitte\">\n"; // In der Mitte der Inhalt
        echo "<body>";
	
               $abfrage = mysql_list_fields($table,$database);   
               $menge = mysql_num_fields($abfrage);
		 
		echo "<table class='tabelle_hitlist'  > " ; 
				
				for($x=0;$x<$menge;$x++)
				  {    
				  $search= mysql_field_name($abfrage,$x);
				  $sql= 'SELECT \'$language\'FROM `sprache` WHERE `key`=\'$search\' LIMIT 0, 15 '; 
				 // echo"$search";
				 // echo "$sql";
				  if (!$sql) 
                                                                  {
				 die('Ungültige Abfrage: ' . mysql_error());
				 }
					$query =mysql_query($sql);
					//echo"$query"; //Ausgabe:resource ID#
					if (!$query) 
                                                                                {
					die('Fehler: ' . mysql_error());
					}

				    //$menge2 = mysql_num_fields($query); 
				   //echo"$menge2"; //hier gibt mir das Programm "1 "zurück d.h. query ist nicht leer
					while($row =mysql_fetch_array($query,MYSQL_BOTH  )) // Programm springt nicht in die Schleife
					{
					 echo"$row[0]";
					 echo"$row[de]";
					 echo  "<td align=center class ='tabelle_hitlist columns'   >";
					echo "<a href=\" hitlist.php?sort=$search\">$row</a><b> </td>"; 

					 }
				  }							
} 
?>

Kann mir bitte jemand helfen ?
 
PHP:
         $sql= 'SELECT \'$language\'FROM `sprache` WHERE `key`=\'$search\' LIMIT 0, 15 '; 
                 // echo"$search";
                 // echo "$sql";
                  if (!$sql) 
                                                                  {
                 die('Ungültige Abfrage: ' . mysql_error());
                 }
Was bitte ist denn das? Wenn die Variable $sql nicht gesetzt oder gesetzt, aber leer, ist wird soll das Script mit der Ausgabe von mysql_error() verrecken?
Weiterhin sollte \'$language\'FROM noch ein Leerzeichen eingebaut werden. Und zu guter Letzt wird bei Dir immer nach key=$search gesucht, denn Deine Variable wird nicht geparset sondern als Text behandelt. Wobei das gesuchte Feld $language wahrscheinlich auch nicht existiert, denn auch diese Variable wird als Text behandelt und nicht geparset. Und die Anfuehrungszeichen dort sind auch falsch, denn entweder kommen dort keine oder Backticks hin, wenn ich mich nicht irre.
Ach ja, und die 0 bei LIMIT ist auch ueberfluessig.

Aender mal das
PHP:
         $sql= 'SELECT \'$language\'FROM `sprache` WHERE `key`=\'$search\' LIMIT 0, 15 '; 
                 // echo"$search";
                 // echo "$sql";
                  if (!$sql) 
                                                                  {
                 die('Ungültige Abfrage: ' . mysql_error());
                 }
                    $query =mysql_query($sql);
in das hier:
PHP:
$sql="SELECT `".$language."` FROM `sprache` WHERE `key`='".$search."' LIMIT 15";
$query=mysql_query($sql) or die(mysql_error());

Uebrigens schlage ich vor nochmal Deinen Einrueckungsstil zu ueberdenken, der verursacht irgendwie Gehirntumore. ;) Mal ehrlich, so ganz uebersichtlich ist der Stil nicht.
 
Vielen vielen Dank!
Die Abfrage funktioniert jetzt!

Ich poste hier mal den funktionierenden Quellcode!

Hab mir diesmal viel Mühe beim einrücken gegeben !
Hoffe dieser versucht diesmal keine Gehirntumore ! :-)


PHP:
<?php

// Funktion kopf ( dynamischer Tabellenkopf + Multilingual) 
function kopf ($database,&$table)
{  
  // nur zum testen  
  $language ='de';
  
  // CSS 
  echo "<div id=\"mitte\">\n"; 
  echo "<body>";

  $abfrage = mysql_list_fields($table,$database);   
  $menge   = mysql_num_fields ($abfrage        );

  echo "<table class='tabelle_hitlist'>"; 

    for($x=0; $x<$menge; $x++)
    {    
      $search= mysql_field_name($abfrage,$x);

      // DB Abfrage
      $sql="SELECT `".$language."` FROM `sprache` WHERE `key`='".$search."' LIMIT 15";
      $query = mysql_query($sql) or die(mysql_error()); 

        while($row = mysql_fetch_array($query,MYSQL_BOTH  ))
        {
          // Ausgabe 
          echo "<td align=center class ='tabelle_hitlist columns'>";
          echo "<a href=\" hitlist.php?sort=$search\">  $row[0]  </a><b></td>"; 
        }
   }
} 
?>
 
Nichts zu danken.

Der Code ist jetzt aus medizinischer Sicht auf jeden Fall wesentlich unbedenklicher. :)

Zum Thema Strings: In der Regel wuerde ich ' nutzen und nur in Ausnahmen mit " arbeiten. Diese Ausnahme waere z.B. wenn Du ' im Text brauchst. " kommt im Text jedoch haeufiger vor (z.B. bei Attributen von HTML-Tags) und somit ist es im Grunde einfacher mit ' zu arbeiten. Ausserdem duerfte dies einen klitzekleinen Performancevorteil bieten, da String die in " stehen geparset werden.
 
Zurück