Hallo,

Ik ben bezig geweest met data naar een ini file te zetten. Maar ik kom er niet achter hoe ik iets update.

$hostname = $_POST['hostname'];
$username = $_POST['username'];
$password = $_POST['password'];
$database = $_POST['database'];
$prefix   = $_POST['prefix'];

$dbData = array(
                'dbData' => array(
                    'hostname' => $hostname,
                    'username' => $username,
                    'password' => $password,
                    'database' => $database,
                    'prefix' => $prefix,
                ));
write_php_ini('config.ini', true);

function write_php_ini($array, $file)
{
    $res = array();
    foreach($array as $key => $val)
    {
        if(is_array($val))
        {
            $res[] = "[$key]";
            foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.$sval.'"');
        }
        else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"');
    }
    safefilerewrite($file, implode("\r\n", $res));
}

function safefilerewrite($fileName, $dataToSave)
{    if ($fp = fopen($fileName, 'config.ini'))
    {
        $startTime = microtime(TRUE);
        do
        {            $canWrite = flock($fp, LOCK_EX);
           // If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
           if(!$canWrite) usleep(round(rand(0, 100)*1000));
        } while ((!$canWrite)and((microtime(TRUE)-$startTime) < 5));

        //file was locked so now we can store information
        if ($canWrite)
        {            fwrite($fp, $dataToSave);
            flock($fp, LOCK_UN);
        }
        fclose($fp);
    }
}

maar als ik dan bijvoorbeeld iets erbij wilt zoals
'naam' => $naam,
maar zonder dat je die andere velden hoeft in te vullen, hoe doe ik dat dan? Met een hidden form? Of...
Ja, die kan je dan in een hidden form zetten of met parse_ini_file() uit je databestand halen.
write_php_ini('config.ini', true);

function write_php_ini($array, $file)

Dit lijkt mij niet kloppen. Het gebruik van parameters in de declaratie en de aanroep stemt niet overeen.
Inderdaad, hij verwacht eerst je array met ALLE gegevens die je wilt opslaan, en daarna de bestandsnaam van je .ini-file die hij moet beschrijven.
Dit script is van - Ariën - :P
Maar mijn voorbeeld die ik eerder gaf werkte prima.
Dit werkt ook prima:

