database openen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Frits van Leeuwen

Frits van Leeuwen

15/08/2017 22:05:51
Quote Anchor link
Het wordt een interessante discussie. Maar al met al weet ik dus eigenlijk nog niet goed of er een goed werkbare functie is om een ini-bestand te schrijven. Ik heb mijn installatie zo herschreven dat ik een array kan wegschrijven.
De code om mijn array voor een eerste maal te vullen is de volgende:

Quote:
$b=array('programmanaam'=>'Test','versienummer'=>'0.1.0.alpha.8','host'=>'localhost','gebruiker'=>'Test','wachtwoord'=>'Test','database'=>'db_test');

Maar op een later tijdstip gaat deze door een form, waarna ze weer anders kunnen zijn.
Gewijzigd op 15/08/2017 22:06:24 door Frits van Leeuwen
 
PHP hulp

PHP hulp

22/12/2024 20:02:00
 
- Ariën  -
Beheerder

- Ariën -

15/08/2017 22:07:13
Quote Anchor link
Mijn code zou op-sich moeten werken, hoewel er nog wel sprake is van een locking-probleem zoals Ben zegt.
maar of die procedure echt nodig is, betwijfel ik. Tenzij je met meerdere mensen massaal tegelijkertijd config-files zit te schrijven.

Het is immers ook een stuk code die ik uit mijn archief gehaald heb.
 
Frits van Leeuwen

Frits van Leeuwen

15/08/2017 22:40:09
Quote Anchor link
Ik kreeg er een foutmelding op. Dus ik ben gaan zoeken. Voor als nog heb ik geen fout kunnen ontdekken. Ik haal de functies nu regel voor regel over. Natuurlijk kijk ik naar de commandostructuur. En na iedere kopieerslag test ik weer.
 
Ben van Velzen

Ben van Velzen

15/08/2017 22:42:47
Quote Anchor link
Wat wint degene die de foutmelding raadt?
 
Frits van Leeuwen

Frits van Leeuwen

15/08/2017 23:10:41
Quote Anchor link
Hahaha.... we maken er een kwis van ;-)

Inmiddels weer een stapje verder.
Ik heb de array naar een ini-bestand kunnen schrijven. Ik heb de functies die Ariën schreef, samengevoegd en terug gebracht in de code. Nu geen losse functie meer. Dat kan ik misschien later wel weer invoeren.
Maar hoe krijg ik nu categorie-kopen er in? Moet ik daarvoor een aparte schrijfopdracht maken? En na een categorie een lege regel. Ook een losse schrijfopdracht? Of werkt dat anders in combinatie met een array?

Voor nu is het weer genoeg. slaap lekker allemaal en tot de volgende keer.
 
Ben van Velzen

Ben van Velzen

15/08/2017 23:27:59
Quote Anchor link
Laten we eens een INI file schrijven, bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$config
= array(
  'database' => array(
    'host' => 'localhost',
    'gebruiker' => 'Test',
    'wachtwoord' => 'Test',
    'database' => 'db_test'
  ),
  'general' => array(
    'programmanaam' => 'test',
    'versienummer' => '0.1.0.alpha.8'
  )
);

function
write_config($filename, $config) {
  $output = '';
  foreach ($config as $section => $settings) {
    $output .= '[' . $section . ']' . PHP_EOL;
    foreach ($settings as $key => $value) {
      $output .= $key . ' = ' . $value . PHP_EOL;
    }

    $output .= PHP_EOL;
  }

  file_put_contents($filename, $output);
}

?>

Dit is even uit de losse pols, werking is niet gegarandeerd.
Gewijzigd op 15/08/2017 23:29:43 door Ben van Velzen
 
Frits van Leeuwen

Frits van Leeuwen

16/08/2017 08:36:07
Quote Anchor link
Geweldig. Hier leer ik weer veel van. dank je wel.
Ik was zo ver dat ik met mijn array $b[host] kon inzetten als ik die variabele nodig heb. Maar hoe werkt dat met deze zelfde variabele in een array met een array er in?
 
Thomas van den Heuvel

Thomas van den Heuvel

16/08/2017 10:45:58
Quote Anchor link
Maar waarom werk je in eerste instantie met .ini bestanden? Waarom geen configuratiebestand rechtstreeks in PHP? Dit lijkt mij enorm omslachtig. Wat is de meerwaarde van gebruik van een .ini bestand boven een andere constructie? Regel je hier ook andere configuratie in, of alleen maar die van je database?

Ik denk dat je het jezelf alleen maar moeilijk(er) aan het maken bent op dit moment. En daarbij mogelijk uit het oog verliest wat belangrijk(er) is.
Gewijzigd op 16/08/2017 10:46:23 door Thomas van den Heuvel
 
Ben van Velzen

Ben van Velzen

16/08/2017 11:11:30
Quote Anchor link
>> Ik was zo ver dat ik met mijn array $b[host] kon inzetten als ik die variabele nodig heb. Maar hoe werkt dat met deze zelfde variabele in een array met een array er in?
Door $b['database']['host'] te gebruiken. Die quotes moet je niet vergeten, dat levert alleen maar gezeur op.
Ik moet wel zeggen dat ik het eens met met Thomas, maar volgens mij is dit ook al eerder aangehaald in het topic.

NB: Om uit parse_ini_file dezelfde array terug te krijgen als die je in de genoemde functie stopt kun je het 2e argument op true zetten, dus $config = parse_ini_file('je_bestand.ini', true);
Gewijzigd op 16/08/2017 11:14:27 door Ben van Velzen
 
- Ariën  -
Beheerder

- Ariën -

16/08/2017 11:21:02
Quote Anchor link
Het punt is dat ini-files niet door PHP geparsed worden, en dus als tekst gewoon te lezen zijn. Dus je moet ze verplicht buiten de webroot tonen.

Bij bestanden met een .php extentie hoeft dit niet, omdat de variabelen en waardes gewoon door de PHP-parser gaan, en de output dan toch leeg is. Hoewel het als extra veiligheidslaag wel aan te raden is om het alsnog buiten de webroot te zetten.

Bovendien kan je de instellingen ook in een PHP-array zetten zodat je ze kan gebruiken bij debugging bijvoorbeeld.
 
Thomas van den Heuvel

Thomas van den Heuvel

16/08/2017 11:35:29
Quote Anchor link
Het punt is dat je een reden zou moeten hebben om deze constructie te gebruiken. Als je niet kunt motiveren waarom je je in allerlei bochten aan het wringen bent ben je enkel onnodig moeilijk aan het doen.
 
Ben van Velzen

Ben van Velzen

16/08/2017 11:39:32
Quote Anchor link
Je zou een ini file als volgt kunnen beginnen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
;<?php
;die()
;
?>

En dan je bestand bijvoorbeeld config.ini.php noemen. Is uiteraard ook weer moeilijk doen terwijl het ook makkelijk kan.
Gewijzigd op 16/08/2017 11:39:53 door Ben van Velzen
 
Thomas van den Heuvel

Thomas van den Heuvel

16/08/2017 11:57:31
Quote Anchor link
Dit kan inderdaad, maar waarom zou je dit doen?

Waarom is het altijd op dit forum dat er nooit afgeweken wordt van het ingeslagen pad? Mensen die reageren gaan vaak (altijd?) mee met wat de TS wil, zonder dat men precies weet wat de TS voor ogen heeft :/. Misschien zit de TS er wel gewoon naast?

Stel dat de ingeslagen weg bij nader inzien niet goed was, zitten we hier met zijn allen een hoop tijd te verdoen. Het lijkt mij de verantwoordelijkheid van de TS om zijn/haar zaak hard te maken en kan motiveren waarom deze denkt dat hij/zij met de gekozen aanpak op de goede weg is. Dit klakkeloos aannemen lijkt mij een vergissing.

Waarom lijken jullie dit niet te zien? Of is dit forum sowieso een soort afhaalchinees, iemand doet een bestelling en deze wordt altijd geleverd? Adje hoc, volgende probleem?
 
Frits van Leeuwen

Frits van Leeuwen

16/08/2017 12:35:29
Quote Anchor link
Wat is een TS?

Om op jouw punt terug te komen hoe zet ik database gegevens rechtstreeks in php?
Mijn gedachte zijn dat ik bij nu nog onbekende mensen mijn programma wil kunnen draaien. Ik bevraag eerst in een installatie bestand de gebruiker. Waar ik een database kan stallen. Het is niet mijn bedoeling om het over internet te laten draaien. Wel wil ik het web-based hebben en via een netwerk of lokaal moet het dan gaan werken.

Op dit moment sta ik aan het begin van de ontwikkeling van dat programma. Maar ook ik zelf wil via dit programma ook een hoop leren over php. Ik kom al een heel eind, maar ik loop zo af en toe ergens tegen aan. Ik heb op advies van dit forum mijn denkwijze om gegooid. Daarna kreeg ik nieuw inzichten vanuit dit forum. Deze probeer ik direct toe te passen.
 
Marthijn Buijs

Marthijn Buijs

16/08/2017 12:38:25
Quote Anchor link
Een TS betekend Topic Starter.

Verder is het misschien verstandig om eerst PHP te leren en vervolgens pas een programma/webapplicatie gaan schrijven, probeer eerst gewoon wat praktische kennis op te doen.
 
Frits van Leeuwen

Frits van Leeuwen

16/08/2017 15:48:56
Quote Anchor link
Ben,
je had een mooi stukje code geschreven.(15/08/2017 23:27:59) Bedankt hier voor. Helemaal begrijpen doe ik het nog niet , maar daar kom ik wel uit.
Alleen voor jouw informatie (en dat van alle lezers die er iets mee willen) zet deze code alles in 1 lange string.
 
Ben van Velzen

Ben van Velzen

16/08/2017 15:55:33
Quote Anchor link
Open het bestand eens met iets anders dan kladblok, dan zie je dat dat niet zo is :)
EDIT: net de code even getest, als ik de code op Windows laat draaien krijg je Windows enters, als je het op een Linux of OSX machine laat draaien wordt het anders. Fatsoenlijke editors snappen het dan nog wel, het kladblokje van Windows alleen niet.
Gewijzigd op 16/08/2017 15:58:43 door Ben van Velzen
 
Frits van Leeuwen

Frits van Leeuwen

16/08/2017 17:46:32
Quote Anchor link
Ik had niet verwacht dat kladblok het probleem zou zijn.
Nu lijk ik weer terug te zijn bij het begin van deze topic. Ik heb de installatie procedure aangepast, zodat ik nu een gebruikelijke versie van een ini-bestand heb. Nu is het inlezen weer aan de beurt.
Het probleem bleek te zijn, dat ik een spatie achter de inhoud van de variabele kreeg. Een oplossing die ik aangereikt kreeg, was parse_ini_file(). Hiervoor had ik natuurlijk wel een goed ini-bestand nodig. Deze is me hier goed aangegeven. Bedankt allemaal voor zover.

Ik ga nu speuren hoe ik parse_ini_file() kan gaan gebruiken.
 
Ben van Velzen

Ben van Velzen

16/08/2017 18:15:58
Quote Anchor link
Nou, technisch gezien kreeg je geen spatie, het was een enter die als spatie werd weergegeven. Dat is een artifact van fread, file etc. Regeleindes worden gewoon aan de data toegevoegd, maar wordt ook als delimiter gebruikt. Een beetje een "trap for young players".
 
Frits van Leeuwen

Frits van Leeuwen

17/08/2017 00:08:07
Quote Anchor link
Met de volgende code (Die heb ik nu) om een ini-bestand in te lezen, krijg ik niets leesbaars in beeld. Dus ook geen foutmelding. Wat doe ik dan niet goed. Ik heb het gevoel dat ik dichtbij ben, maar toch ook nog net niet. Het ini-bestand is gevuld. Het staat ook nog gewoon in de root.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
    <head>
        <title>Basisbestand</title>
        <link rel="stylesheet" type="text/css" href="css/style.css">    
    </head>
    
    <body>
        <header>
        </header>
        <content>
            <?php
                $b
=print_r(parse_ini_file("test.ini",true));
                echo $b;
                //database openen
                echo $b['algemeen']['programmanaam'];
            ?>

        </content>
        <footer>
        </footer>
    </body>
</html>


Toevoeging op 17/08/2017 00:09:13:

Met de volgende code (Die heb ik nu om een ini-bestand in te lezen, krijg ik niets leesbaars in beeld. Dus ook geen foutmelding. Wat doe ik dan niet goed. Ik heb het gevoel dat ik dichtbij ben, maar toch ook nog net niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
    <head>
        <title>Basisbestand</title>
        <link rel="stylesheet" type="text/css" href="css/style.css">    
    </head>
    
    <body>
        <header>
        </header>
        <content>
            <?php
                $b
=print_r(parse_ini_file("test.ini",true));
                echo $b;
                //database openen
                echo $b['algemeen']['programmanaam'];
            ?>

        </content>
        <footer>
        </footer>
    </body>
</html>



- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 17/08/2017 16:04:28 door - Ariën -
 

Pagina: « vorige 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.