Hallo!

Ik had een vraag, hoe kan ik netzo als wordpress de config instellen met een form? Dat je gegevens invoert, zoals language, database-naam, wachtwoord, database-host en tabelprefix. Als jullie weten waar ik dit kan vinden kan je ook een link sturen, of gewoon een bericht met de info. Alvast bedankt!
Verwijderd

[size=xsmall]Toevoeging op 04/12/2016 11:02:34:[/size]

Ariën? Zou je dan voor mij nog die script willen maken? :D
Ik heb het script uitgetest, en het draait prima. En zo moeilijk was het ook niet eens ;-).

Het enige nadeel is dat de hoofdstukken ([database]) niet worden opgeslagen. PHP vindt die blijkbaar niet zo belangrijk. Maar met het gebruik van prefixes (db_host) kan je zelf toch voldoende groeperen.
readini.php

<?php
$setting = parse_ini_file('datafile.ini');
echo "<pre>".print_r($setting,true)."</pre>";
?>


makeini.php

<?php
/* NIEUWE SETTINGS! Je kan hier je POST variabelen gebruiken in de values. Verder gewoon fictieve waardes en keys */
$array = array(
    'db_host' => 'localhost',
    'db_name' => 'a',
    'db_user' => 'a',
    'db_password' => 'c',
    'sitestatus' => 1,
    '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);
    }

}
?>


datafile.ini

db_host     = localhost
db_name     = mijn_website
db_user     = pietje
db_password = T0P_53CR3T 
sitestatus = 1
encoding = UTF8

- Ariën - op 04/12/2016 11:11:29

Ik heb het script uitgetest, en het draait prima. En zo moeilijk was het ook niet eens ;-).

Het enige nadeel is dat de hoofdstukken ([database]) niet worden opgeslagen. PHP vindt die blijkbaar niet zo belangrijk. Maar met het gebruik van prefixes (db_host) kan je zelf toch voldoende groeperen.
readini.php

<?php
$setting = parse_ini_file('datafile.ini');
echo "<pre>".print_r($setting,true)."</pre>";
?>


makeini.php

<?php
/* NIEUWE SETTINGS! Je kan hier je POST variabelen gebruiken in de values. Verder gewoon fictieve waardes en keys */
$array = array(
    'db_host' => 'localhost',
    'db_name' => 'a',
    'db_user' => 'a',
    'db_password' => 'c',
    'sitestatus' => 1,
    '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);
    }

}
?>


datafile.ini

db_host     = localhost
db_name     = mijn_website
db_user     = pietje
db_password = T0P_53CR3T 
sitestatus = 1
encoding = UTF8




Harstikke bedankt! Hier kan ik echt veel mee :D
Dat laat zien hoe je je datafile.ini kan uitlezen. Dat is gewoon een standaard PHP-functie die ik voor het gemak met print_r() (print array) laat zien. Ik zou print_r() zeker niet in productie gebruiken.

Met dit kan je bijvoorbeeld je waarde van db_user ophalen.

<?php
$setting = parse_ini_file('datafile.ini');
echo $setting['db_user'];
?>
Verwijderd
Hallo! Ik wil graag dat hij dat script alleen uitvoerd als er een $_POST is gebeurd, maar als ik dit instell met
if (isset($_POST["start"]))
komt het op een wit scherm met de error: Fatal error: Uncaught Error: Call to undefined function write_php_ini() in C:\xampp\htdocs\Bedrijfspaneel\install.php:21 Stack trace: #0 {main} thrown in C:\xampp\htdocs\Bedrijfspaneel\install.php on line 21. hieronder staat de code die ik heb gebruikt.

if (isset($_POST["start"])) {
    $array = array(
      'db_host' => 'localhost',
      'db_name' => 'b',
      'db_user' => 'a',
      'db_password' => 'c',
      'sitestatus' => 1,
      'encoding' => 'ANSI'
  );

  write_php_ini($array, $_SERVER["DOCUMENT_ROOT"]."/../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);
      }
  }
}



[size=xsmall]Toevoeging op 14/01/2017 10:38:02:[/size]

Zonder te controleren of er een POST is gedaan met start geeft die deze error niet.

[size=xsmall]Toevoeging op 14/01/2017 10:43:19:[/size]

SOLVED
Functies moeten buiten de controleer functie van de POST, anders werkt het niet.
Ik raad liever aan om dit te gebruiken:


<?php
if($_SERVER['REQUEST_METHOD']== "POST") {
// er is ge-Post
}
?>

Als er meerdere knoppen zijn die je kan submitten, dan kan je daarbinnen nog een controle met isset() doen op de bewuste knoppen.
Wat is het verschil tussen deze twee manieren?
Mijn manier is eigenlijk theoretisch gezien het enige juiste. Beiden zal wel werken, maar in mijn ogen is het wel foutgevoeliger als je iets met de submitknop doet. Je wilt immers een formulier 'posten' en niet kijken of er op een knop is gedrukt.
Misschien is die knop er geeneens, en dan kan je het ook niet versturen.
Misschien even een timeout in dit topic inlassen? Topicstarter springt van de hak op de tak. Probeer eens wat uit, en zorg ervoor dat je begrijpt wat je doet.

Iemand kan code voor je kloppen, maar op den duur moet je zelf weten van de hoed en de rand. Behandel één onderwerp per keer en werk dit af voordat je aan iets ander begint. Persoonlijk kom je nogal chaotisch over.

En als je dan toch code dumpt met print_r(), doe dit dan veilig. Zelfs in een testomgeving (die vaak in verbinding staat met het internet). Hetgeen je uitpoept op het scherm kan HTML / JavaScript bevatten.

EDIT: daarnaast doe je er verstandig aan om functies in aparte bestanden onder te brengen die je, mits je deze vaak gebruikt, altijd include. Het is niet handig / verstandig om deze "inline" of zelfs binnen conditionele statements te zetten omdat deze dan maar (heel) soms gedeclareerd zijn.

Reageren