Taal uit tabel halen

Status
Niet open voor verdere reacties.

JeroenE

Terugkerende gebruiker
Lid geworden
20 mrt 2005
Berichten
1.950
Hallo,

Ik zou graag een taal uit een tabel halen die bepaald wordt door de bezoeker van de site, met als referentietaal engels.
Momenteel heb ik het volgende:

Een variabele die in de toekomst in een cookie moet met de keuze van de bezoeker, maar nu zelf gekozen:

PHP:
$sln = "nl";

Het uit de database halen van de twee talen, hier engels en nederlands.

PHP:
switch ($sln) {
	case "en":
		$sl = "english";
		break;
	case "nl":
		$sl = "dutch";
		break;
	case "fr":
		$sl = "french";
		break;
	default:
		$sl = "english";
		break;
}

$atranslationssql = ($sl != "english") ? "SELECT english, $sl from translations" : "SELECT english from translations";
// geen idee of de bovenstaande lijn wel werkt
$atranslationsquer = mysql_query($atranslationssql, $sdb) or die(mysql_error());

Een functie die de gegevens opzoekt in de $atranslationsquer.

PHP:
function ffindcontent($sstr) {
    while ($stranslationline = mysql_fetch_object($atranslationsquer)) {
        if ($sstr == $stranslationline->english) $stext = $stranslationline->$sln;
    }
	return $stext;
}

De aanroep van de functie:

PHP:
echo ffindcontent("register");

Toch werkt dit niet.
Hoe los ik dit op?
 
Laatst bewerkt:
Ik gok dat $atranslationsquer in je functie niet zal bestaan. Verder is het gebruik van de mysql_*() functies af te raden, omdat deze in PHP 7 verwijderd zullen zijn.
Gebruik MySQLi of PDO!
 
Welke is de snelste? MySQLi of PDO?

Ik heb een omweg gemaakt en eerst de gegevens van $atranslationsquer in een nieuwe array geplaatst. Ook hier bestaat de array niet binnen de functie.
Enig idee hoe ik die wel kan aanroepen in de functie?
 
Via 'global' inladen of via een parameter in je functie.
 
En hoe doe je dat?
Ik geraak er niet echt wijs uit op w3schools omdat het enige voorbeeld daar enkel met twee variabelen werkt en niet met een array
 
dit is mogelijk iets niet de oplossing maar
PHP:
<?php
	/**
	* @author L Roegiers
	* @copyright 2009
        * refactor 2014 
 	* @CMS autosite
 	* opensource http://code.google.com/p/autosite/
	* @return new properties()
	*/
class Properties{
	    private $locale ;
	    private $database;
            private $i_am = null;
            private $default='NL';
            private $enabled = true;
        public function __construct($locale){
            //print "local".$locale;
            if($this->is_locale(strtolower($locale))){
                $this->locale = strtolower($locale);
            }else{
                $this->locale = strtolower($this->default);
            }
           //$this->enabled=($this->database = \DBConn::GET());//returns a singleton connection PDO 
           $this->enabled=($this->database = new PDO($conn, $usr, $pwd));//moet je zelf invullen
        }
	public function getproperties($tofind_keys,$prefix=''){
		    if(!$this->enabled){return false;}//no database
		    if(!is_array($tofind_keys))throw new exception('variable tofind_keys is not array');
			$asoarr=array();//SELECT * FROM translations WHERE local='en' and ( key='from'or key='to'or key='save')
            $questionmarks = implode('?,',$tofind_keys).'?';
            $dbSql = "SELECT * FROM `translations` WHERE `locale`='".$this->locale."' and `key`=:key";         
            $dbStmt = $this->database->prepare($dbSql);
            //$dbStmt->bindValue(':locale',$this->locale,PDO::PARAM_STR);
            $return = array();
            foreach($tofind_keys as $key){
               $dbStmt->bindValue(':key',$key,PDO::PARAM_STR);
               $dbStmt->execute();
               $dbRij = $dbStmt->fetch(PDO::FETCH_ASSOC);
                   if(!isset($dbRij['value'])&&!key_exists($key,$return)){
                        $return[$key] = '-?-'.$key.'@'.$this->locale.'-?-' ;
                   }else{
                        $return[$key]= $dbRij['value'];
                   }
               
            }
	    return $return;	
	}
        public function getlocale(){
            return $this->locale;
        }

        public function getPropertie($key){
            if(!$this->enabled){return false;}//no databas
            $dbSql = "SELECT * FROM `translations` WHERE `locale`='".$this->locale."' and `key`=:key"; 
            $dbStmt = $this->database->prepare($dbSql);
            $dbStmt->bindValue(':key',$key,PDO::PARAM_STR);
            $dbStmt->execute();
            if($dbRij = $dbStmt->fetch(\PDO::FETCH_ASSOC)){
                return  $dbRij['value'];
            }else{
                return $key;
            }
        }
        public function getATranslation($key,$locale){
            $dbSql = "SELECT value FROM `translations` WHERE `locale`='".$locale."' and `key`=:key";  
            $dbStmt = $this->database->prepare($dbSql);
            $dbStmt->bindValue(':key',$key,PDO::PARAM_STR);
            $dbStmt->execute();
            if($dbRij = $dbStmt->fetch(\PDO::FETCH_ASSOC)){
                return  $dbRij['value'];
            }
            return false;
        }
        public function is_locale($locale){
            return preg_match('/^([a-z]{2})$/',$locale);
        }
        public function __toString(){
            return  "=>class:\n\t Properties locale=>'$this->locale'";
        }

}
?>
 
Laatst bewerkt:
@ kenikavanbis
Waarom geef je een hele classe terwijl iemand gewoon een simpele oplossing zoekt? Denk soms gewoon eens niet zo moeilijk ;)

Wat Jeroen kan doen is in zijn functie:

- global $atranslationsquer; te gebruiken.
- Of een parameter toe te voegen: function ffindcontent($sstr,$array) { zodat je met ffindcontent('register',$atranslationsquer); de query kan toevoegen,

Officieel heet de uitkomt van een mysql(i)_query() eigenlijk een result, maar dat terzijde.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan