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
Een lege (?) pagina duidt meestal op foutmeldingen.

Zet het volgende eens helemaal bovenaan in je code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

En volg het kruimelpad.

En ja:
als bestand bestaat
> toon boodschap
anders
> toon volledige HTML pagina

Da's in principe niet zo raar dan he :).
Als je naar index.php wil zul je niet naar createdb.php moeten posten.
En dat ja. Op een heel elementair niveau zou je een soort pagina include systeem kunnen maken via een querystring-variabele: index.php?page=createDb. Dit is dan tevens je form-action.

Maar dan zul je ook wat aanvullende dingen moeten programmeren. Het heeft namelijk weinig zin om een hele HTML-pagina uit te draaien wanneer je een formulier aan het verwerken bent.

Ook loont het de moeite om de pagina te scheiden in acties:
?page=createdb (denk hier een default actie bij, zoals het weergeven van het formulier)
?page=createDb&action=processForm (voor het verwerken van het formulier)
?page=createDb&errors=1 (terug bij het formulier indien er foutmeldingen waren)
?page=createDb&action=feedback (nadat een formulier successvol is verwerkt)

Het kan handig zijn om alles in aparte acties te stoppen en dit op een fatsoenlijke manier te compartimenteren anders wordt je code al snel één grote brei (spaghetti-code).

Kijk anders eens naar het POST/redirect/GET principe.
Wow...!!! wat een reacties. En snel!
Bedankt voor zo ver. Vooral die laatste reactie lijkt me een goed keuze. Ik ga ze vanavond op mijn gemak doornemen en uitproberen waar mogelijk.

Ik denk dat jullie me goed geholpen hebben. Ik laat mijn bevindingen vanavond weten als ik bezig geweest ben.

[size=xsmall]Toevoeging op 25/07/2017 20:38:42:[/size]

Het probleem bleek redelijk simpel opgelost te zijn door de volgende mutatie te doen.
In ceatdb.php in de 2 regel staat:

<form action="createdb.php" method="post">

Dit moest zijn:

<form action="index.php" method="post">
Hetgeen je schrijft klopt omdat de landings pagina het index.php bestand is dat op zijn beurt createdb.php gaat "invoegen". Echter is dit wel een lelijke manier om je probleem op te lossen.

Overweeg om

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

te wijzigen in iets als:

<?php
if (file_exists($filename)) {
print "Bestand is wel aanwezig!";
} else {
header('Location: createdb.php');
exit;
}
?>

En dan gewoon een heel nieuw script/pagina maken in createdb.php...
Als ik dat zo vervang start index.php niet meer.
Dus daar moet iets in staan wat niet goed is.
Laat je relevante code eens zien?
Frank doelt erop dat het niet heel handig is om includes op deze manier te misbruiken, en geeft daarom een alternatieve methode.
Bedankt Ben. Toch had ik dat al wel door. Maar ik vrees dat ik dan dat stukje code eerst nog wat meer moet analyseren voor ik het echt goed begrijp. Ik ging er even van uit dat de code zo te vervangen was.

Reageren