Via PHP hulp ben ik nu begonnen met PHP formulieren
en kan leuk het formulier op beeld krijgen maar dan?
Heb gebruikt het uitgewerkte voorbeeld van "Mijn eerste formulier"
en het tweede deel "verwerk2.php"
In dit formulier kan ik opgeven voornaam, achternaam, dag, maand, en jaar
( het formulier ging niet verder als 1950
maar ik heb al aan kunnen passen dat mijn geboortejaar 1946 ook kan.
het tweede deel controleert of alles is ingevuld en klaar voor verzending laat ook zien wat er is ingevuld.
Wat ik mis in het verhaal, hoe krijg ik de gegevens van het ingevulde formulier
verzonden naar het emailadres van mijn website.
Ik heb stap voor stap alles zitten doorlezen maar mis dat stuk?
Wie wil mij verder helpen.
Met vriendelijke groet Johan
Jammer dat ik niet meer kan inloggen of registreren op die site, want dan had ik die schrijver wel even deze tips meegegeven.
Uit de comments aldaar had je in principe al op kunnen maken dat die tutorial (zwaar) verouderd is.
Simpelweg omdat iemand een artikel publiceert op het internet, zelfs als dit op een community-site is, wil dat niet zeggen dat wat er wordt gezegd accuraat, veilig of up-to-date is (of in het ergste geval, uberhaupt klopt).
Probeer daarom altijd te achterhalen hoe actueel een tutorial is (datums ontbreken daar, dat is een gemis, en dat heb ik meerdere keren aangekaart). En kijk ook vooral naar de user comments, vaak staan daar (niet alleen m.b.t. tot sm.be maar in het algemeen) meer kloppende dingen in dan in de tutorial zelf.
En het inloggen en registreren heb ik daar persoonlijk op slot gegooid, omdat die site na een ongevraagde update zo lek was als een mand. Binnen een maand of twee na die update was de site gehacked via een ingenieuze SQL-injectie. Alles wijst erop dat dit een doelbewuste actie was, mogelijk door oud-crewleden die verbolgen waren over het bestuur daaro :p. Er was simpelweg geen redden aan die code dus het enige wat ik in principe kon doen was iedereen geforceerd uitloggen en het registreren en inloggen uitschakelen. Op deze manier is die site in ieder geval nog als archief beschikbaar.
Ondanks inspanningen is een opvolger nooit echt van de grond gekomen.
Met de phpMailer class kan je eenvoudig een (veiligde) connectie met iedere bereikbare mailserver opzetten.
Met de standaard mail-functie van PHP wordt het lastiger. Daarom raad ik phpMailer aan. Waarbij het voordeel ook nog eens is dat je niet met headers hoeft te spelen.
[size=xsmall]Toevoeging op 28/11/2017 17:11:00:[/size]
Natuurlijk ook volgens eerder advies naar phpMailer gekeken, maar daar staat alles in het Engels en dan moet ik helaas afhaken.
[size=xsmall]Toevoeging op 28/11/2017 17:12:18:[/size]
Toch is PHPMailer niet zo moeilijk om te gebruiken. Je moet slechts (uit mijn hoofd) twee libraries invoegen met require_once() en dan kun je de voorbeeld code gebruiken om de PHPMailer class te gebruiken. Het lastigste is het juist configureren van de instellingen. Anyway voor hostnet.nl heb je het niet perse nodig. Het wordt anders als je bijvoorbeeld op je eigen Windows PC wilt testen zoals Thomas al opmerkte. Let er op dat je - ook voor de afzender - BESTAANDE mailadressen gebruikt.
Heb gebruikt het uitgewerkte voorbeeld van "Mijn eerste formulier"
en het tweede deel "verwerk2.php"
In dit formulier kan ik opgeven voornaam, achternaam, dag, maand, en jaar
( het formulier ging niet verder als 1950
maar ik heb al aan kunnen passen dat mijn geboortejaar 1946 ook kan.
het tweede deel controleert of alles is ingevuld en klaar voor verzending laat ook zien wat er is ingevuld.
Iets niet ingevuld geeft een melding TOP
Tot hier loopt het en het ziet er leuk uit.
Nu moet het stukje voor de mailverzending van HOSTNET erbij. Waar moet dat staal in het geheel?
<form action="verwerk2.php" method="post">
<br><br><br><br>
<p>
<label for="voornaam">Voornaam:</label>
<input type="text" name="voornaam" id="voornaam" />
</p>
<br>
<p>
<label for="achternaam">Achternaam:</label>
<input type="text" name="achternaam" id="achternaam" />
</p>
<br>
<p>
<label>Geboortedatum:</label>
<select name="dag">
<?php
for($i = 1; $i <= 31; $i++)
{
echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select>
<select name="maand">
<?php
for($i = 1; $i <= 12; $i++)
{
echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select>
<select name="jaar">
<?php
for($i = date('Y'); $i >= 1922; $i--)
{
echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select>
</p>
<br>
<p>
<input type="submit" value="Verzenden" />
</p>
</form>
<?php
include '../../inc/stats.php';
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierVelden = array(
'voornaam',
'achternaam',
'dag',
'maand',
'jaar'
);
// Waarden uit de $_POST array doorlopen
foreach($aFormulierVelden as $sVeld)
{
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if(empty($sValue))
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Datum controle
if(isset($aData['maand'], $aData['dag'], $aData['jaar'])
&& checkdate($aData['maand'], $aData['dag'], $aData['jaar']))
{
$sDatum = $aData['dag'].'-'.$aData['maand'].'-'.$aData['jaar'];
}
else
{
$aErrors[] = 'Dit is geen geldige datum';
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
// Formulier succes!
echo '<p>Je hebt het formulier succesvol ingevuld!
De volgende gegevens zijn bekend:</p>';
echo '<p>Voornaam: '.$aData['voornaam'].'<br />';
echo 'Achternaam: '.$aData['achternaam'].'</p>';
echo '<p>Geboortedatum: '.$sDatum.'</p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar formulier
header('Refresh: 3; url=formulier2.php');
foreach($aErrors as $sError)
{
echo '<p style="color:red">'.$sError.'</p>';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: formulier2.php');
}
?>
[size=xsmall]Toevoeging op 01/12/2017 20:24:58:[/size]
Hij is al heel mooi zo. Ik geef eerlijk toe ik begrijp het niet allemaal maar zie al wel hoe ik er velden bij kan maken. Maar dat is voor later.
a. eerst moet dat stukje van Hostnet voor de mailverzending op de juiste plaats.
b. als tweede wil ik bij een niet ingevuld veld na de melding hiervan terug naar het gedeeltelijk ingevulde formulier.
Haal regel 58 t/m 62 weg en zet daar in de plaats je code om een mail te versturen gevolgd door een redirect naar een confirmatie pagina. deze confirmatie pagina moet je dan natuurlijk nog even maken :-)
ZET ACHTER EEN REDIRECT OOK ALTIJD exit(); anders loopt je code gewoon door!
[size=xsmall]Toevoeging op 01/12/2017 22:07:56:[/size]
De redirect heeft twee voordelen:
a) De pagina die in de POST methode wordt geladen wordt direct weer verlaten waarmee dubbel indienen wordt beperkt.
b) Je kunt een nieuwe volledige HTML pagina laden met een fraaie melding.
Ik zou de hele afhandeling van de mail verhuizen naar boven je HTML-code.
Want als er HTML voor staat, gaat dit conflicteren met location-headers. En los daarvan hoort daar altijd nog een exit(); achter.
Ook raad ik niet aan om je mailadres hier open en bloot neer te zetten, om spam te voorkomen.
Op lijn 127 zou je geen headers moeten tonen. Het is een beetje vervelend om de gebruiker maar enkele seconden te laten zien wat hij fout doet.