<?php
error_reporting(0);
if ($_GET['stap'] == 1) {
	$headertitle = "Stap 1";
	$subtitle = "Hieronder kunt u uw database gegevens invullen. Als je hier niet zeker van bent, neem dan contact op met je webhost.";
	$content = '<form method="POST" action="/installeren?stap=1">
	<table class="form-table">
		<tbody><tr>
			<th scope="row"><label for="dbname">Database naam</label></th>
			<td><input name="database" id="dbname" type="text" size="25" value="paneel"></td>
			<td>De naam van de database die je wilt gebruiken voor het paneel.</td>
		</tr>
		<tr>
			<th scope="row"><label for="uname">Gebruikersnaam</label></th>
			<td><input name="username" id="uname" type="text" size="25" value="gebruikersnaam"></td>
			<td>Uw database gebruikersnaam.</td>
		</tr>
		<tr>
			<th scope="row"><label for="pwd">Wachtwoord</label></th>
			<td><input name="password" id="pwd" type="text" size="25" value="wachtwoord" autocomplete="off"></td>
			<td>Uw database wachtwoord.</td>
		</tr>
		<tr>
			<th scope="row"><label for="dbhost">Database Host</label></th>
			<td><input name="hostname" id="dbhost" type="text" size="25" value="localhost"></td>
			<td>Je zou deze informatie kunen krijgen door je webhost, als <code>localhost</code> niet werkt.</td>
		</tr>
		<tr>
			<th scope="row"><label for="prefix">Tabel Prefix</label></th>
			<td><input name="prefix" id="prefix" type="text" value="panel_" size="25"></td>
			<td>Als je meerdere panelen in 1 database wilt, verander dan dit.</td>
		</tr>
	</tbody></table>
	<p class="step"><input name="datadb" type="submit" value="Verzenden" class="button button-large"></p>
</form>';
	
} elseif ($_GET['stap'] == 2) {
		$headertitle = "Stap 2";
	$subtitle = "Hieronder kunt u uw bedrijf gegevens invullen. Deze gegevens kan je later nog veranderen.";
	$content = '<form method="POST" action="/installeren?stap=1">
	<table class="form-table">
		<tbody><tr>
			<th scope="row"><label for="company">Bedrijfsnaam</label></th>
			<td><input name="company" id="company" type="text" size="25" value="paneel"></td>
			<td>De naam van het bedrijf.</td>
		</tr>
		<tr>
			<th scope="row"><label for="logo1">Logo</label></th>
			<td><input name="logo" id="logo1" type="text" size="25" value=""></td>
			<td>Het logo van het bedrijf.</td>
		</tr>
		<tr>
			<th scope="row"><label for="ss">Site status</label></th>
			<td><input name="sitestatus" id="ss" type="text" size="25" value="Online" autocomplete="off"></td>
			<td>De status van het paneel, standaard is online.</td>
		</tr>
	</tbody></table>
	<p class="step"><input name="datadb" type="submit" value="Verzenden" class="button button-large"></p>
</form>';
} elseif ($_GET['stap'] == 3) {
	$headertitle = "Stap 3";
	$title = "";
} elseif (empty($_GET['stap'])) {
	$headertitle = "Start";
	$title = "<h1>Voor we gaan starten</h1>";
	$subtitle = "Welkom op de configuratie voor het nieuwste community paneel. Voor we gaan starten, hebben we wat informatie nodig voor de website optezetten. Je moet de volgende dingen weten voor je verder gaat.";
	$content = "<ol>
			<li>Database gegevens</li>
			<li>Bedrijf gegeven/details</li>
		</ol>";
	$subcontent = "We gaan deze informatie gebruiken voor de configuratie het paneel en het instellen van de database, mocht het niet werken kun je het op een later tijdstip opnieuw proberen.";
	$extra = "Als het goed is, werden de database gegevens aan u geleverd door uw webhost. Als u deze informatie niet hebt, dan moet u uw webhost contacteren. Als je al klaar bent...";
	$button = '<a href="?stap=1" class="button button-large">Beginnen!</a>';
} else {
	$headertitle = "...";
	$title = "Deze stap kan niet worden gevonden.";
}

	$hostname    = $_POST['hostname'];
	$username    = $_POST['username'];
	$password    = $_POST['password'];
	$database    = $_POST['database'];
	$prefix      = $_POST['prefix'];
	$company     = $_POST['company'];
	$logo        = $_POST['logo'];
	$sitestatus = $_POST['sitestatus'];

	if (empty($hostname)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$hostname = $_CONFIG['hostname'];
	}
	if (empty($username)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$username = $_CONFIG['username'];
	}
	if (empty($password)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$password = $_CONFIG['password'];
	}
	if (empty($database)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$database = $_CONFIG['database'];
	}
	if (empty($prefix)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$prefix = $_CONFIG['prefix'];
	}
	if (empty($company)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$company = $_CONFIG['company'];
	}
	if (empty($logo)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$logo = "https://upload.wikimedia.org/wikipedia/commons/3/33/Vanamo_Logo.png";
	}
	if (empty($sitestatus)) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$sitestatus = "Online";
	}

	$array = array(
	    'hostname' => $hostname,
	    'username' => $username,
	    'password' => $password,
	    'database' => $database,
	    'prefix'   => $prefix,
	    'company'  => $company,
	    'logo'     => $logo,
	    'site_status' => $sitestatus,
	    'encoding' => 'ANSI'
	);

	write_php_ini($array, "../datafile.ini");


	/*DO NOT EDIT UNDER THIS LINE! */
	/* ==============================================================*/
	function write_php_ini($array, $file)
	{
	    $res = array();
	    foreach($array as $key => $val)
	    {
		   if(is_array($val))
		   {
			  $res[] = "[$key]";
			  foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.$sval.'"');
		   }
		   else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"');
	    }
	    safefilerewrite($file, implode("\r\n", $res));
	}

	function safefilerewrite($fileName, $dataToSave)
	{    if ($fp = fopen($fileName, 'w'))
	    {
		   $startTime = microtime(TRUE);
		   do
		   {            $canWrite = flock($fp, LOCK_EX);
			 // If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
			 if(!$canWrite) usleep(round(rand(0, 100)*1000));
		   } while ((!$canWrite)and((microtime(TRUE)-$startTime) < 5));

		   //file was locked so now we can store information
		   if ($canWrite)
		   {            fwrite($fp, $dataToSave);
			  flock($fp, LOCK_UN);
		   }
		   fclose($fp);
		   header('?stap=2');
	    }
	}

	if (isset($_POST['datadb'])) {
		$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini');
		$mysqli = @new mysqli ($_CONFIG['hostname'], $_CONFIG['username'], $_CONFIG['password'], $_CONFIG['database']);

		if (mysqli_connect_error()) {
			echo '<p style="color: red;">Niet alle gegevens zijn goed ingevoerd. Probeer het opnieuw.</p>';	
		} else {
			header('Location: ?stap=2');
		}
	}

?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta name="viewport" content="width=device-width">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title><?=$headertitle?> - Configuratie</title>
		<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
		<link rel='stylesheet' id='buttons-css'  href='paneel/assets/css/installation.button.css' type='text/css' media='all'>
		<link rel='stylesheet' id='install-css'  href='paneel/assets/css/installation.css' type='text/css' media='all'>
	</head>
	<body class="wp-core-ui">
		<?=$title?>
		<p><?=$subtitle?></p>
		<?=$content?>
		<p><?=$subcontent?>
		<p><?=$extra?></p>
		<p class="step"><?=$button?></p>
	</body>
</html>

Waarom haal je de data met parse_ini_file niet gewoon 1 keer op om het in een variabele op te slaan? Nu doe je per keer in je code bij alle statements.

$adminpass = password_hash($_CONFIG['adminpass'], DEFAULT_PASSWORD);
		$adminuser = $_CONFIG['adminuser'];
		$table = $_CONFIG['prefix']."users";
		$sql = "INSERT INTO `$table` (`username`, `password`) VALUES ($adminuser, $adminpass)";
$mysqli = @new mysqli ($_CONFIG['hostname'], $_CONFIG['username'], $_CONFIG['password'], $_CONFIG['database']);
		if ($mysqli->query($sql) === TRUE) {
			header('Location: ?stap=3');
		}

Ik heb nu deze query, maar hij voert hem niet goed uit. Ik weet niet waar het probleem ligt en ook niet hoe ik het moet oplossen.. De verbinding is correct, dat weet ik zeker. Ik heb wel een vermoeden wat er fout is. Hij pakt uit datafile.ini "Admin" met "" maar in de query moet het '' zijn.. en als ik de query met '' begin doet de query het niet.

dit is de datafile.ini

prefix = "panel_"
adminuser = "Admin"
adminpass = "SEhUPe9D"
Escapen met $mysqli->real_escape_string()
Dat werkt helaas niet, als ik var_dump() doe blijft het met "" dus ook in de sql

Reageren