gegevens uit formulier opslaan in 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?
Pascal, je kunt een standaardwaarde invullen bij de structuur van de tabel in myphpadmin
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
de query ziet er dan anders uit
Code (php)
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)
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?
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
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)
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?
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
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.
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
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.
idscore, idhond, idoefening, score
en de tabel oefening : idoefening, oefening
en dan met foreign keys en inner join de id's koppelen
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.
eens kijken hoe ver ik ga komen
bedankt voor alle hulp alvast
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.
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
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
er hoeft geen telefoonnummer of adres bij de users
Toevoeging op 23/03/2013 14:02:41:
bekijk / test dit eens
Gewijzigd op 23/03/2013 13:59:25 door Frank Nietbelangrijk
dit is zoals ik het eerst had
dit krijg ik nu, omdat ik de output heb moeten aanpassen naar
Code (php)
1
2
3
4
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>';
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>';
Gewijzigd op 23/03/2013 16:34:46 door Frank Nietbelangrijk