Hallo allemaal,

Ik kom er niet uit. Ik zoek al een hele tijd, maar het wordt me niet duidelijk.

Ik heb in een installatie een database "db_test" laten maken met een user "Test" (ww="Test") en het tekst bestand.ini. In bestand.ini staat alle informatie die nodig is voor het vervolg. Ik heb het gecheckt en dat klopt allemaal.

Bij het openen/starten van "Index.php", haal ik de uit "bestand.ini" binnen, en ik geef ze aan variabelen. Dan wil ik de database activeren en het aantal records tellen dat in de tabel [tabel_administratires] staat. Aan dit laatste durf ik niet goed te beginnen, omdat ik deze melding krijg:

mysql:dbname=db_test ;host=localhost
(2) DB ERROR: invalid data source name

Wie kan me hierin bijstaan?

Index.php
<!DOCTYPE html>
<html>
    <head>
		<title>Basisbestand</title>
		<link rel="stylesheet" type="text/css" href="css/style.css">    
	</head>
	
	<body>
	    <header>
		</header>
		<content>
			<?php
				try {
					//gegevens binnenhalen
					$a = fopen("bestand.ini", "r");
					$b = file("bestand.ini");
						$programmanaam = $b[0];
						$versie = $b[1];
						$hst = $b[2];
						$user = $b[3];
						$pass = $b[4];
						$db = $b[5];
					fclose($a);
				} catch (PDOException $e) {
					die("(1) DB ERROR: ". $e->getMessage());
				}
				
				//database openen
				try {
					$mysql="mysql:dbname=" . $db . ";host=" . $hst;
					echo $mysql . "<br>";
					$dbh = new PDO('$mysql', $user, $pass);
					$dbh->setAttribute( PDO::ATTR_PERSISTENT, TRUE );
					$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
				} catch (PDOException $e) {
					die("(2) DB ERROR: ". $e->getMessage());
				}
			?> 
		</content>
		<footer>
		</footer>
    </body>
</html>



Bestand.ini
Test
0.1.0.alpha.8
localhost
Test
Test
db_test

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.
Je zou een ini file als volgt kunnen beginnen:

;<?php
;die()
;?>

En dan je bestand bijvoorbeeld config.ini.php noemen. Is uiteraard ook weer moeilijk doen terwijl het ook makkelijk kan.
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?
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.
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.
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.

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.
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.
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".
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.

<!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>


[size=xsmall]Toevoeging op 17/08/2017 00:09:13:[/size]

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.


<!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>



Reageren