Problem mit einem php/mysql script

Amschti

Erfahrenes Mitglied
Also es geht darum, ich habe eine Homepage, die soll dan vier sprachig daherkommen.

Diese wird über eine Datenbank voll automatisert abgerufen

Über einen Get link kann man seine sprache dann aktivieren, diese wird dan auch gleich als Session gespeichert...

Nun zum Problem, wenn ich jetzt z.b. auf Französisch einstelle, einige Zeilen aber nicht übersetzt habe, möchte ich das es die standartsprache Deutsch anzeigt (nur diese eine Zele). Das Problem das ich jetzt habe. es funktioniert irgendwie ncht :) und ich habe keine ahnung wieso, leere Felder werden einfach übersprungen :/

PHP:
<?php
session_start();
if($_GET[sprache]){
    $sprache = 'de AS value2 ,'.$_GET[sprache];
    $_SESSION[sprache] = $_GET[sprache];

}
if(($_SESSION[sprache]) && empty($_GET[sprache])){
    $sprache = 'de AS value2 ,'.$_SESSION[sprache];
    }
if((empty($_SESSION[sprache]))&&(empty($_GET[sprache])))
    {$sprache = 'de';}

///Sprachsteuerung
$seite = alc_freeformcreator;
$sql = "SELECT id,$sprache AS value FROM $seite";
$result = mysql_query($sql);
$head = array();
while($row = mysql_fetch_assoc($result)){

if($row[value] != ""){
  $alc_freeformcreator[$row['id']] = $row[value];
}
if($row[value] == ""){
  $alc_freeformcreator[$row['id']] = $row[value2];
}
}
?>

was mach ich falsch?

die links werden wiefolgt aufgerufen... z.b.

PHP:
<?php echo '<div id="navi">
<p>'.$alc_freeformcreator[1].'</p>
<ul>
<li>'.$alc_freeformcreator[2].'</li>
<li>'.$alc_freeformcreator[3].'</li>
<li>'.$alc_freeformcreator[4].'</li>
<li>'.$alc_freeformcreator[6].'</li>
<li>'.$alc_freeformcreator[5].'</li>
<li>'.$alc_freeformcreator[7].'</li>
</ul>

<ul style="float:right;">
<a href="'.$link.'&sprache=de"><li>DE</li></a>
<a href="'.$link.'&sprache=en"><li>EN</li></a>
<a href="'.$link.'&sprache=fr"><li>FR</li></a>
<a href="'.$link.'&sprache=it"><li>IT</li></a>
</ul>
</div>';
?>

Also... wenn ich auf Deutsch einstelle kommen alle, k.p. wenn ich jetzt aber z.b. auf Französisch einstelle, und diese spalten in der mysql db leer sind, soll es auf die deutsche spalte ausweichen

Die d.b. hat eine ganz einfache struktur

id | de | en | fr | it |
 
Hi,

möglicherweise ist ein nicht vorhandener String nicht "" sondern NULL. mysql_fetch_asoc() setzt NULL-Felder auf den PHP Wert-NULL. (siehe hier: http://php.net/manual/de/function.mysql-fetch-assoc.php )

Versuch mal Deine Abfrage entsprechend zu erweitern:
PHP:
if($row[value] != "" && $row[value] != NULL){
  $alc_freeformcreator[$row['id']] = $row[value];
}
if($row[value] == "" || $row[value] == NULL ){
  $alc_freeformcreator[$row['id']] = $row[value2];
}

Gruß,
Dunsti
 
danke für die Antwort. leider ist es (anscheinend) ein anderes Problem... hab ein alert() im while laufen lassen und anscheinend werden die Zeilen mit leeren spalten nicht gelesen. Sobald ich sie anwähle, muss nun herausfinden was für ein mysql array man da braucht.

Bin um jede hilfe froh :)
 
Warum löst du das nicht bereits im SQL
SQL:
SELECT
  id,
  -- Nimmt english falls vorhanden, ansonsten deutsch
  IFNULL(en, de) AS text
FROM
  mytable
 
Zuletzt bearbeitet von einem Moderator:
WOW! , das klingt nach genau dem was ich suche.. habs versucht, und es funktioniert immer noch nicht :( was jetzt? :)

PHP:
session_start();
if($_GET[sprache]){
    $sprache = $_GET[sprache];
    $_SESSION[sprache] = $_GET[sprache];

}
if(($_SESSION[sprache]) && empty($_GET[sprache])){
    $sprache = $_SESSION[sprache];
    }
if((empty($_SESSION[sprache]))&&(empty($_GET[sprache])))
    {$sprache = 'de';}

///Sprachsteuerung
$seite = alc_freeformcreator;
$sql = "SELECT IFNULL($sprache,de) AS value, id FROM $seite";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
  $alc_freeformcreator[$row[id]] = $row[value];
}

?>

Die Leeren Felder werden weiterhn ncht ersetzt :(
 
Dann versuch die entsprechenden Spalten einfach mal auf NULL zu stellen.
Dann sollte die SQL-Bedingung, die Yaslaw nannte auch greifen ^^

mano :) das sollte doch möglich sein ohne das ich jetzt noch an meiner selbst gebastelten Sprach CMS herumbasteln muss.... :)

da könnte ich ja auch irgendwelche zeichen nehmen und mit stristr() arbeiten :)... Alle wege führen nach Rom. und ich bin mir 100% sicher das dies auch mit einer Leeren spalte gehen sollte :/

Vielen dank für die bissherige Hilfe
 
das:
SQL:
SELECT
IF(LENGTH({$sprache})>0,{$sprache},de) AS value,
id FROM {$seite}

könnte funktionieren,
aber ist value nicht ein schlüsselwort?
oder war das nur bei MS SQL?
 
Zurück