na submit pagina niet goed.
Ik heb op mijn pagina index.php de volgende code staan.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
if (file_exists($filename))
print "Bestand is wel aanwezig!";
else
include 'createdb.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.
Code (php)
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
27
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
27
<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>
<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
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 25/07/2017 00:25:15 door - Ariën -
Zet het volgende eens helemaal bovenaan in je code:
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.
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.
Gewijzigd op 25/07/2017 01:28:41 door Thomas van den Heuvel
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.
Toevoeging op 25/07/2017 20:38:42:
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">
Overweeg om
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
if (file_exists($filename))
print "Bestand is wel aanwezig!";
else
include 'createdb.php';
?>
if (file_exists($filename))
print "Bestand is wel aanwezig!";
else
include 'createdb.php';
?>
te wijzigen in iets als:
Code (php)
En dan gewoon een heel nieuw script/pagina maken in createdb.php...
Dus daar moet iets in staan wat niet goed is.
Laat je relevante code eens zien?
Die staat al in mijn eerste bericht.
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.
De code is ook wel zo te vervangen, je moet dan alleen wel weer alles naar createdb.php laten verwijzen, en deze afzonderlijk een layout geven.
Een script die een installatie uitvoert (dat is waar het om gaat volgens mij?) hoort mij inziens niet op een index.php thuis. Al zou het wel zo kunnen zijn dat deze index.php in een subdirectory staat van de documentroot. Maar dan stel ik me zo voor dat je eerst een introductie geeft en een keuze menu of een knop waarmee de gebruiker verder gaat? (zo niet dan moet alles uit createdb.php gewoon in index.php). stel de gebruiker drukt op een knop "Installeren" dan stuur je die gewoon door naar createdb.php (of geef hem een andere naam). in createdb.php maak je het formulier, controleer je de ingevoerde gegevens op onjuistheden en verwerk je dit formulier indien alles lijkt te kloppen. Nadat alles gedaan is wat gedaan moet worden stuur je de gebruiker wederom door naar een andere pagina. Dat doe je overigens altijd om dubbele POSTs te voorkomen.
Ik heb de volledige code van createdb.php in mijn eerste bericht staan.
Ter informatie: includeren is invoegen in een website. Je laadt de inhoud van het ene bestand in die van de andere. Met een location-header stuur je iemand door naar een andere URL.
Als dat klaar is, dan kan er mee gewerkt worden.
De hele applicatie lijkt me niet zo moeilijk, maar ik moet een begin hebben.
Gewijzigd op 26/07/2017 21:27:01 door - Ariën -
Dus createdb.php moet net als index.php opgebouwd worden? Ik had juist gehoopt dat ik de pagina in een andere pagina kon plaatsen en het daar te kunnen laten wisselen. Maar ik ga nu denken dat dat niet zo slim is.
Toevoeging op 26/07/2017 21:34:46:
Variabele die ik in index.php gebruik, gaan die mee naar creatdb.php?
Je zou natuurlijk de inhoud van al je pagina's met includes in elkaar kunnen zetten, zoals je een header en footer hebt, waarna je die weer in je createdb.php kan invoegen.
En variabelen gaan niet mee bij een redirect. Tenzij je het met GET of SESSIONS doet, maar waar komen die variabelen dan vandaan?
Gewijzigd op 26/07/2017 21:36:10 door - Ariën -
$programmanaam = "programma";
gebruikt. En uiteraard meer van die dingen op deze manier.
Toevoeging op 26/07/2017 21:44:58:
Gewijzigd op 26/07/2017 23:30:28 door Frits van Leeuwen
Waar komt die variabele vandaan? Index.php? Kan je hem niet met GET meegeven in de URL dan? En waarom heb je hem nodig in de createdb.php ?