Dan kun je bij het samenstellen van de INSERT-query ervoor zorgen dat voor het veld wat je NULL wilt hebben helemaal niets wordt geschreven. Dus checken bij het bouwen van de query of de string (eventueel na trimmen; de PHP-functie) leeg is, en alleen als dat niet zo is de waarde naar de db schrijven.quote:Op vrijdag 5 september 2008 16:51 schreef poepeneesje het volgende:
Bij het verzenden van het formulier naar de database, wil ik dat indien er niets wordt ingevuld in de textarea, dat er in de datebase in dat valt gewoon NULL staat en geen spatie.
Of gewoon niets inserten, waarbij MySQL er zelf NULL van maakt (als je in je schema NULL toestaat en als default value hebt).quote:Op vrijdag 5 september 2008 16:57 schreef GlowMouse het volgende:
en in dat geval NULL ipv een string INSERTEN.
1 2 3 4 5 6 7 8 | $input = " "; $input = trim($input); if (!strlen($input)) { $input = null } # Doorgaan alsof er niks aan de hand is ?> |
Een lege string is in sommige gevallen beter dan NULL. Soms wil je namelijk echt een onderscheid maken tussen een lege string en NULL, bijv als je in een left join wil controleren of er geen match is, en dat kan dan niet (of is minder betrouwbaar) als er ook NULL values in bestaande rows zitten.quote:Op vrijdag 5 september 2008 17:12 schreef poepeneesje het volgende:
CraZaay & GlowMouse, ik wist niet dat het ook een PHP-functie is. Daar ga ik vanavond dan even opnieuw naar kijken.
Het wordt niet zozeer als lege string opgeslagen, maar echt als een spatie. Waarschijnlijk maakt het niet veel uit, maar het is wel netter (vind ik) als er dan gewoon niets wordt opgeslagen. Maar ik denk dat ik weet waar het misgaat, nu je begint over een lege string.
Ik ga vanavond even kijken, bedankt voor de snelle reacties jongens.
Dat wordt het niet, het blijft gewoon leeg terwijl je NULL moet hebben in je query.quote:Op vrijdag 5 september 2008 17:22 schreef slakkie het volgende:
[ code verwijderd ]
Ik ga er maar even vanuit dat null van php ook in de query gewoon NULL wordt..
Dan maak je er in slakkies code $input = 'NULL' van. Het is dan string waarde 'NULL', maar wanneer je deze unescaped in je query zet is het gewoon "bla = NULL" in de query. Heel die query is namelijk al een samenstelling van strings.quote:Op vrijdag 5 september 2008 17:25 schreef GlowMouse het volgende:
Dat wordt het niet, het blijft gewoon leeg terwijl je NULL moet hebben in je query.
Zo makkelijk is het niet. Er zal dan de string 'NULL' in je database komen in plaats van NULL. Je zou bijvoorbeeld iets kunnen doen als then $input='NULL' else $input = "'" . $db->escape($input) . "'". Maar nogmaals: waarom moeilijk doen als je het niet nodig hebt, je geen idee hebt wat je doet, en je jezelf alleen ellende op de hals haalt?quote:Op vrijdag 5 september 2008 17:29 schreef CraZaay het volgende:
[..]
Dan maak je er in slakkies code $input = 'NULL' van. Het is dan string waarde 'NULL', maar wanneer je deze unescaped in je query zet is het gewoon "bla = NULL" in de query. Heel die query is namelijk al een samenstelling van strings.
Nee, dat is niet correctquote:Op vrijdag 5 september 2008 17:32 schreef GlowMouse het volgende:
Zo makkelijk is het niet. Er zal dan de string 'NULL' in je database komen in plaats van NULL.
1 2 3 4 5 | $input = 'NULL'; mysql_query("INSERT INTO table (input) VALUES ($input);"); ?> |
1 |
Dit is een versimpelde versie uiteraard, ik ga er vanuit dat je ook geen zin hebt in injection enzo en al iets met die string gedaan hebt, bijvoorbeeld ge-escaped wanneer je er wel een string in wilt hebbenquote:Op vrijdag 5 september 2008 17:47 schreef GlowMouse het volgende:
Maar je hebt nooit VALUES($input) staan, omdat je dan in de problemen komt als $input een echte string is. Vandaar mijn else
Met PDO werkt het wel:quote:Op vrijdag 5 september 2008 17:25 schreef GlowMouse het volgende:
[..]
Dat wordt het niet, het blijft gewoon leeg terwijl je NULL moet hebben in je query.
Maar ik zou me de problemen met NULL in je db niet op de hals halen als je het niet nodig hebt. Sla gewoon een lege string op.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $db = ""; $host = "localhost"; $dbname = "test"; $user = "root"; $passwd = ""; try { $db = new PDO(sprintf("mysql:host=%s;dbname=%s", $host, $dbname), $user, $passwd); } catch (PDOException $e) { printf("DB error: %s\n", $e->getMessage()); exit(1); } $sth = $db->prepare("INSERT INTO testing (val) VALUES ( ? )"); $sth->bindValue(1, null); $sth->execute(); ?> |
1 2 3 4 5 6 7 8 | -> ; +----+------+ | id | val | +----+------+ | 2 | NULL | +----+------+ 1 row in set (0.00 sec) |
Moet ${dag} zijn, ipv {$dag}, of ook niet, mag beide.. mkay.quote:Op zaterdag 6 september 2008 00:45 schreef CraZaay het volgende:
Of "$jaar-$maand-$dag 00:00:00", als je minder wilt concatenaten(mocht dat problemen geven, zet dan {} rond je vars, dus {$dag}).
Ga slapenquote:Op zaterdag 6 september 2008 01:04 schreef slakkie het volgende:
Moet ${dag} zijn, ipv {$dag}, of ook niet, mag beide.. mkay.
Thnx! Dit vind ik zelf ook wel de meest handige schrijfwijzequote:Op zaterdag 6 september 2008 00:45 schreef CraZaay het volgende:
Of "$jaar-$maand-$dag 00:00:00", als je minder wilt concatenaten(mocht dat problemen geven, zet dan {} rond je vars, dus {$dag}).
1 global tabelquote:Op maandag 8 september 2008 15:52 schreef Chandler het volgende:
Klopt maar wat raad je aan, zit namelijk zelf te denken aan 1 global tabel voor alle plugins ipv per plugin een tabel.
1 2 3 4 5 6 7 | echo "<select name='print' style='width: 387px'> <option>-</option> <option if(isset($print) && ($print==1)){echo selected='selected';} value='1'>Ja</option> <option if(isset($print) && ($print==0)){echo selected='selected';} value='0'>Nee</option> </select>;" ?> |
Niet gaan klooien, zorgt alleen maar voor meer problemen. Vraag ze de tijd gewoon goed in te stellen. Of krijg je gewoon de GMT tijd terug? Daar kun je wel mee rekenen uiteraard, als je die altijd krijgt.quote:Op maandag 8 september 2008 20:17 schreef poepeneesje het volgende:
Daarnaast heb ik nog het volgende, de tijd op MySQL-server van PCextreme loopt twee uur achter. Hoe zorg ik ervoor dat ik de juiste tijd opsla in de database, ik gebruik nu now() om de huidige (datebase)tijd op te slaan. Optellen van twee uur bij de tijd geeft waarschijnlijk problemen bij het voor- en achteruit zetten van de tijd.
Dit zou ik doen (met code-tag, syntax highlighter hier kan het niet aan anders):quote:Met een variable lukt het me wel, maar ik zou graag dus een stuk PHP hebben die xHTML print waarin weer een stuk PHP voorkomt, hoe krijg ik dit (netjes) voor elkaar?
1 2 3 4 5 6 7 8 9 | echo(" <select name='print' style='width: 387px'> <option>-</option> <option <?= (isset($print) && ($print == 1)) ? 'selected=\'selected\'' : '' ?> value='1'>Ja</option> <option <?= (isset($print) && ($print == 0)) ? 'selected=\'selected\'' : '' ?> value='0'>Nee</option> </select> "); ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |