language selection in database...

Status
Niet open voor verdere reacties.

ginojo

Gebruiker
Lid geworden
7 sep 2010
Berichten
912
Hallo allemaal,

ik heb weer eens een probleempje, normaal kom ik er de laatste tijd wel zelf uit, maar nu loop ik egt vast.. :p ik ben nu dus weer een meertalige website aan het maken, maar deze gaat via een database, het principe werkt als volgt:

kijkt of het ip met taal (lang) al bestaat in db
zo ja, include de taal-file
zo nee, maak niewe record aan met standaard taal, (nl, gebeurd al in db)

mijn code hiervoor is:
PHP:
$ip = getenv('REMOTE_ADDR'); //ip-adres verkrijgen van bezoeker
include "../server/inc/iplog-con.php"; //database connector
if(mysql_num_rows(mysql_query("SELECT ip FROM iplog WHERE ip='$ip'")) != 0) { //kijken of de record al bestaat
$lang = (mysql_query("SELECT lang FROM iplog WHERE ip='$ip'")); // taal van record eruit halen
include("./lang/$lang.php"); //taal-file includen
} else {
mysql_query("INSERT INTO iplog (ip) VALUES ('$ip')",$db); //nieuwe ip-adres invoegen met standaard taal
$lang = (mysql_query("SELECT lang FROM iplog WHERE ip='$ip'")); //taal van record eruit halen
include("./lang/$lang.php"); //taal-file includen
}

Maar als ik dan bijv dit doe:
PHP:
echo "$lang"; //taal echoen
dan krijg ik als uitkomst:
Code:
Resource id #4

hmmm, weet iemand wat het probleem is?:confused:

alvast bedankt,
Ginojo
 
Als je een query uitvoert in PHP op een database, krijg je een resource en geen array of iets anders.
Dit zal je moeten omzetten. Wat ik meestal doe bij het uitvoeren van een query is het volgende:
PHP:
if (($result = mysql_query("De query die je wilt uitvoeren")) == true) {
   while (($row = mysql_fetch_object($result)) == true) {   // Omdat er misschien meerdere rows zijn
      $row->lang   // lang is de kolom naam die je ophaalt uit de database
   }
}

Hiermee zet je een resource MySql object om naar een object array

Groeten Maikel
 
:( Ik krijg dan een error... :(
nou eig beter gezegd, helemaal niks. :( 1 lege pagina
 
Kan je het stuk van jou code misschien laten zien.

En om alle errors zichtbaar te maken in je webbrowser, moet je bovenaan je scriptpagina het volgende zetten:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', '1');
setlocale(LC_ALL, 'nl_NL.UTF-8');
 
ok, met dat stukje om alle errors zichtbaar te maken doet ie nog niks, gewoon 1 hele lage pagina, maar dit is zegmaar het stuk dat voor de taal zorgt...
PHP:
$ip = getenv('REMOTE_ADDR'); //ip-adres verkrijgen
include "../server/inc/iplog-con.php"; //database connectie
if(mysql_num_rows(mysql_query("SELECT ip FROM iplog WHERE ip='$ip'")) != 0) { //kijken of het ip-adres al bestaat
if (($result = mysql_query("SELECT lang FROM iplog WHERE ip='$ip'")) == true) { //zo ja, ...
   while (($row = mysql_fetch_object($result)) == true) {   // Omdat er misschien meerdere rows zijn
      $row->lang   // lang is de kolom naam die je ophaalt uit de database
   }
}
include("./lang/$lang.php"); //language file includen met alle teksten erin
} else { //als het ip niet bestaat
mysql_query("INSERT INTO iplog (ip) VALUES ('$ip')",$db); // ip toevoegen
//hier moet dan hetzelfde komen als bij "zo ja, ..." ;)
}

er klopt vast een hoop niet, maar ik ben leergierig, ;)

alvast bedankt voor alle hulp die je me tot nu toe hebt geboden en ik hoop dat je me verder kan helpen,
Ginojo
 
In de waarde "$row->lang" zit de language-file die je wilt gebruiken. Maar verderop gebruik je $lang die nergens ander voorkomt en dus gewoon leeg is

Als je de volgende regel omzet krijg je het verzoek om " .php" te gebruiken. Een leeg php-bestand die niet bestaat.
Code:
include("./lang/$lang.php")

Probeer het volgende stuk code. Het is precies hetzelfde als jou code, alleen heb ik de variabele $lang eraan toegevoegd.
PHP:
<?php
$ip = getenv('REMOTE_ADDR'); //ip-adres verkrijgen
include "../server/inc/iplog-con.php"; //database connectie
if(mysql_num_rows(mysql_query("SELECT ip FROM iplog WHERE ip='$ip'")) != 0) { //kijken of het ip-adres al bestaat
	$lang = "":
	if (($result = mysql_query("SELECT lang FROM iplog WHERE ip='$ip'")) == true) { //zo ja, ...
	   while (($row = mysql_fetch_object($result)) == true) {   // Omdat er misschien meerdere rows zijn
		  $lang = $row->lang   // lang is de kolom naam die je ophaalt uit de database
	   }
	}
	include("./lang/$lang.php"); //language file includen met alle teksten erin
} else { //als het ip niet bestaat
	mysql_query("INSERT INTO iplog (ip) VALUES ('$ip')",$db); // ip toevoegen
	//hier moet dan hetzelfde komen als bij "zo ja, ..." ;)
}
?>

En daarnaast om alle foutmeldingen te zien, moet de index.php beginnen met het volgende:
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
setlocale(LC_ALL, 'nl_NL.UTF-8');
?>
<DOCTYPE...

Groeten vreugde
 
YES! bedankt!!! het is gelukt, heb die code van je een klein beetje moeten aanpassen, btw, er staat 1 klein foutje in, regel 5 ";" ipv ":"... :)
maar maaakt niet uit, het werkt.. bedankt!!! duizend maal bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan