datumkolom toevoegen aan formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tony Tony

Tony Tony

18/02/2015 00:12:25
Quote Anchor link
Beste,
ik ben net gestart met het maken van website's, beetje html,css en nu php.
ik heb een database aangemaakt, en een formulier op mijn website, in een kolom moet je een datum invullen, niet de huidige datum, maar een datum van je sessie. ik had dit graag zo ontworpen dat wanneer je de datum wenst in te vullen op het formulier dat er dan een kalender verschijnt waarin je de juiste dag aanklikt met de muis. bestaat dit in php?
alvast bedankt.
 
PHP hulp

PHP hulp

28/11/2024 16:18:39
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/02/2015 01:29:11
Quote Anchor link
Hallo Tony,

Alhoewel je zeker een kalender zou kunnen maken in PHP is dit niet geschikt voor hetgeen dat jij wilt. Naast PHP dat op de webserver draait is er javascript dat in de browser van de gebruiker draait. En aangezien je formulieren invult in een browser en niet op een server is het makkelijker om dit met javascript te doen. No worries er zijn kant en klare datepickers te vinden.

bijvoorbeeld de wereldberoemde JQuery Datepicker
 
Tony Tony

Tony Tony

18/02/2015 08:22:34
Quote Anchor link
Bedankt Frank, dit is wat ik wou.
Ik volg avondschool en aan java zijn we nog niet toegekomen. Denk zelfs niet dat dit bij onze module zit.
Ik heb nog een vraagje, ik weet niet of ik het hier kan plaatsen of ik een nieuw toppic moet openen.
Ik heb de opdracht om een website te maken met een geïntegreerde database. Mijn zoon vist graag, dus heb ik een database gemaakt met vissessie's , we vullen de datum in en de uren wanneer er iets gevangen word.Maar met dat uur gaat het mis. Ik werk met usbwebserver om mijn phpfile's te runnen.
Ik heb met usbwebserver een database aangemaakt,daar kan ik een record invullen, en voor de tijd de waarde hh:mm:ss gebruiken. In mijn php formulier bestand heb ik het type time hiervoor gebruikt.
In mijn php bestand die de record toevoegd aan de database gaat het mis denk ik ,daar heb ik iets geplakt uit een file uit de klas en aangepast naar mijn file, ik post het stukje even hieronder:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
// variabelen initialiseren:


$servername="localhost";
$username="root";
$dbname="visvangst";
$password="usbw";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}



if (empty($_POST)){
    // eerst controleren of pagina wel is aangeroepen vanuit formulier
    echo("Vul eerst <a href=\"vis_sessie_toevoegen.php\">gegevens
        voor de vis sessie</a> in"
);
        exit();
}
else{
    // OK, Query opbouwen met variabelen in $_POST
    // in het 'echt' eerst valideren of het formulier wel
    // geldige waarden bevat.

    $query="INSERT INTO vangst (datum, begin uur, eind uur, tijdstip vangst, water, stek, vangst, soort, gewicht, aas) ";
    $query .= "VALUES ('"; // let op positie van de enkele aanhalingstekens
    $query .= $_POST["datum"] ."', '" ;
    $query .= $_POST["begin uur"] ."', '" ;
    $query .= $_POST["eind uur"] ."', '" ;
    $query .= $_POST["tijdstip vangst"] ."', '" ;
    $query .= $_POST["water"] ."', '" ;
    $query .= $_POST["stek"] ."', '" ;
    $query .= $_POST["vangst"] ."', '" ;
    $query .= $_POST["soort"] ."', '" ;
    $query .= $_POST["gewicht"] ."', '" ;
    $query .= $_POST["aas"] ."');" ;

Alvast bedankt om eens te zien.

[
size=xsmall][i]Toevoeging op 18/02/2015 08:25:53:[/i][/size]

Even vermelden, bij het uur krijg ik deze fout :"Notice: Undefined index: begin uur in "
 
- Ariën  -
Beheerder

- Ariën -

18/02/2015 09:00:25
Quote Anchor link
Tony Tony op 18/02/2015 08:22:34:
Bedankt Frank, dit is wat ik wou.
Ik volg avondschool en aan java zijn we nog niet toegekomen.

Gelukkig hebben we het over Javascript en niet over JAVA, wat beiden totaal verschillend is. Verder is de datepicker ook niet zo lastig in te bouwen.

Over je melding: Gebruik geen spaties in name-attributen van formuliervelden. Verder zou je voor de beginduur, eindduur en vangsttijdstip ook een DATETIME veld kunnen gebruiken.
Gewijzigd op 18/02/2015 09:05:05 door - Ariën -
 
Tony Tony

Tony Tony

18/02/2015 09:14:45
Quote Anchor link
Bedankt Aar, dit heb ik gedaan in de file die mijn formulier vorm. ik post dit stuk even hieronder.
<form align="left" method="post" action="vis_sessie_toevoegen_sql.php">
<table >
<tr>
<th>Datum</th> <th> <input type="Date" name="datum" size="10"><br></th>
</tr>
<tr>
<th>Begin uur</th> <th><input type="Time" name="begin uur" size="10"><br></th>
</tr>
<tr>
<th>Eind uur</th> <th><input type="Time" name="eind uur" size="10"><br></th>
</tr>
<tr>
<th>Tijdstip vangst</th> <th><input type="Time" name="tijdstip vangst" size="10"><br></th>
</tr>
<tr>
<th>Water</th> <th><input type="Text" name="water" size="30"><br></th>
</tr>
<tr>
<th>Stek</th> <th><input type="Text" name="stek" size="30"><br></th>
</tr>
<tr>
<th>Vangst</th> <th><input type="Text" name="vangst" size="5"><br></th>
</tr>
<tr>
<th>Soort</th> <th><input type="Text" name="soort" size="20"><br></th>
</tr>
<tr>
<th>Gewicht</th> <th><input type="Text" name="gewicht" size="5"><br></th>
</tr>
<tr>
<th>Aas</th> <th><input type="Text" name="aas" size="20"><br></th>
</tr>
</table>

Toevoeging op 18/02/2015 09:17:22:



Dit is de module die ik nu volg
http://www.leerstad.be/index.php/cursusaanbod/graduaatsopleidingen/357-graduaat-informatica-a4-multimedia-60-lt

Toevoeging op 18/02/2015 09:18:32:

Maar javascript moet nog aan de beurt komen.
 
- Ariën  -
Beheerder

- Ariën -

18/02/2015 09:21:35
Quote Anchor link
Gebruik geen spaties, maar underscores:
tijdstip_vangst
 
Thomas van den Heuvel

Thomas van den Heuvel

18/02/2015 14:28:01
Quote Anchor link
Bij de naamgeving van kolommen is het inderdaad makkelijker om Aar zijn aanpak te hanteren: gebruik liggende streepjes (undescores).

Als je op dit moment je tabeldefinitie niet kunt/wilt aanpassen kun je, als je de kolommen (met spaties) aanspreekt, ook gebruik maken van `back quotes`. Dit zou ook moeten werken.

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO vangst (datum, begin uur, `eind uur`, `tijdstip vangst`, ... etc
 
- Ariën  -
Beheerder

- Ariën -

18/02/2015 15:07:33
Quote Anchor link
Persoonlijk raad ik back-quotes juist af, omdat het niet geldig SQL is. Het enige voordeel is dat je met backquotes gebruik kunt maken van gereserveerde namen voor tabellen en velden, maar zulke dingen vermijd ik liever.
 
CNEPHP -

CNEPHP -

18/02/2015 15:36:27
Quote Anchor link
Het is ook mogelijk om gebruik te maken van HTML5, in dit geval maak je dan geen gebruik van een textbox maar een datebox.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="date">
(dan moet je zelf natuurlijk nog wel je gewenste name aan toevoegen.


Aangezien je vrij nieuw bent op het gebied van programmeren zal dit waarschijnlijk makkelijker zijn. Hopelijk heb je er iets aan.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/02/2015 18:03:24
Quote Anchor link
@Tony: De oplossing van C NVT is inderdaad een simpele oplossing om zonder javascript.
Deze oplossing is wel browser-afhankelijk. De meeste browsers ondersteunen de type=date tag inmiddels wel maar iedere browser maakt zelf zijn eigen "datepicker" en dus kunnen ze onderling verschillen. In oude browsers werkt dit tevens helemaal niet.

Een andere mogelijkheid is nog om drie <select>'s (dropdowns) achter elkaar te plaatsen. één voor de dag van de maand, één voor de maand en één voor het jaartal. In php kun je dit weer redelijk eenvoudig 'samensmelten' tot een gewone datumtekst.

Alleen met PHP gaat het niet lukken omdat je enkel één maand tegelijk wilt tonen in een datepicker. Wil de gebruiker dan door naar een volgende maand of jaar dan moet de inhoud van de datepicker dynamisch veranderen. De Inhoud kan dan telkens nog wel door PHP verzorgt worden maar je hebt er ook javascript met AJAX bij nodig om die inhoud dan op te halen zonder dat direct heel de pagina ververst wordt. Voor nu denk ik een (te) grote opgave voor jou.
 
- Ariën  -
Beheerder

- Ariën -

18/02/2015 18:05:38
Quote Anchor link
Frank Nietbelangrijk op 18/02/2015 18:03:24:
Een andere mogelijkheid is nog om drie <select>'s (dropdowns) achter elkaar te plaatsen. één voor de dag van de maand, één voor de maand en één voor het jaartal. In php kun je dit weer redelijk eenvoudig 'samensmelten' tot een gewone datumtekst.

Maar dat verhindert niet dat iemand '31 februari' kan invullen.
 
Tony Tony

Tony Tony

18/02/2015 20:27:56
Quote Anchor link
Eerst en vooral bedankt aan iedereen voor de moeite om hier een reactie achter te laten.
-Voor mijn datum heb ik in mijn php verwerk bestand het type voor de datum verandert naar date, waardoor ik nu in mijn webpage met mijn formulier automatisch een kalender krijg aangeboden om de datum aan te klikken. (vergelijkbaar met de vermelde JQuery Datepicker door Frank Nietbelangrijk.
-Om het gebruik van de kollomen in te vullen met uren heb ik geluisterd naar het advies van Aar.Ik heb de spaties vervangen door underscores, en ik kan nu een uur invullen met hh:mm, er word na het ingeven vanzelf 00 voor de seconden toegevoegd. Ik krijg hier geen foutmeldingen meer. Maar als ik op de knop toevoegen klik, krijg ik de melding dat het record werd toegevoegd aan de database, maar als ik dan de database opvraag is de record er niet bijgekomen. Ik vermoed dat ik hier of daar een spatie ben vergeten veranderen door een underscore. Als test heb ik alles wat betrekking had met de uren als commentaar "uitgeschakeld" en dan werkt het correct.Dus ik neem straks even de tijd om alles te controlleren, en dan horen jullie het wel.
Als ik het goed snap moet ik de namen in mijn database ook veranderen in namen zonder spatie.
 
Tony Tony

Tony Tony

21/02/2015 19:48:04
Quote Anchor link
Dit werkt nu perfect.
Als ik mijn database weergeef op mijn website heb ik de mogelijkheid om een record te verwijderen of om een record te bewerken.
het verwijderen lukt perfect, het bewerken lukt niet. het is een php file die hiervoor zou moeten zorgen, als je op de bewerken button klik krijg je een nieuw scherm waar het record met de huidige data in verschijnt, hier krijg je de mogelijkheid om de data te bewerken, daarna klik je op bijwerken of terug. klik je op bijwerken dan worden de nieuwe gegevens getoond, en zou er normaal een anker moeten verschijnen "echo ("<a href=\"vis_sessie.php\">Terug naar het overzicht</a>");" die het bestand vis_sessie zou moeten aanroepen, maar die is er niet.
De bijgewerkte data word ook niet naar de database weggeschreven.
Ziet iemand hier een fout in?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
// verbinding met database invoegen
include("inc_connect_mysql.php");

// controleren of pagina zichzelf heeft aangeroepen
// via hidden-field uit het formulier

if (isset($_POST["bevestiging"])){
    // query samenstellen
    $query="UPDATE vangst SET
        datum = '"
. $_POST["datum"] ."',
        begin_uur= '"
. $_POST["begin_uur"] . "',
        eind_uur= '"
. $_POST["eind_uur"] . "',
        tijdstip_angst = '"
. $_POST["tijdstip_vangst"] ."',
        water = '"
. $_POST["water"] . "'
        stek= '"
. $_POST["stek"] . "',
        vangst= '"
. $_POST["vangst"] . "',
        soort= '"
. $_POST["soort"] . "',
        gewicht= '"
. $_POST["gewicht"] . "',
        aas= '"
. $_POST["aas"] . "',
        WHERE id="
.$_POST["id"];
    $result = mysqli_query($conn,$query);
    echo("De volgende opdracht is uitgevoerd: <b>$query</b><br>\n");
    if ($result){
        echo ("Record nummer " .$_POST["id"] . " is bijgewerkt<br>\n");
        echo ("<a href=\"vis_sessie.php\">Terug naar het overzicht</a>");
    }
}
else{
    // pagina heeft zichzelf nog niet aangeroepen,
    // formulier tonen om gegevens te bewerken

        $query="SELECT * FROM vangst WHERE id=" . $_GET["id"];
        $result = mysqli_query($conn,$query);
?>

<html>
<head>
    <title>Bewerken: wijzig de gegevens</title>
</head>
<body>
<h2>Wijzig deze gegevens:</h2>
<?php
// gegevens ophalen en toekennen aan tijdelijke variabelen
while ($rij = mysqli_fetch_array($result)){
    $da = $rij['datum'];
    $bu = $rij['begin_uur'];
    $eu = $rij['eind_uur'];
    $tv = $rij['tijdstip_vangst'] ;
    $wa = $rij['water'] ;
    $st = $rij['stek'] ;
    $va = $rij['vangst'] ;
    $so = $rij['soort'] ;
    $ge = $rij['gewicht'] ;
    $aa = $rij['aas'] ;
}
?>

<form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
    <input type="hidden" name="bevestiging" value="1">
    <input type="hidden" name="id" value="<?php echo($_GET["id"]);?>">

  
Datum<input type="Date" name="datum" value="<?php echo($da);?>" size="10"><br>
Begin uur<input type="Time" name="begin_uur" value="<?php echo($bu);?>" size="10"><br>
Eind uur<input type="Time" name="eind_uur" value="<?php echo($eu);?>" size="10"><br>
Tijdstip vangst<input type="Time" name="tijdstip_vangst" value="<?php echo($tv);?>" size="10"><br>
Water<input type="Text" name="water" value="<?php echo($wa);?>" size="30"><br>
Stek<input type="Text" name="stek" value="<?php echo($st);?>" size="30"><br>
Vangst<input type="Text" name="vangst" value="<?php echo($va);?>" size="5"><br>
Soort<input type="Text" name="soort" value="<?php echo($so);?>" size="20"><br>
Gewicht<input type="Text" name="gewicht" value="<?php echo($ge);?>" size="5"><br>
Aas<input type="Text" name="aas" value="<?php echo($aa);?>" size="20"><br>

<hr>

<input type="Submit" value="Bijwerken">
<input type="Button" value="Terug" onclick="javascript:history.back();">
</form>
<?php
// else-blok correct afsluiten
}
?>

</body>
</html>
Gewijzigd op 21/02/2015 21:24:43 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

21/02/2015 21:26:17
Quote Anchor link
Ik mis goede foutafhandeling op je query:
http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/

Verder is je query lek en is hacking d.m.v. SQL-injection goed mogelijk. Gebruik daarom mysqli_real_escape_string()
 
Tony Tony

Tony Tony

23/02/2015 21:35:11
Quote Anchor link
Bedankt Aar, ga het binnenkort proberen aanpassen.
Ik zou graag het invulformulier veranderen zodat de informatie correcter word.
Nu zit al mijn data in 1 tabel, 1 record staat voor 1 vis sessie. In een vis sessie kan je meerdere vissen vangen, nu kan ik maar 1 vangst meegeven. Ik zou het graag verandert zien, als ik meegeef dat de vangst 3 is, dat ik dan 3 keer de mogelijkheid heb om de info van de vis mee te geven. als er niks gevangen is, dan hoef ik ook het vakje van soort vangst en het gewicht van de vangst niet te krijgen.
Mijn denkpiste :
mijn data verdelen over 2 tabellen , in de eerste tabel stop ik het id_vangst(Primaire sleutel), datum, begin_tijd, eind_tijd, water, stek, vangst.
in mijn 2de tabel stop ik id_vangst(verwijzende sleutel), id_vis, soort, gewicht, aas

Als ik een nieuw record toevoeg, en ik geef mee dat de vangst 0 is, dan word er enkel data in de eerste kollom weggeschreven, en ook enkel het aas in de tweede kolom.

Als ik een nieuw record toevoeg, en ik geef mee dat de vangst 3 is, dan moet ik 1 record wegschrijven in mijn eerste tabel, en drie records in de tweede tabel, met verwijzing naar de record in tabel 1(id_vangst).
dit zou ik doen met een lus tot dat vangst = 0 . Maar dan komt er al een probleem, als hier vangst gelijk is aan 0, moet hij de records opslaan en sluiten. Maar als de totale vangst 0 is, wil ik meegeven met welk aas ik die sessie gevist heb.
Vooraleer ik probeer te vertalen in php, is mijn denkwijze hier correct, kan het niet makkelijker, wat doe ik met mijn vangst=0 ?
Alvast bedankt
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/02/2015 22:50:58
Quote Anchor link
Je bent aardig op weg Tony.

Dit zouden je tabellen kunnen worden:

vis_sessies
-id
-datum (DATE)
-start (TIME)
-stop (TIME)
-stek
-aas
-...

vangsten
-id
-sessie_id
-when (een DATETIME met daarin dus de datum én de tijd van de vangst)
-soort
-gewicht

Ik zou de aas bij sessies laten. Mocht je nu een middagje gaan vissen en halverwege denken van ik wissel van aas dan kun je er eventueel twee sessies van maken. bijv 1 van 13:00 - 14:00 en 1 van 14:00 - 15:00
Je kunt dan in die twee sessies een ander aas invullen.


Ook kun je het nog iets gekker maken en een tabel vissers er in opnemen:

vissers
-id
-naam
-leeftijd
-...

Omdat je wilt dat er meerdere vissers aan een sessie mee kunnen doen maar ook dat iedere visser aan meerdere sessies mee kan doen heb je een koppeltabel nodig:

vissers_sessies
-visser_id
-sessie_id

Als je dan met zijn tweeën gaat vissen dan komen er twee records bij in de koppeltabel.

Stel Visser Tony heeft id 3 en visser Frank heeft id 4. Het is de 8e vissessie in de database. Je krijgt dan dit in de koppeltabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
vissers_sessies
---------------------
visser_id | sessie_id
---------------------
    3     |    8
    4     |    8
 
Tony Tony

Tony Tony

24/02/2015 23:09:00
Quote Anchor link
vandaag was het les, en de fouten zijn gevonden, in regel 13 maakte ik een tik fout :tijdstip_angst ipv tijdstip_vangst, in regel 14 een komma vergeten op het einde en in regel 19 een komma teveel op het einde.

@ Frank, geen slecht gedacht. Ik kan de database achter een login plaatsen, dan heb ik gelijk de naam van de login gegevens.

Bedankt voor de moeite iedereen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.