Formulier verwerken in database PHP

Rubensky

Moderator
Forumleiding
Is er iemand die mij kan helpen met de controle van een formulier en mij vervolgens kan helpen de inhoud van dat formulier op een veilige manier in een database te verwerken? Een mysql database is aanwezig. De kennis om de connectie te maken ook. Ik loop tegen de verwerking van de gegevens aan omdat ik dat proces gewoon niet goed begrijp. Mocht er iemand bereid zijn mij te helpen dan kan ik het formulier plaatsen.
 
Jazeker,

Deel alvast wat je hebt (uiteraard de connectiestring niet of op zijn minst alles dat naar jouw setp verwijst eruit halen toch).


Grtz,

C
 
Ik ben een tijd lang niet meer met het project bezig geweest maar hier komt het dan toch echt omdat ik aan de voorkant al een paar problemen heb. Ik zie even niet meer waar de fout zit.

Er zijn op het formulier een aantal chheckboxes te zien. Wanneer je die aanvinkt zouden er invul velden moeten verschijnen maar om de een of andere reden werkt dat niet meer. 2 wanneer ik de radiobuttons selecteer worden ze allebei aangevinkt dat moet ook al niet.

En bij radiobutton wel sponsoring zou ook een invulveld moeten ontstaan.

Hieronder de code:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="nl" xml:lang="nl">

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>extra-tekstvakje</title>
<script src="bestellingen_opnemen.js"> </script>
<link rel="stylesheet" href="bestellingen_opnemen.css" type="text/css">

</head>

<body>

<form method="post" action="bestelling_verwerken.php">
    <p>

            Bestelling van: <input type="text" name="bestelling_van">  <br /> <br />
            Naam: <input type="text" name="naam">  <br /> <br />
            Adres: <input type="text" name="adres">  <br /> <br />
            Postcode: <input type="text" name="postcode">  <br /> <br />
            Plaats <input type="text" name="plaats">  <br /> <br />
            Telefoonnummer: <input type="text" name="telefoonnummer">  <br /> <br />

            Thuisbezorgen <br /> <br/>
            Ja        <input type="radio" name="thuisbezorgen" value="thuisbezorgen"> <br />
            Nee        <input type="radio" name="thuisbezorgen" value="thuisbezorgen"> <br /> <br />


            <input type="checkbox" name="oliebollen_met" value="oliebollen_met" onclick="toggleExtra();" /> oliebollen met krenten
<span id="oliebollen_met"> &gt; Hoeveel zakken wilt u?<input type="text" name="extra" size="20" maxlength="50" /></span> <br />


    <input type="checkbox" name="oliebollen_zonder" value="oliebollen_zonder" onclick="toggleExtra1();" />Oliebollen zonder krenten
    <span id="oliebollen_zonder"> &gt; Hoeveel zakken wilt u? <input type="text" name="oliebollen_zonder" size="20" maxlength="50" /></span> <br />


    <input type="checkbox" name="appelbeignets" value="appelbeignets" onclick="toggleExtra2();" />appelbeignets
    <span id="appelbeignets"> &gt; Hoeveel appelbeignets wilt u? <input type="text" name="appelbeignets" size="20" maxlength="50" /></span> <br /> <br />


            <input type="radio" name="sponsoring" onclick="closeExtra();" />geen sponsoring<br />
        <input type="radio" name="sponsoring" onclick="openExtra();" />Wel sponsoring
        <span id="sponsoring"> &gt; Voor welk bedrag? <input type="text" name="wel_sponsoring" size="20" maxlength="50" /></span>

            <br /> <br />

            Uw totaalbedrag is:  <br /> <br />

            Bestelling bezorgd door: <input type="text" name"bezorgd_door">  <br /> <br />

            <input type ="submit" value ="verzenden"> <input type ="reset" value = "resetten">

        </p>
</form>
</body>
</html>


Javascript

Code:
function toggleExtra(){
    if( document.getElementById('oliebollen_met').style.display != 'inline-block'){
        document.getElementById('oliebollen_met').style.display = 'inline-block';
        document.getElementById('oliebollen_met').getElementsByTagName('input')[0].focus();
    }
    else {
        document.getElementById('oliebollen_met').style.display = 'none';
        document.getElementById('oliebollen_met').getElementsByTagName('input')[0].value='';
    }
}

function toggleExtra1(){
    if( document.getElementById('oliebollen_zonder').style.display != 'inline-block'){
        document.getElementById('oliebollen_zonder').style.display = 'inline-block';
        document.getElementById('oliebollen_zonder').getElementsByTagName('input')[0].focus();
    }
    else {
        document.getElementById('oliebollen_zonder').style.display = 'none';
        document.getElementById('oliebollen_zonder').getElementsByTagName('input')[0].value='';
    }
}

function toggleExtra2(){
    if( document.getElementById('appelbeignets').style.display != 'inline-block'){
        document.getElementById('appelbeignets').style.display = 'inline-block';
        document.getElementById('appelbeignets').getElementsByTagName('input')[0].focus();
    }
    else {
        document.getElementById('appelbeignets').style.display = 'none';
        document.getElementById('appelbeignets').getElementsByTagName('input')[0].value='';
    }
}

//einde checkboxes //

function openExtra(){
    document.getElementById('sponsoring').style.display = 'inline-block';
    document.getElementById('sponsoring').getElementsByTagName('input')[0].focus();
}
function closeExtra(){
    document.getElementById('sponsoring').style.display = 'none';
    document.getElementById('sponsoring').getElementsByTagName('input')[0].value='';
}
 
Laatst bewerkt:
Uw formulier gaat niet verzonden raken ook .

Maak een php script om te verzenden . bijv. verzend.php

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

Verbeter de bezorgwijze ook eens .

<fieldset>Selecteer bezorgwijze:<br>
<input type="radio" name="bezorgwijze" value="thuisbezorging"> thuisbezorging
<input type="radio" name="bezorgwijze" value="niet thuis"> niet thuis
</fieldset><BR>

En dan als er niet thuis bezorgd moet worden

Bij niet thuisbezorging vermeld bezorgadres:<br>
<TEXTAREA NAME="Opmerkingen" ROWS="4" COLS="40"></TEXTAREA>

<br /> <br /> ??
waarom gebruik je <br /> :
met <br> begin je toch ook een nieuwe regel
 
Invoervelden

<fieldset><b>Persoonlijke gegevens:</b><br>
(*)Naam: <input type="text" name="naam" required>
(*)straat <input type="text" name="straat" required><br>

(*)Email: <input type="email" name="email" placeholder="*@mail.com" required></b><br></fieldset>

(*) hiermee duid je aan dat het veld verplicht moet ingevuld worden . >>>>>> required niet vergeten

Ik geef nu enkel maar naam en straat als voorbeeld , je kan ook postcode , gemeente , tel of gsm nr ook laten invoeren .
 
Swake al wat gij typt begrijp ik. Ik gebruik <br /> want dat is HTML 5. de required optie die jij aangeeft gebruik ik niet vanwege de gemakkelijke manier waarop deze te omzeilen is.

Ik wil eerst even van Christoper leren waarom mijn Javascript niet werkt vervolgens gaan we verder bouwen.
 
Je citeert
2 wanneer ik de radiobuttons selecteer worden ze allebei aangevinkt dat moet ook al niet.

Maar ik lees in je script

Ja <input type="radio" name="thuisbezorgen_ja" value="thuisbezorgen_ja"> <br />
Nee <input type="radio" name="thuisbezorgen_nee" value="thuisbezorgen_nee"> <br /> <br />

bij name moet je zelfde invoeren : "bezorgwijze" en bij value vul je de waarde in . "thuisbezorgen" en "niet thuis bezorgen"

<input type="radio" name="bezorgwijze" value="thuisbezorging"> thuisbezorging
<input type="radio" name="bezorgwijze" value="niet thuis"> niet thuis
En dan kan er maar één keuzerondje gemarkeerd worden .
 
Heb wat zaken aangepast de vraag is uit de lucht voor nu even. Ik kan nu het formulier afmaken denk ik. Christoper mijn Javascript kan denk ik een stuk beter maar hoe?
 
Nu kom ik op het punt waar de vraag eigenlijk om begonnen is. Namelijk het verwerken in de database van mijn formulier. Hieronder zal ik de velden beschrijven en hoe ik dat dan voor mij zie:

bestelling_van: niet verplicht
naam: wel verplicht
adres: wel verplicht
postcode: niet verplicht tenzij thuisbezorgen is ja
plaats: wel verplicht
telefoonnummer:
wel verplicht
thuisbezorgen: niet verplicht maar dan moet ophalen worden ingevuld. Opslaan in de database als 1
ophalen: Als thuisbezorgen is ingevuld deze leeg laten anders in database invullen met getal 1
oliebollen_met: Niet verplicht
oliebollen_zonder: Niet verplicht
appelbeignets:
Niet verplicht wel controleren of 1 van de 3 verleden is ingevuld. (die velden zijn oliebollen_met oliebollen_zonder
appelbeignets)
sponsoring: niet verplicht.
totaalbedrag: = oliebollen_met oliebollen_zonder en appelbeignets het aantal wat daar is ingevuld maal 8 inclusief als het is ingevuld het sponsorgeld.
bezorgd_door: Niet verplicht

Begrijp dat het veel is maar heb toch dat hoop dat iemand mij wil helpen. Ik zal de structuur van mijn database hieronder plaatsen:

Code:
CREATE TABLE IF NOT EXISTS `bestellingen` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bestelling_van` varchar(20) NOT NULL,
  `naam` varchar(20) NOT NULL,
  `adres` varchar(50) NOT NULL,
  `postcode` varchar(7) NOT NULL,
  `plaats` varchar(50) NOT NULL,
  `telefoonnummer` decimal(10,0) NOT NULL,
  `thuisbezorgen` decimal(2,0) NOT NULL,
  `ophalen` decimal(2,0) NOT NULL,
  `oliebollen_met` decimal(3,0) NOT NULL,
  `oliebollen_zonder` decimal(3,0) NOT NULL,
  `appelbeignets` decimal(3,0) NOT NULL,
  `sponsoring` decimal(6,0) NOT NULL,
  `totaalbedrag` decimal(9,0) NOT NULL,
  `bezorgd_door` varchar(20) NOT NULL,
  `tijd_bestelling` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

Als laatste weet ik ook nog niet hoe je een functie moet maken met JS die het totaalbedrag berekend.
 
Laatst bewerkt:
Hi Rubensky,

Lang geleden heb jij dit gepost. Misschien is dit projectje niet meer gaande, maar desondanks kan je nog steeds leren van een antwoord denk ik. Hierbij dus enkele opmerkingen:

  1. Je gebruikt heel veel <br />, ongeacht of je het als <br> or als <br /> schrijft, het is allebei semantisch fout wanneer je dit niet gebruikt om tekst af te breken naar een volgende zin, maar voor andere doeleinden zoals opmaak.
    • Oplossing: zet al je elementen in de correcte tags: tekst steek je in een paragraaf en als je hem daarbinnen al wilt afbreken steek je er een <br /> in. Wil je meer plaats tussen paragrafen, dan los je dat op met CSS.
  2. Om je formuliervelden van tekst te voorzien bestaat er het element <label>
    • HTML:
      <label for="elementID">Mijn Label</label>
      <input type="text" id="elementID" placeholder="Uitleg.." />
      ...
    • Dit geeft bij Radiobuttons het voordeel dat de tekst naast de radiobutton ook aanklikbaar wordt.
    • Je mag zelf kiezen of je de input in de label tags steekt of erbuiten houd en gebruik maakt van het for attribuut.
  3. Je begint je formulier met een <p>, maar wat er op volgt is geen paragraaf, maar een blok... Een paragraaf dient daar niet voor, dus wederom is dit semantisch fout. Gebruik een div in de plaats.
  4. Je hebt op het einde van je formulier een foutje in de HTML zitten, name"bezorgd_door", maar dit moet zijn name="bezorgd_door", je vergeet het gelijkheidsteken.
  5. Wat betreft de required, je argument is juist dat deze makkelijk te omzeilen is, maar dat geld voor alles in HTML en Javascript. Je kan dit formulier makkelijk manipuleren om andere waardes te verzenden en daarmee jou script in gevaar brengen. Het doel van de required is om op een simpele en lightweight manier reeds te voorzien in een controle alvorens je back-end (PHP) door al die moeite moet gaan om tot hetzelfde resultaat te komen. Vergeet hierbij niet dat PHP op een server draait waar jij voor de rekenkracht betaald, maar de javascript bij de gebruiker... Hij belast er enkel zijn eigen computer mee door een simpele fout te maken...
    1. required="required" of enkel required is beiden correct binnen je inpout element.

Verder kan ik je niet echt helpen, ik zie hier niet echt PHP staan en kan je dus niet helpen met nakijken wat daar mee scheelt :)


Indien iemand het niet eens is met bovenstaande, dan wil ik hier gerust nog over discussieren ;)

Groetjes C
 
Terug
Bovenaan Onderaan