Hallo alemaal,

Ik heb op mijn pagina index.php de volgende code staan.

					<?php 
					if (file_exists($filename)) 
						print "Bestand is wel aanwezig!"; 
					else 
						include 'createdb.php';
					?> 


Dat werkt goed bij het opstarten krijg ik het formulier dat ik in creatdb.php geplaatst had.

<p>Vul op deze pagina de gevraagde gegevens in.</p>
<form action="createdb.php" method="post">
	<table>
		<tr class="form1"><td>
		<div class="pf">Database-naam</div></td><td><input type="text" id="Inp_Database" name="Inp_Database" tabindex="1">
		
		<tr class="form1"><td>
		<div class="pf">Gebruiker  </div></td><td><input type="text" id="Inp_User" name="Inp_User" tabindex="2">
		
		<tr class="form1"><td>
		<div class="pf">Wachtwoord </div></td><td><input type="password" id="Inp_Password" name="Inp_Password" tabindex="3">
		
		<tr class="form1"><td>
		<div class="pf">Host-adres </div></td><td><input type="text" id="Inp_Host" name="Inp_Host" tabindex="4">
		
		<tr><td>
		<input type="reset" value="Velden legen" id="Inp_reset" name="Inp_reset" alt="Alle velden legen" tabindex="5">
		</td><td>
		<input type="submit" value="Installeren" id="Inp_nstall" name="Inp_nstall" alt="Installatie starten" tabindex="6">
		<?php
			if($_POST['Inp_nstall'])
			{
			echo "<p>Er is op installeren geklikt!</P>";
			}
		?>
	</table>
</form>


Zodra ik op submit klik, verschijnt de pagina creatdb.php zonder opmaak.
Dit is niet wat ik wil. Ik wil index.php met eventueel een ander formulier. (Dat heb ik alleen nog niet)
Maar na de submit lijkt de pagina index.php er onder uit geschopt te zijn.

Wie heeft hier een oplossing voor me?

Alvast bedankt.
Frits van Leeuwen
Ik koos quote i.p.v. wijzig. Nu toch gelukt. ;-)
De vraag over wijzigen is niet een bewuste variabele, want ik heb het nu zo aangepast dat ik ze niet meer heb. Maar ik kan me voorstellen dat ik het later wel wil. Hoe kan dat dan.

Ik dacht even dat ik er was, maar ik krijg
HTTP 500-fout

index.php ziet er nu zo uit:
<!DOCTYPE html>
<html>
    <head>
		<title>Basisbestand Geldboom</title>
		<link rel="stylesheet" type="text/css" href="css/style.css">    
	</head>
	
	<body>
		<table class="empty">
			<tr>
				<td width="200" class="vak1">
					<img src="images/logo.jpg" width="200"><BR>alpha.5
				</td>
				<td class="programmadeel">
 					<?php  
						header('Location: createdb.php');
						exit;
					?>
				</td>
			</tr>
		</table> 
    </body>
</html>


createdb.php ziet er zo uit:

<!DOCTYPE html>
<html>
    <head>
		<title>Create DB Geldboom</title>
		<link rel="stylesheet" type="text/css" href="css/style.css">    
	</head>
	
	<body>
		<h2>Eerste voorbereiding</h2>
		<p>Vul daarom op deze pagina de gevraagde gegevens in.</p>
		<form action="createdb.php" method="post">
			<table>
				<tr class="form1"><td>
				<div class="pf">Database-naam</div></td><td><input type="text" id="Inp_Database" name="Inp_Database" tabindex="1">
				
				<tr class="form1"><td>
				<div class="pf">Gebruiker  </div></td><td><input type="text" id="Inp_User" name="Inp_User" tabindex="2">
				
				<tr class="form1"><td>
				<div class="pf">Wachtwoord </div></td><td><input type="password" id="Inp_Password" name="Inp_Password" tabindex="3">
				
				<tr class="form1"><td>
				<div class="pf">Host-adres </div></td><td><input type="text" id="Inp_Host" name="Inp_Host" tabindex="4">
				
				<tr><td>
				<input type="reset" value="Velden legen" id="knop_reset" name="knop_reset" alt="Alle velden legen" tabindex="5">
				</td><td>
				<input type="submit" value="Installeren" id="knop_install" name="knop_install" alt="Installatie starten" tabindex="6">
				<?php
					if($_POST['knop_install'])
					{
						$db = $_POST['Inp_Database'];
						$username = $_POST['Inp_User'];
						$password = $_POST['Inp_Password'];
						$hostname = $_POST['Inp_Host'];
						$global_dbh = "mysql_connect(" . $hostname . ", " . $username . ", " . $password . ")"; 	
						echo "<p>mysql_select_db($db, $global_dbh);</p>";
					}
				?>
			</table>
		</form>
    </body>
</html>




Kijk eens in je error_log, zou ik zeggen. Die verklapt vaak waarom er een error 500 optreedt.
Mijn grote vermoeden gaat ervan uit dat je HTML voor je header() uitvoert, en dat mag juist niet.
Die header() je vóór je HTML en e.v.t. zichtbare witruimte uitvoeren.

Verder zie ik in je code een string met mysql_connect, en ik wou je toch graag even attenderen dat deze functies in PHP 7 ter ziele zijn gegaan. De betere vervanger zijn de functies uit de mysqli-driver (mysqli_*) of PDO.
... maar als index.php niets anders doet dan forwarden naar createdb.php, waarom stop je dan de inhoud van createdb.php niet in index.php? :/

Ook is nog steeds niet duidelijk welk mysterieus bestand al dan niet aanwezig moet zijn, of wat hier precies de betekenis van is. Of dat dit uberhaupt een goed idee is.

En tot slot, iets wat al eerder is aangehaald, wordt het nu misschien tijd om eens na te gaan denken over hoe je je pagina's indeelt en opdeelt. In bovenstaand fragment stop je midden in het weergeven van een pagina het verwerken van een formulier.

Zoals al eerder aangegeven, deel dit eens op in stappen. Een verwerkstap van een formulier zou eigenlijk, voor de goede orde, nooit direct output moeten produceren. Het is een verwerkstap. Direct na uitvoer van de stap zou je doorverwezen moeten worden naar een andere pagina. Ofwel een "OK" pagina, ofwel een "not OK" pagina, wat meestal neerkomt op het opnieuw tonen van het formulier met de reeds ingevulde informatie + indicaties hoe deze te verbeteren.

PS ben je hier niet opnieuw het wiel aan het uitvinden? Ik ben er persoonlijk geen fan van, maar ken je tools zoals phpMyAdmin? Die doen de klus van webbased databasebeheer waarschijnlijk beter/uitgebreider dan iets wat je zelf rolt.
Volgens mij is het een controle bij het openen van een webapplicatie om te kijken of deze geïnstalleerd is. Ik vermoed dat er met een speciaal bestand wordt gekeken of de installatie moet worden uitgevoerd. Bijvoorbeeld een config
inc.php.

De queries uitvoeren wil je niet door gebruikers in phpMyAdmin laten doen. ;-)

Ikzelf heb ooit eens een installatiescript gebouwd die *.sql-files uitlas en uitvoerde. Dat scheelt weer een hoop queries in je createdb.php. Onthoud wel dat niet iedereen zomaar rechten heeft om een database aan te maken via SQL. Vaak gaat dat via controlpanels met hogere rechten.
Mja, maar waarom zou je permanent in een applicatie willen controleren of iets geïnitialiseerd is? Zou deze initialisatie niet gewoon eenmalig gedaan moeten worden bij installatie van deze functionaliteit? Waarna je kunt vergeten dat je dit hebt gedaan?

Dit is zoiets als continu controleren of je je veters gestrikt hebt, maar dat zou een vast onderdeel moeten zijn van het aantrekken van je schoenen.

(bespaar me grappen dat veters los kunnen gaan en er ook schoenen met klitteband bestaan enzo lol)

Toegegeven, misschien kan zoiets handig zijn, maar dan toch alleen in een geavanceerd systeem, bijvoorbeeld voor modulebeheer waarbij je code- en database-wijzigingen versioned ofzo. Maar het lijkt mij dat als je zo'n permanente controle achterwege kunt laten als je dit gewoon onderdeel maakt van een vaste installatieroutine dat dat de voorkeur heeft boven deze constructie.
Ik start (wat ik dacht dat normaal is) met index.php
Ik wil dan weten of dat er een database is geïnstalleerd of niet. Als dit niet zo is, wil ik dat eenmalig uitvoeren. Maar ik maak het niet alleen voor me zelf, maar ook voor een nog onbekend aantal andere mensen. Dus die moeten dat ook eenmalig kunnen doen.
Maar is de database eenmaal geïnstalleerd, dan wil ik pas echt van start met het programma waar het mij om gaat. Ook die moet ik dan natuurlijk vanuit index.php aansturen.

Het geen wat hier boven beschreven staat is het geen ik eerst aan de praat wil hebben, Maar tegelijk hoop ik er ook een hoop van te leren. Maar bestanden nesten of juist niet, tsja dat blijven keuzes. Maar ik denk dat mijn eerste opzet niet goed was. Nu ben ik beter op weg, maar omdat ik de code die ik voorgedragen kreeg niet helemaal begrijp, heb ik die over de eerder bedachte code heen gezet in de verwachting dat dat zou werken.

Waar kan ik de error_log vinden Ariën?

Met een voortschrijdend inzicht, bedenk ik nu dat het handiger is om gewoon voor de installatie te staten met een bestand install.php

Dan wil ik natuurlijk wel kijken of dat er een database actief is.
>> Ik wil dan weten of dat er een database is geïnstalleerd of niet. Als dit niet zo is, wil ik dat eenmalig uitvoeren.
Klinkt wel leuk, maar dat is niet praktisch. Want het feit dat de configuratie bestaat zegt niets over de database. En om een hoop overhead te gaan veroorzaken voor iets dat voor zichzelf zou moeten spreken (het aanwezig zijn van de database) is een stap te ver.
Ben, als ik mijn programma ergens wil plaatsen of laten plaatsen, is er geen database aanwezig. Er zal eerst iets gestart moeten worden om die database daar te krijgen. Vandaar dat ik dat eerst wil checken.
Ik wil nu dat er eerst met install.php gestart wordt. Als iemand toch index.php start is er geen database en werkt het niet. Dan wil ik aangeven dat install.php gestart moet worden, of dat er naartoe gesprongen kan worden. Deze combinatie zou helemaal mooi zijn.
Dat lijkt mij onderdeel van een installatie. Voor mensen die wat minder tech savvy zijn is dat allemaal technische mumbo jumbo waar ze niets mee kunnen, te meer als er iets misgaat.
>> Als iemand toch index.php start is er geen database en werkt het niet. Dan wil ik aangeven dat install.php gestart moet worden
1 woord: handleiding.

Het laatste dat je wil is dat je met een race condition komt te zitten als "oh installatie is nog niet voltooid" en een willekeurige bezoeker komt op je pagina. Geef hooguit foutmeldingen, maar start geen configuratieproces zonder dat iemand precies weet hoe en wat.

Reageren