Functie returnt niet wat verwacht wordt

Status
Niet open voor verdere reacties.

5blabla5

Gebruiker
Lid geworden
27 apr 2009
Berichten
485
Ik ben voor educatie bezig met een simpele flat file database, alleen loop ik nu vast op het gebruik van alle functies.

In het bijgevoegde zip pakket zit het hele systeem, waarin in de mappen commands en functions de functies zitten die moeten worden gebruikt. Ook heb ik een functie gemaakt die settings.php leest en de juiste instelling ophaalt.

Het probleem van deze functie is dat hij maar één letter teruggeeft (zoals c, maar ook wel eens een s). Ik heb veel geprobeerd, maar het lukt gewoon niet, dus mijn vraag is of iemand hier naar kan kijken.

ps: Als er nog andere dingen zijn die niet netjes of goed zijn geschreven, dan mag je het ook melden ;)
 
Laatst bewerkt:
Kun je de relevante code niet gewoon hier posten? Dat scheelt een hoop zoekwerk :p


Overigens als je een string verwacht en een enkele letter terugkrijgt, is het probleem meestal dat je de string als een array aan het benaderen bent ergens.
 
Laatst bewerkt:
settings.php:
Bestand met de instellingen
PHP:
<?php
// Settingfile for Terminal Database V1.0

// Warning:
// - Maps must be existing
// - Removing settings is dangerous for the system
// - Editing settingnames is also dangerous
// - No slash(es) (/) after maps

// Base dir for databases
$setting['basedir']        = 'data';

// Base dir for system files
$setting['systemdatadir']  = 'system';

// Base dir for system data
$setting['sessiondatadir'] = 'system/data';

// Base dir for command functions
$setting['commanddir']     = 'commands';

// Base dir for functions
$setting['functiondir']    = 'functions';

// Base dir for subfunctions
$setting['subcommanddir'] = 'commands/sub';

?>

functions.php:
Alle functiebestanden uit de mappen includen
PHP:
<?php
// functions.php
// Function include

include_once 'settings.php';

$dirs[0] = $setting['commanddir'];
$dirs[1] = $setting['functiondir'];
$dirs[2] = $setting['subcommanddir'];

foreach($dirs as $dir) {
	$files = scandir($dir);
	foreach($files as $file) {
		if(strpos($file, '.php')) {
			$includes[] = $dir . '/' . $file;
		}
	}
}

foreach($includes as $include) {
	include $include;
	echo $include . ' included<br />';
}
?>

tq_get_setting.php:
functie om een instelling op te halen
PHP:
<?php
// function tq_get_setting($setting);

function tq_get_setting($setting) {
	if(file_exists('settings.php')) {
		include 'settings.php';
		
		if(isset($setting[$setting])) {
			return $setting[$setting];
		} else {
			return FALSE;
		}
	} else {
		return FALSE;
	}
}
	
?>

Voorbeeld:
PHP:
<?php
include 'functions.php';

echo tq_get_setting('systemdatadir');

?>
geeft:
Code:
commands/tq_create.php included
functions/terminal_error.php included
functions/terminal_fetch_assoc.php included
functions/terminal_num_rows.php included
functions/terminal_query.php included
functions/terminal_select_db.php included
functions/terminal_start.php included
functions/tq_get_db.php included
functions/tq_get_setting.php included
commands/sub/tq_create_db.php included
commands/sub/tq_create_tb.php included
c
die laatste c moet dan de uitkomst zijn, aangezien de bestandsnamen een soort van testlog zijn die door functions.php is gemaakt...

Ik ga vanavond of morgen noch even kijken naar dat array geval ;)
 
PHP:
        if(isset($setting[$setting])) {

Hou je er rekening mee dat je hier 2x dezelfde variabele gebruikt? ;) Volgensmij wordt er het eea overschreven en dat zou best wel eens voor de problemen kunnen zorgen.
 
Bekijk eens deze mannier van werken hierdoor zonder je problemen af.
PHP:
include_once 'settings.php';

$dirs[0] = $setting['commanddir'];
$dirs[1] = $setting['functiondir'];
$dirs[2] = $setting['subcommanddir'];

//$dirs = array_values($setting);
 
$x = new includer($dirs);
$x->debug();
if (!function_exists('includer')){//include_once its when it is include in the php lib
class includer{
    private $includes;
    private $isdebug = true;
    public function __construct() {
        foreach($dirs as $dir) {
            $files = scandir($dir);
            foreach($files as $file) {
                if(strpos($file, '.php')) {
                    $this->includes[] = $dir . '/' . $file;
                }
            }
        }
    }
    public function debug(){
        if($isdebug){
          foreach($includes as $include) {
            include $include;
            echo $include . ' included<br />';
          }
        }
    }
}

?>
en van die settings zie ik het nut niet van in
Ik heb een gelijklopend systeem die al iets verder staat moet je een bekijken
http://code.google.com/p/autosite/
 
Vraag me niet waarom, maar ik hou niet van classes...
Ik ga morgen nog wel even verder kijken naar andere oplossingen voor instellingen :)
 
Heb even wat geprobeerd, heb als oplossing het volgende gebruikt:

ipv:
$setting['systemdatadir'] = 'system';
dit:
$systemdatadir = 'system';

En om de variabele aan te roepen:

if(isset($$setting)) {
return $ssetting;
} else {
return FALSE;
}


Opgelost dus!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan