gegevens uit formulier opslaan in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Pascal Wetzels

Pascal Wetzels

21/03/2013 16:54:45
Quote Anchor link
ik will gegevens uit mijn formulier opslaan in een database,
dat lukt allemaal aardig, alleen als ik in een veld niets invul, wordt er een 0 in mijn database gezet,in plaats van de standaard NULL.
moet ik ergens bij het input value="" een bepaalde waarde zetten in mijn formulier?
 
PHP hulp

PHP hulp

16/11/2024 05:08:09
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/03/2013 19:04:03
Quote Anchor link
Pascal, je kunt een standaardwaarde invullen bij de structuur van de tabel in myphpadmin
 
Pascal Wetzels

Pascal Wetzels

21/03/2013 19:28:40
Quote Anchor link
Dat klopt, die staat op NULL.
Maar als ik nu een veld leeg laat bij het formulier, van zet ie in de tabel het cijfer 0 en laat deze niet op NULL staan
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 09:50:27
Quote Anchor link
Als ik handmatig de value in mijn query op NULL zet schrijft ie het wel goed weg, als ik de $_POST controleer of die leeg is en dan op NULL zet werkt dat niet,
de query ziet er dan anders uit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SQL = "INSERT INTO status (idusers, idhond, aandacht, teamwork)VALUES ('".$_POST['idusers']."', '".$_POST['idhond']."','".$_POST['aandacht']."', NULL)";

als ik bovenstaande gebruik werkt het wel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SQL = "INSERT INTO status (idusers, idhond, aandacht, teamwork)VALUES ('".$_POST['idusers']."', '".$_POST['idhond']."','".$_POST['aandacht']."', '".$_POST['teamwork']."');

bovenstaande niet, als ik $_POST['teamwork'] op NULL zet wordt de waarde in de query '"NULL"' en niet NULL

iemand een idee?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/03/2013 10:34:30
Quote Anchor link
een NULL is heel iets anders als een "NULL". De tweede is een string of een lap tekst. Je moet php scheiden van sql. Echo je query eens. Dat is dan sql waarin je de values niet tussen qoutes hoeft te plaatsen tenzij het een string is
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 10:45:17
Quote Anchor link
ik heb de query eens ge-echoed
dan krijg ik het volgende:
INSERT INTO status (datum, idusers, idhond, aandacht, spelen) VALUES (STR_TO_DATE('23-03-2013', '%d-%m-%Y'), '1', '1', '34', '')

als waarde voor aandacht heb ik 34 op gegeven en voor spelen heb ik niets ingevuld in het formulier.
sql ziet '' als 0, maar om een lege waarde te krijgen moet ik daar NULL op de plaats van '' krijgen.

de query moet dan worden:
INSERT INTO status (datum, idusers, idhond, aandacht, spelen) VALUES (STR_TO_DATE('23-03-2013', '%d-%m-%Y'), '1', '1', '34', NULL)
 
Erwin H

Erwin H

23/03/2013 11:16:14
Quote Anchor link
Even terug naar de basis, want volgens mij probeer je een probleem op te lossen dat je helemaal niet hoeft op te lossen.

Het gebruik van NULL in een (relationele) database is in principe iets dat je zou moeten vermijden. Ik zal er geen hele bespiegeling over schrijven (maar er zijn boeken vol over geschreven), dus voor nu zal ik het houden bij het advies om niet NULL te gebruiken, maar een standaard 'lege' waarde, bijvoorbeeld 0.

Dan over je tabel, wat voor type is het veld 'spelen' (INT als ik zou moeten gokken?) en wat is de data die erin staat? Wat houdt het bij, wat zou 0 in dat veld betekenen en waarom is het hebben van 0 daar blijkbaar een probleem voor je?
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 11:38:26
Quote Anchor link
het type veld is inderdaad INT, in de tabel wordt de status van de oefeningen bijgehouden, in mijn voorbeeldje heb ik er maar een paar genomen omdat ik anders teveel velden moet opschrijven.
per oefening worden punten toegekend, dit kan 0 zijn als de oefening helemaal fout gaat, maar het kan ook zijn dat een oefening niet gedaan is, dan moet er namelijk geen punt worden toegekend aan die oefening ( vandaar de waarde NULL)
als ik dan de statistieken ga bekijken krijg ik een mooie tabel en kan zo zien welke punten per oefening zijn gegeven en welke oefeningen er nog niet zijn gedaan
 
Erwin H

Erwin H

23/03/2013 11:44:17
Quote Anchor link
Begrijp ik dan nu goed dat je per oefening een kolom hebt in je tabel? Dan lijkt het er meer op dat je je database niet goed hebt opgebouwd. Volgens mij kan je beter kijken naar normalisering dan naar het oplossen van dit probleem. Je zou namelijk niet per oefening een kolom moeten hebben, maar een record in een andere tabel. Zo weet je dat een oefening gedaan is doordat er een record voor die oefening (en gebruiker) is. Is er geen record, dan is de oefening niet gedaan. Heb je ook geen probleem meer met die NULL waarde.
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 11:53:04
Quote Anchor link
ik heb inderdaad per oefening een aparte kolom.
mijn database bestaat uit 4 tabellen: users, geleiders, honden en status, de tabel users is voor de inlog gegevens, de geleiders voor de naam, honden voor naam van de honden en de daaraan gekoppelde geleider

als die persoon inlogt worden de gegevens opgehaald die bij het inlog id horen, dan kan die (mogelijk) kiezen uit de namen van zijn/haar honden en haalt dan de gegevens op uit de tabel status, behorende bij het userid en hondid

zo heb ik de tabel opgebouwd? maar begrijpt dat dit niet juist is.
kun je me dan uitleggen hoe de opbouw dan wel moet zijn, want ik zie even niet hoe ik dat moet gaan doen
 
Erwin H

Erwin H

23/03/2013 12:07:22
Quote Anchor link
Het gaat voornamelijk over die oefeningen. Ik neem aan dat elke hond dus bepaalde oefeningen kan doen en dat die daar punten voor krijgt. Als je goed normaliseert betekent dat een one-to-many relatie: 1 hond, meerdere oefeningen. Je hebt dus een extra tabel nodig die de scores bijhoudt van de oefeningen (en mogelijk ook nog een tabel met de oefeningen zelf). Elk record in die scores tabel krijgt dan het id van de hond, het id van de oefening, de score, datum en wat je mogelijk nog meer moet bijhouden.
Elke keer dat de hond dan een oefening heeft gedaan maak je een record in die scores tabel aan met de genoemde gegevens. Zo weet je precies welke oefeningen zijn gedaan en welke nog niet. Ook hoef je je geen zorgen meer te maken over null waardes, want elk veld in die scores tabel is gedefinieerd op het moment dat je een nieuw record aanmaakt.
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 12:14:12
Quote Anchor link
dus als ik het goed begrijp ziet de tabel scrores er zo uit

idscore, idhond, idoefening, score

en de tabel oefening : idoefening, oefening

en dan met foreign keys en inner join de id's koppelen
 
Erwin H

Erwin H

23/03/2013 12:21:34
Quote Anchor link
Bijvoorbeeld inderdaad.
Wat je dan kan doen als je een overzicht wilt hebben van alle oefeningen voor een hond, is alle oefeningen selecteren vanuit de oefeningen tabel en daaraan de scores joinen voor de hond die je wilt zien. Als je dan een LEFT JOIN gebruikt krijg je NULL waardes voor alle scores waarvoor nog geen record bestaat in de scores tabel voor die hond en zo weet je dus direct welke oefeningen nog niet zijn gedaan.
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 12:28:41
Quote Anchor link
ik ga wel eens even puzzelen, heb het even op papier uitgewerkt en begin er even in een nieuwe database mee, zodat ik niet hoef te rommelen in de bestaande.
eens kijken hoe ver ik ga komen
bedankt voor alle hulp alvast
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/03/2013 13:02:50
Quote Anchor link
Als je dan toch aan de gang gaat zet je database indeling eens hier. ik bedoel welke tabellen heb je en welke kolommen + type heb je in die tabellen gebruikt. Ik vraag me tevens af wat is het verschil tussen een geleider en een user? Heeft het zin om daar twee aparte tabellen voor aan te maken? als de website gebruikt wordt door mensen die lid zijn van de vereniging maar geen hond hebben misschien wel maar anders niet.
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 13:20:06
Quote Anchor link
ik zou inderdaad de geleidernaam bij de users kunnen zetten.
dan krijg ik de volgende opzet
tabel users: iduser(INT 4, primary, AI), username(VARCHAR 16, unique), password(VARCHAR 40),naam_geleider(VARCHAR 50)

tabel honden: idhond(INT 4, primary, AI), iduser(INT 4, INDEX), naam_hond(VARCHAR 50), naam_geleider(VARCHAR 50, INDEX)

tabel oefening: idoefening(INT 4, primary, AI), oefening (VARCHAR 50)

tabel scores: idscore(INT 255, primary, AI), idhond(INT 4, INDEX), idoefening(INT4, INDEX), score(INT 3)

dit zouden dan mijn tabellen zijn
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/03/2013 13:22:28
Quote Anchor link
tabel users:
iduser(INT 4, primary, AI),
username(VARCHAR 16, unique),
password(VARCHAR 40),
naam_geleider(VARCHAR 50)

tabel honden:
idhond(INT 4, primary, AI),
iduser(INT 4, INDEX),
naam_hond(VARCHAR 50),
naam_geleider(VARCHAR 50, INDEX)

tabel oefening:
idoefening(INT 4, primary, AI),
oefening (VARCHAR 50)

tabel scores:
idscore(INT 255, primary, AI),
idhond(INT 4, INDEX),
idoefening(INT4, INDEX), score(INT 3)


Toevoeging op 23/03/2013 13:26:57:

bij honden moet de naam_geleider er uit. die vind je gewoon aan de hand van het iduser. en bij users zou ik naam_geleider gewoon naam noemen. Wil je geen telefoon nummer of adres kolom toevoegen bij users?
Gewijzigd op 23/03/2013 13:29:14 door Frank Nietbelangrijk
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 13:40:02
Quote Anchor link
er hoeft geen telefoonnummer of adres bij de users
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/03/2013 13:42:58
Quote Anchor link
Okee, dit lijkt me heel aardig:
Afbeelding

Toevoeging op 23/03/2013 14:02:41:

bekijk / test dit eens

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT naam_hond, naam FROM honden LEFT JOIN users ON honden.iduser = users.iduser ;
Gewijzigd op 23/03/2013 13:59:25 door Frank Nietbelangrijk
 
Pascal Wetzels

Pascal Wetzels

23/03/2013 15:30:45
Quote Anchor link
ik heb al wat zitten knutselen, maar krijg de output niet zoals ik het wil
dit is zoals ik het eerst had
Afbeelding

dit krijg ik nu, omdat ik de output heb moeten aanpassen naar
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
echo '<table border="1">';
    echo '<tr><th bgcolor="#D8D8D8" align="left">Datum</th><td nowrap align="center">'.$row['datum'].'</td></tr>';
    echo '<tr><th bgcolor="#D8D8D8" align="left">'.$row['oefening'].'</th><td align="center">'.$row['score'].'</td></tr>';
    echo '</table>';

Afbeelding
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/03/2013 16:30:43
Quote Anchor link
aha je draait de tabellen om. ik herinner me een eerder draadje van jou daar over. je lus klopt niet. laat eens wat php code zien. We gaan te hard overigens. want hoe kom je nu aan die datums? dat zijn dus de datums van de oefeningen en die stonden nog niet in jouw database model.
Gewijzigd op 23/03/2013 16:34:46 door Frank Nietbelangrijk
 

Pagina: 1 2 volgende »



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.