Is dit wat je bedoelt?quote:Op woensdag 10 december 2008 21:22 schreef Tijn het volgende:
Misschien is het handig als je in je formuliertje de radiobuttons niet alleen een naam maar ook een waarde geeft. Als je ze dan allevier dezelfde naam geeft, kun je maar 1 optie selecteren. In je PHP-code kun je dan de waarde van deze ene naam vergelijken en zo de juiste actie uitvoeren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <head> </head> <body> <form method="post" action="opdracht4.php"> <input type="text" name="getal1"/> <br/> <input type="text" name="getal2"/> <br/> <input type="radio" name="reken" value="reken1"/>Optellen (+) <input type="radio" name="reken" value="reken2"/>Aftrekken (-) <input type="radio" name="reken" value="reken3"/>Delen (/) <input type="radio" name="reken" value="reken4"/>Vermenigvuldigen (*) <br/> <input type="reset" name="reset" value="Verwijder!"/> <input type="submit" name="submit" value="Bereken!"/> <br/> </form> </body> </html> |
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 | $getal1 = $_POST['getal1']; $getal2 = $_POST['getal2']; if (!is_numeric($getal1) || !is_numeric($getal2)) { echo "Je hebt geen numerieke getallen ingevoerd."; } else { if($_POST['reken1'] ==1) { $uitkomst = $getal1 + $getal2; echo "$getal1 + $getal2 = $uitkomst"; } if($_POST['reken2'] ==1) { $uitkomst= $getal1 - $getal2; echo "$getal1 - $getal2 = $uitkomst"; } if($_POST['reken3'] ==1) { $uitkomst = $getal1 / $getal2; echo "$getal1 / $getal2 = $uitkomst"; } if($_POST['reken4'] ==1) { $uitkomst = $getal1 * $getal2; echo "$getal * $getal = $uitkomst"; } } ?> |
1 2 | <a href="index.html">Nog eens de rekenmachine gebruiken!</a> |
Index.php (minus html output) ik gebruik session_register() omdat op de test server de sessies nog niet automatisch willen startenquote:Op woensdag 10 december 2008 21:27 schreef Swetsenegger het volgende:
post je hele script eens
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | session_start(); session_register(totosession); // FF wat settings ophalen! include('./includes/systemfiles/settings.php'); // Ook ff wat functies include('./includes/systemfiles/functions.php'); // Titel functie include('./includes/systemfiles/get_title.php'); // Zet de locale op Dutch setlocale (LC_ALL, 'dutch'); echo '' . $_SESSION[totosession][user] . ''; if (ISSET($_POST[slogin])) { loginhandler($_POST[username],$_POST[password]); echo '1' . $_POST[username] . '2' . $_POST[password] . ''; } ?> |
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 80 81 82 83 84 85 86 87 88 89 90 | PHP echo' <div class="tdkop"> Login </div> <div class="tdcontent"> <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> <div class="formdesc"> <label for="username">Username</label> </div> <div class="tdcontent"> <input class="forminvul" type="text" id="username" name="username" size="26" maxlength="25"> </div> <div class="formdesc"> <label for="naam">Wachtwoord</label> </div> <div class="tdcontent"> <input class="forminvul" type="password" id="password" name="password" size="26" maxlength="25"> </div> <center><input type="submit" value="verzenden"></center> <input type="hidden" name="slogin" value="slogin"> <div style="display:none;"></div></form> </div>'; [/code] Loginhandler functie: [code] if (!ISSET($username) || $password == --) { $tekst = 'Je ben vergeten een veld in te vullen, ga terug en probeer het opnieuw'; } //Anders query met count en password oproep else { $sql = "SELECT count(uname) AS 'counting' , upass FROM `toto_users` WHERE `uname` = '$username' GROUP BY `uname`"; // SQL error... melden maar... if (!$result = mysql_query($sql)) { $mysqlerror = mysql_error(); $tekst = 'SQL ERROR:<br />' . $mysqlerror . ''; } else { $object = mysql_fetch_object($result); // Minder dan 1.. dan zit de user name net in de DB, meld het! if ($object->counting < 1) { $tekst = "Username bestaat niet"; } //Password matchen niet, dan wachtwoord vekeerd.. Melden die zooi! elseif ($object->upass != $password) { $tekst = 'Wachtwoord is niet correct'; } // Woei alles goed! Have fun ;-) (nog een een redirect fixen..) else { $tekst = 'Login succesvol'; $totosession[login] = 'ok'; $totosession[user] = stripslashes($username); } } ?> |
quote:Op woensdag 10 december 2008 21:37 schreef Kerol het volgende:
[..]
Is dit wat je bedoelt?
[ code verwijderd ]
[ code verwijderd ]
[ code verwijderd ]
Ik zal vast nog wel ergens een epische faal hebben staan want hij laat $getal1, $getal2 en $uitkomst niet zien.
1 2 3 | if($_POST['reken'] =='reken1') ?> |
Je formuliertje is nu goed, maar nu moet je dat nog met PHP op de juiste manier verwerken. Je hebt de radiobuttons de naam "reken" gegeven, dus je moet de waarde van $_POST['reken'] gaan vergelijken, bijvoorbeeld zo:quote:Op woensdag 10 december 2008 21:37 schreef Kerol het volgende:
[..]
Is dit wat je bedoelt?
[ code verwijderd ]
[ code verwijderd ]
[ code verwijderd ]
Ik zal vast nog wel ergens een epische faal hebben staan want hij laat $getal1, $getal2 en $uitkomst niet zien.
1 2 3 4 5 6 7 | if($_POST['reken'] == 'reken1') { // hier code voor het geval 'reken1' } etc... ?> |
Ah, bedankt. Zodra die beschikbaar zijn neem ik die meteen effe mee naar mijn WAMP servertje.quote:Op woensdag 10 december 2008 22:40 schreef JortK het volgende:
Tuvai, nog even terugkomend waarom je de meest recente versie van PECL niet kon vinden: http://www.php.net/archive/2008.php#id2008-12-10-1
Is relatief eenvoudig. Als je de pagina (of RSS feed) uit leest d.m.v. file_get_contents() ben je al een heel eind. RSS is in feite zeer gesimplificeerde XML, dus het goochelen met de content van het uitgelezen bestand is ook vrij makkelijk te doen, zelfs voor een beginner.quote:Op donderdag 11 december 2008 01:21 schreef Niek. het volgende:
Ik heb een website en wil daarop een rss feed van twitter hebben.
http://search.twitter.com/search.rss?q=drugs
Dat is een feed waarin elk bericht komt waarin het woord "drugs" in voor komt. Ik zou dus het liefste de laatste 10 oid. berichten op mn site willen hebben en dat hij zichzelf update (als het qua berichten er ongeveer zo http://search.twitter.com/search?q=hangover uitziet zou dat helemaal leuk zijn).
Heeft iemand hier ervaring mee en weet iemand hier een goede manier voor? Ik kan zelf vrijwel geen php typen maar begrijp het merendeel wel en ongeveer hetzelfde geld voor html.
Iemand die deze 100% noob dus verder kan helpen?
Waarom wou jij één aanmaken dan. Degene die de last post krijgt moet toch een nieuwe makenquote:Op donderdag 11 december 2008 08:31 schreef PiRANiA het volgende:
[..]
Dit topic
Er kwam er nog één achteraan
(verkapte tvp)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | | topicid | userid | +---------+--------+ | 1 | 1 | +---------+--------+ | 1 | 2 | +---------+--------+ | 2 | 1 | +---------+--------+ | 3 | 1 | +---------+--------+ | 3 | 2 | +---------+--------+ | 1 | 3 | +---------+--------+ | 4 | 2 | +---------+--------+ | 4 | 3 | +---------+--------+ |
1 2 3 4 5 | FROM links l1 INNER JOIN links l2 ON l2.topicid = l1.topicid GROUP BY l1.userid, l2.userid ORDER BY l1.userid, l2.userid |
Ik ga straks even kijken, bedankt in ieder geval!quote:Op donderdag 11 december 2008 12:01 schreef SuperRembo het volgende:
Ik denk dat deze query geeft wat je zoekt
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $k=0; $e=0; $sal=900; $provisie=1.125; $eraf=0; $salaris=0; $werknemer = array( "naam"=>"henk", "omzet"=>"1000", "werkid"=>"200"); $werknemer = array( "naam"=>"peter", "omzet"=>"2000", "werkid"=>"201"); $werknemer = array( "naam"=>"jan", "omzet"=>"4000", "werkid"=>"202"); $werknemer = array( "naam"=>"newbie", "omzet"=>"200", "werkid"=>"203"); $werknemer = array( "naam"=>"elite", "omzet"=>"100", "werkid"=>"204"); $werknemer = array( "naam"=>"", "omzet"=>"", "werkid"=>"999"); for($werknemer['werkid'] =200;$werknemer['werkid']<>999;$werknemer['werkid++']); { for($geld =2100;$geld ==0; $geld=$geld-$eraf); { $salaris=$werknemer['omzet']*$provisie; $eraf=$salaris-($werknemer[omzet]*$provisie); } $salaris=$salaris+$sal; echo $werknemer['naam']."heeft Ī".$werknemer['omzet']. "gemaakt, en Ī".$salaris."verdient.<br>"; ?> |
1 |
die had ik niet gezienquote:Op donderdag 11 december 2008 21:08 schreef Light het volgende:
Je mist sowieso ergens een } en dat verklaart die melding over regel 31.
quote:Op woensdag 10 december 2008 21:40 schreef MrDoegewoon het volgende:
[..]
Index.php (minus html output) ik gebruik session_register() omdat op de test server de sessies nog niet automatisch willen starten
[ code verwijderd ]
Login.php
[ code verwijderd ]
Loginhandler functie:
[ code verwijderd ]
Het is allemaal nog niet netjes en veilig enzo, maar het is maar voor een simpele toto.
Doe na deze code eens een var_dump($werknemer); om te zien waar je mee verder gaatquote:Op donderdag 11 december 2008 20:16 schreef cablegunmaster het volgende:
[ code verwijderd ]
komt erop neer elke medewerker krijgt 900 salaris
bovenop zijn omzet die de medewerker verdient krijgt ie 12,5% provisie
provisiepost heeft maar max 2100 euro.
hij stopt pas bij medewerker id 999 die hij niet laat weerzien.
zit een fout in ^^;; snap nog niet helemaal hoe het zit met array's.
regel 20 maakt hij fouten , hoe moet ik dat anders opschrijven?
1 begin waarde 2 eindwaarde 3 ophoging
alleen hoe doe ik dit met arrays? :9 (dit kan korter in array toch? :o )
1 2 3 4 5 6 7 8 | $werknemer = array( "naam"=>"henk", "omzet"=>"1000", "werkid"=>"200"); $werknemer = array( "naam"=>"peter", "omzet"=>"2000", "werkid"=>"201"); $werknemer = array( "naam"=>"jan", "omzet"=>"4000", "werkid"=>"202"); $werknemer = array( "naam"=>"newbie", "omzet"=>"200", "werkid"=>"203"); $werknemer = array( "naam"=>"elite", "omzet"=>"100", "werkid"=>"204"); $werknemer = array( "naam"=>"", "omzet"=>"", "werkid"=>"999"); ?> |
1 2 3 4 5 6 7 | for($geld =2100;$geld ==0; $geld=$geld-$eraf); { $salaris=$werknemer['omzet']*$provisie; $eraf=$salaris-($werknemer[omzet]*$provisie); } ?> |
quote:Op donderdag 11 december 2008 22:28 schreef Light het volgende:
1
2
3
4
5
6
7
8<?php
$werknemer = array( "naam"=>"henk", "omzet"=>"1000", "werkid"=>"200");
$werknemer = array( "naam"=>"peter", "omzet"=>"2000", "werkid"=>"201");
$werknemer = array( "naam"=>"jan", "omzet"=>"4000", "werkid"=>"202");
$werknemer = array( "naam"=>"newbie", "omzet"=>"200", "werkid"=>"203");
$werknemer = array( "naam"=>"elite", "omzet"=>"100", "werkid"=>"204");
$werknemer = array( "naam"=>"", "omzet"=>"", "werkid"=>"999");
?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $werknemer = array( array( "naam"=>"henk", "omzet"=>"1000", "werkid"=>"200"); array( "naam"=>"peter", "omzet"=>"2000", "werkid"=>"201"); array( "naam"=>"jan", "omzet"=>"4000", "werkid"=>"202"); array( "naam"=>"newbie", "omzet"=>"200", "werkid"=>"203"); array( "naam"=>"elite", "omzet"=>"100", "werkid"=>"204"); ); //mee opgelost en een while($k=0;; $k< count($werknemer); $k++) { $salaris=($werknemer[$k]['omzet']*$provfactor); echo "provisie:".$geld." "; if ($geld < $salaris) $salaris = $geld; $geld -= $salaris; // snapte alleen niet waarom de -= hoe dat precies werkt (broer hielp me een beetje /* Geef ook nog vaste salaris */ $totaal=$salaris+$sal; echo $werknemer[$k]["naam"]." heeft Ī".$werknemer[$k]['omzet']. "gemaakt en Ī".$totaal."verdient.<br>"; } ?> |
Natuurlijk: PHP Operators.quote:Op vrijdag 12 december 2008 01:46 schreef cablegunmaster het volgende:
[..]
[ code verwijderd ]
kan iemand me de -= uitleggen?![]()
login.php wordt geincludequote:Op donderdag 11 december 2008 22:24 schreef Positive_Thinking het volgende:
cablegunmaster inplaats van de eerste for kan je natuurlijk ook foreach gebruiken.
Kijk die functie eens rustig na.
http://fi.php.net/foreach
Mrdoegwoon, als een nieuw pagina aangeroepen wordt (anders dan index file) dan heeft die ook een session_start nodig.
session_start() creates a session or resumes the current one based on the current session id that's being passed via a request, such as GET, POST, or a cookie.
$geld -= 1 is hetzelfde als $geld = $geld - 1quote:Op vrijdag 12 december 2008 01:46 schreef cablegunmaster het volgende:
[..]
[ code verwijderd ]
kan iemand me de -= uitleggen?![]()
even snel beetje na gekeken..quote:
Die code werkt niet helemaal. Hij telt niet het aantal topics, maar het aantal posts, en dat ook nog niet correct want als je bijvoorbeeld 2 posts van één user in één topic hebt telt hij die dubbel, en met drie posts in één topic driedubbel, enzovoort.quote:Op donderdag 11 december 2008 12:01 schreef SuperRembo het volgende:
Ik denk dat deze query geeft wat je zoekt
[ code verwijderd ]
quote:Op donderdag 11 december 2008 10:56 schreef JortK het volgende:
Hier even een vraag, omdat ik zelf geen brainfart krijg hoe dit op te lossen :)
Ik heb een tabel, daarin staan de volgende gegevens:
[ code verwijderd ]
Nu wil ik weten hoe vaak een bepaalde relatie voorkomt, dus hoevaak bepaalde users in hetzelfde topic hebben gepost.
Dit zou dus uitkomen op:
User 1 en user 2 : 2 topics
User 1 en user 3: 1 topic
User 2 en user 3: 1 topic
Hoe krijg ik dit in een query voor elkaar, ik heb namelijk echt werkelijk geen idee. :{
1 |
1 2 3 | <input type="radio" name="formaat" value="middel">middel <input type="radio" name="formaat" value="groot">groot |
1 2 3 4 5 6 7 8 9 10 11 12 13 | $_POST['toevoeg'] = $toevoeg; $_POST['formaat'] = $formaat; if (empty ($toevoeg)) { echo "U moet wel een toevoeging invoeren anders kan het proces niet doorgaan. <br/>"; if(empty ($formaat)) { echo "U moet wel een formaat invoeren want anders weten wij niet wat voor formaat u wilt hebben!"; } } ?> |
Zet gewoon bij de meest verkochte checked neerquote:Op zondag 14 december 2008 21:52 schreef Kerol het volgende:
Ik wil dus checken of een RADIO button niet empty is.
[ code verwijderd ]
[ code verwijderd ]
Hoe doe ik dat? Nu lukt het niet namelijk.
1 2 3 4 | $toevoeg = $_POST['toevoeg']; $formaat = $_POST['formaat']; ?> |
Dan nog moet je controleren of er wel een waarde is geset. Da's regel 1, nooit gebruikersinvoer vertrouwen. Echt nooit.quote:Op zondag 14 december 2008 21:55 schreef PiRANiA het volgende:
[..]
Zet gewoon bij de meest verkochte checked neer
Wat een domme fout van me zegquote:Op zondag 14 december 2008 21:56 schreef Light het volgende:
Je moet wel de goede volgorde gebruiken
[ code verwijderd ]
quote:Op zondag 14 december 2008 21:52 schreef Kerol het volgende:
Ik wil dus checken of een RADIO button niet empty is.
[ code verwijderd ]
[ code verwijderd ]
Hoe doe ik dat? Nu lukt het niet namelijk.
1 2 3 | die('er ie geen formaat ingevoerd'); } |
Kijk eens naar de functie abs(). Daar kom je vast verder mee.quote:Op maandag 15 december 2008 14:39 schreef Chandler het volgende:
Hoe kun je binnen een array uitvinden welk getal het dichtste bij een gegeven getal zit.
Stel je hebt een array met allemaal getallen
10, 100, 250, 500, 750, 1000, 1500
en je wilt weten welk getal het meest dicht bij een gegeven getal zit.
bv 743 (750 = -7) hoe kom je daar achter?
Of 121 = 100 etc
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 | $thumbnailSizes = array(90 => 90, 128 => 128, 256 => 256, 512 => 512); $thumbSize = 0; $thumbSizeVal = 0; foreach ($thumbnailSizes AS $max) { echo abs($max - $_GET['in']) . " - " . abs($max + $_GET['in']) . " - " . $max . "<br />"; if ($thumbSizeVal == 0) { $thumbSizeVal = abs($max + $_GET['in']); $thumbSize = $max; } if (abs($max + $_GET['in']) < $thumbSizeVal) { $thumbSizeVal = abs($max + $_GET['in']); $thumbSize = $max; } if (abs($max - $_GET['in']) < $thumbSizeVal) { $thumbSizeVal = abs($max - $_GET['in']); $thumbSize = $max; } } echo 'eind-' . $thumbSize; ?> |
Uit m'n hoofd:quote:Op maandag 15 december 2008 16:13 schreef Chandler het volgende:
Het werkt!
Maar kan het beter/kleiner?
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $thumbnailSizes = array(90, 128, 256, 512); $thumbSize = 0; $minThumbsizeDifference = 2000000000; // Groot getal dat altijd groter is dan het grootste verschil foreach ($thumbnailSizes AS $max) { if (abs($_GET['in'] - $max) < $minThumbsizeDifference) { $minThumbsizeDifference = abs($_GET['in'] - $max); $thumbSize = $max; } } echo 'eind: ' . $thumbSize; ?> |
1 2 3 4 5 | FROM reis r1 INNER JOIN reservering r2 ON (r1.reiscode = r2.reiscode) INNER JOIN klant k ON (r2.klantnr = k.klantnr) WHERE r1.bestemming IN ('Turijn', 'Venetië') |
Maak van "INNER", "LEFT" en klaar ben je.quote:Op maandag 15 december 2008 16:53 schreef Kerol het volgende:
Kan het ook anders dan met INNER JOINS want dat heb ik nog niet gehad.. bv met subquery's of normale joins.?
Mja maar ik moet eigenlijk de opdracht maken zonder INNER, LEFT, RIGHT JOIN enzo.. alleen maar met subquerys en joins als 'reiscode.reis = reiscode.klant' etc etc... dus is er ook een manier om met dat tot hetzelfde antwoord te komen dan wat je met de INNER JOINS etc krijgt?quote:Op maandag 15 december 2008 17:31 schreef Tiemie het volgende:
[..]
Maak van "INNER", "LEFT" en klaar ben je.
1 2 3 4 5 | FROM reis r1 INNER JOIN reservering r2 ON (r1.reiscode = r2.reiscode) INNER JOIN klant k ON (r2.klantnr = k.klantnr) WHERE r1.bestemming IN ('Turijn', 'Venetië') |
1 2 3 4 | FROM reis r1, reservering r2, klant k WHERE r1.reiscode = r2.reiscode AND r2.klantnr = k.klantnr AND r1.bestemming IN ('Turijn', 'Venetië') |
1 2 3 4 5 6 7 8 9 10 11 | $res2 = mysql_query("SELECT `naam`, `straatnaam`, `huisnummer`, `postcode`, `woonplaats` FROM `reis`, `reservering`, `klant` WHERE `reis.reiscode` = `reservering.reiscode` AND `reservering.klantnr` = `klant.klantnr` AND `reis.bestemming` = 'Turijn' OR 'Venetië' ") or die(mysql_error()); while ($row2 = mysql_fetch_array($res2)) { echo '<br/>'; echo ($row2['naam']); echo ($row2['straatnaam']); echo ($row2['postcode']); echo ($row2['woonplaats']); } ?> |
Werkt! Thanks!quote:Op maandag 15 december 2008 20:27 schreef Arjan321 het volgende:
Als je nou ook de output van de mysql_error() zou plaatsen, zou het "hij doet het niet" wat duidelijker zijn..
maargoed, voor zosnel ik zie is dit niet goed: `reis.reiscode` (e.d.), hij zoekt nu een kolom die zo heet, ipv de combinatie van tabel.kolom. reis.`reiscode` zal wel werken.
Tnx, het is inderdaad een heel stuk korter, blijkbaar mis ik toch dat stukje inzichtquote:
1 |
Je doelt op de query cache van MySQL, of zelf iets van een cache maken? Voor dat laatste zou je kunnen kijken naar Zend_Cache.quote:Op maandag 15 december 2008 23:21 schreef Chandler het volgende:
Ik heb tevens nog een andere vraag, in bepaalde fora zie je dat zoek opdrachten gecached worden, hier wil ik eens meer over weten. Is er documentatie te vinden waarin uitgelegd wordt hoe men zoek opdrachten kan cachen?
Heb gezocht maar niet gevonden.
En dan eventueel ook naar de toepassing van IN, als Kerol toch bezig gaatquote:Op maandag 15 december 2008 23:30 schreef GlowMouse het volgende:
Ik zie dit staan aan het eind van je query:
[ code verwijderd ]
Ga eens uitzoeken wat OR doet
Rare manier van copy & pasten heeft hij.quote:Op maandag 15 december 2008 23:32 schreef HuHu het volgende:
[..]
En dan eventueel ook naar de toepassing van IN, als Kerol toch bezig gaat.
Turijn OF Venetie.. dus niet beide..quote:Op maandag 15 december 2008 23:30 schreef GlowMouse het volgende:
Ik zie dit staan aan het eind van je query:
[ code verwijderd ]
Ga eens uitzoeken wat OR doet
Mja met dat k1 en r1 en r2 heb ik nog nooit gewerkt en volgens mij is dit gewoon hetzelfde als wat jij zei? Of zit ik weer foutquote:Op maandag 15 december 2008 23:36 schreef Tiemie het volgende:
[..]
Rare manier van copy & pasten heeft hij.
Zet er eens haakjes omheen:quote:Op dinsdag 16 december 2008 09:24 schreef Kerol het volgende:
[..]
Turijn OF Venetie.. dus niet beide..
toch
1 |
1 |
1 |
Dat zijn aliassen, ik had het meer over OR ipv. IN gebruiken.quote:Op dinsdag 16 december 2008 09:25 schreef Kerol het volgende:
[..]
Mja met dat k1 en r1 en r2 heb ik nog nooit gewerkt en volgens mij is dit gewoon hetzelfde als wat jij zei? Of zit ik weer fout
Nou het is meer dat fora's hun zoek resultaten opslaan op een of andere manier.quote:Op maandag 15 december 2008 23:31 schreef HuHu het volgende:
[..]
Je doelt op de query cache van MySQL, of zelf iets van een cache maken? Voor dat laatste zou je kunnen kijken naar Zend_Cache.
Kijk dan hier ook eensquote:Op dinsdag 16 december 2008 10:55 schreef Chandler het volgende:
Ok, maar die sla je op in een tijdelijk tabel oid? (nog nooit met tijdelijke tabellen gewerkt)
Beetje bizar dat je het wel met een subquery wil/mag doen maar niet met een join. Een join is voor de database een stuk meer straightforward dan een subquery. MySQL ondersteunt subqueries ook nog niet heel lang.quote:Op maandag 15 december 2008 18:00 schreef Kerol het volgende:
Mja maar ik moet eigenlijk de opdracht maken zonder INNER, LEFT, RIGHT JOIN enzo.. alleen maar met subquerys en joins als 'reiscode.reis = reiscode.klant' etc etc... dus is er ook een manier om met dat tot hetzelfde antwoord te komen dan wat je met de INNER JOINS etc krijgt?
Dat klopt, maar op de toets moet ik het ook zo opschrijven, dus zonder die andere JOIN soorten enz. dus wil ik het liefst nog niet meerdere vormen kennen als dat helemaal nog niet noodzakelijk is, anders raak ik straks helemaal in de war bij de toetsquote:Op dinsdag 16 december 2008 09:29 schreef Tiemie het volgende:
[..]
Overigens vind ik het raar dat je geen andere manier van joinen zou mogen gebruiken.... Als je iets op school krijgt en jij gaat je daar zelf meer in verdiepen, is dat alleen maar positief lijkt me.
1 |
1 |
1 |
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 | $TSIQ=0; $learner='Omfg a good start keep trying till your the best'; $noob='LoL youre a noob Learn php from the hello word friggin start!'; $elite='Damn your a pro!'; $explode='BOOM your brains exploded'; $youwish='HAHAHAHA YOU WISH!'; // werkend en al :p iets teveel whiles maar boeien while($TSIQ < 80){ echo $noob."<br>"; $TSIQ++; } while($TSIQ < 99){ echo $learner."<br>"; $TSIQ++; } while($TSIQ < 130){ echo $elite."<br>"; $TSIQ++; } while($TSIQ < 160){ echo $explode."<br>"; $TSIQ++; } while($TSIQ < 190){ echo $youwish."<br>"; $TSIQ++;} while($TSIQ > 199){} ?> |
1 2 3 4 5 6 | $age_stamp = 152492400; $age = time() - $age_stamp; $age = $age / (365*24*60*60); echo $age; ?> |
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 | /*<table border="1"> <tr> <th colspan="4">Alle docenten</th> </tr> <tr> <td>Naam</td> <td>Kamernummer</td> <td>Telefoon</td> <td>Vak</td> </tr>*/ function VoegToe($naamerb,$kmrnummerb,$telefoonb,$vakb){ $docent = array( array( "naam"=>"Evelijn Visser", "kamernummer"=>"213","telnr"=>"", "vak"=>"Wiskunde"), array( "naam"=>"Gerda Acherop", "kamernummer"=>"214","telnr"=>"213", "vak"=>"Nederlands"), array( "naam"=>"Luc de Haan", "kamernummer"=>"215","telnr"=>"213", "vak"=>""), array( "naam"=>"Frederik Peppels", "kamernummer"=>"213","telnr"=>"", "vak"=>"Informatica"), array( "naam"=>"Hen Tartje", "kamernummer"=>"","telnr"=>"200", "vak"=>""), array( "naam"=>"Watje Stanat", "kamernummer"=>"212","telnr"=>"220", "vak"=>"Biologie"), ); array_push($docent[$k]['naam'],$naamerb); array_push($docent[$k]['kamernummer'],$kmrnummerb); array_push($docent[$k]['telnr'],$telefoonb); array_push($docent[$k]['vak'],$vakb); } for($k = 0; $k < count($docent); $k++){ Echo '<tr><td>'.$docent[$k]['naam'].'</td><td>'.$docent[$k]['kamernummer'].'</td><td>'.$docent[$k]['telnr'].'</td><td>'.$docent[$k]['vak'].'</td></tr>'; } function voegtoe('joris flaanders',5586,3545,'Informatica'); ?> |
de array erbinnen in wil ik 1 opschuiven.quote:Op donderdag 18 december 2008 14:35 schreef slacker_nl het volgende:
Waar ga je je array met 1 opschuiven? Je hebt een array met arrays, iets meer duidelijkheid graag.
1 2 3 4 5 6 7 8 9 10 11 | $docent = array(); function VoegToe(&$docent, $naam,$kamer,$telefoon,$vak) { docent[] = array( "naam"=> $naam, "kamernummer"=>$kamer,"telnr"=>$telefoon, "vak" => $vak); } VoegToe($docent, "Jij", "1", "020 1234567", "php"); VoegToe($docent, "Hij", "2", "020 1234568", "php"); VoegToe($docent, "Zij", "3", "020 1234569", "php"); ?> |
1 2 3 | # do stuff } |
1 2 3 4 | for ($k = 0; $k < $max; $k++) { print_r($docent[$k]); } |
1 2 3 4 5 6 7 | print_r($v); } # kan ook zo gedaan worden: foreach($docent as $k => $v) { print_r($v); # of print_r($docent[$k]); } |
1 2 3 4 5 6 7 8 9 | array( "naam"=>"Evelijn Visser", "kamernummer"=>"213","telnr"=>"", "vak"=>"Wiskunde"), array( "naam"=>"Gerda Acherop", "kamernummer"=>"214","telnr"=>"213", "vak"=>"Nederlands"), array( "naam"=>"Luc de Haan", "kamernummer"=>"215","telnr"=>"213", "vak"=>""), array( "naam"=>"Frederik Peppels", "kamernummer"=>"213","telnr"=>"", "vak"=>"Informatica"), array( "naam"=>"Hen Tartje", "kamernummer"=>"","telnr"=>"200", "vak"=>""), array( "naam"=>"Watje Stanat", "kamernummer"=>"212","telnr"=>"220", "vak"=>"Biologie"), ); print_r($docent); |
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 | /*<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>php opdracht 2 week 2 by henk</title> </head> <body> <table border="1"> <tr> <th colspan="4">Alle docenten</th> </tr> <tr> <td>Naam</td> <td>Kamernummer</td> <td>Telefoon</td> <td>Vak</td> </tr>*/ $docent = array(); // hoe wil je dit herschrijven? zodat een toekomstige regel ook erbij kan komen? // dacht dat het met k++ kon? $docent[$k++]("naam"=>"Evelijn Visser", "kamernummer"=>"213","telnr"=>"", "vak"=>"Wiskunde"), $docent[$k++]("naam"=>"Gerda Acherop", "kamernummer"=>"214","telnr"=>"213", "vak"=>"Nederlands"), $docent[$k++]("naam"=>"Luc de Haan", "kamernummer"=>"215","telnr"=>"213", "vak"=>""), $docent[$k++]("naam"=>"Frederik Peppels", "kamernummer"=>"213","telnr"=>"", "vak"=>"Informatica"), $docent[$k++]("naam"=>"Hen Tartje", "kamernummer"=>"","telnr"=>"200", "vak"=>""), $docent[$k++]("naam"=>"Watje Stanat", "kamernummer"=>"212","telnr"=>"220", "vak"=>"Biologie"), ); function VoegToe(&$docent, $naam,$kamer,$telefoon,$vak) { $docent[$k++] = array( "naam"=> $naam, "kamernummer"=>$kamer,"telnr"=>$telefoon, "vak" => $vak); } // snap nog niet hoe het zit met het toevoegen met name dat hij een error bij $docent[$k++] geeft. VoegToe($docent, "Jij", "1", "020 1234567", "php"); VoegToe($docent, "Hij", "2", "020 1234568", "php"); VoegToe($docent, "Zij", "3", "020 1234569", "php"); $max = count($docent); for ($k = 0; $k < $max; $k++) // dit was overgekomen dan hertelt hij niet elke keer weer. { Echo '<tr><td>'.$docent[$k]['naam'].'</td><td>'.$docent[$k]['kamernummer'].'</td><td>'.$docent[$k]['telnr'].'</td><td>'.$docent[$k]['vak'].'</td></tr>'; } /* </table> </body> </html>*/ ?> |
1 2 3 | $docent[1]("naam"=>"Evelijn Visser", "kamernummer"=>"213","telnr"=>"", "vak"=>"Wiskunde"), ?> |
je bedoelt dat de tel nr leeg is ?quote:Op donderdag 18 december 2008 15:27 schreef GlowMouse het volgende:
$k++ levert gewoon een getal op. Dit is toch geen valide php-code?
[ code verwijderd ]
1 2 3 | $docent[1] = array("naam"=>"Evelijn Visser", "kamernummer"=>"213","telnr"=>"", "vak"=>"Wiskunde"); ?> |
1 2 3 4 5 6 7 8 | $docent[$k++]("naam"=>"Evelijn Visser", "kamernummer"=>"213","telnr"=>"", "vak"=>"Wiskunde"), $docent[$k++]("naam"=>"Gerda Acherop", "kamernummer"=>"214","telnr"=>"213", "vak"=>"Nederlands"), $docent[$k++]("naam"=>"Luc de Haan", "kamernummer"=>"215","telnr"=>"213", "vak"=>""), $docent[$k++]("naam"=>"Frederik Peppels", "kamernummer"=>"213","telnr"=>"", "vak"=>"Informatica"), $docent[$k++]("naam"=>"Hen Tartje", "kamernummer"=>"","telnr"=>"200", "vak"=>""), $docent[$k++]("naam"=>"Watje Stanat", "kamernummer"=>"212","telnr"=>"220", "vak"=>"Biologie"), ?> |
1 2 3 | voegtoe($docent, "Gerda Acherop", 214, 213, "Nederlands"); ?> |
1 2 3 4 5 6 7 8 9 10 | $docent = array( array( "naam"=>"Evelijn Visser", "kamernummer"=>"213","telnr"=>"", "vak"=>"Wiskunde"), array( "naam"=>"Gerda Acherop", "kamernummer"=>"214","telnr"=>"213", "vak"=>"Nederlands"), array( "naam"=>"Luc de Haan", "kamernummer"=>"215","telnr"=>"213", "vak"=>""), array( "naam"=>"Frederik Peppels", "kamernummer"=>"213","telnr"=>"", "vak"=>"Informatica"), array( "naam"=>"Hen Tartje", "kamernummer"=>"","telnr"=>"200", "vak"=>""), array( "naam"=>"Watje Stanat", "kamernummer"=>"212","telnr"=>"220", "vak"=>"Biologie"), ); ?> |
1 2 3 4 5 6 7 8 9 | array_push($docent, array("naam"=>"Luc de Haan", "kamernummer"=>"215","telnr"=>"213", "vak"=>""), array( "naam"=>"Gerda Acherop", "kamernummer"=>"214","telnr"=>"213", "vak"=>"Nederlands")) # hetzelfde als: $docent[] = array("naam"=>"Luc de Haan", "kamernummer"=>"215","telnr"=>"213", "vak"=>""); $docent[] = array( "naam"=>"Gerda Acherop", "kamernummer"=>"214","telnr"=>"213", "vak"=>"Nederlands"); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | functie mijnfunctie() { $docent = array(1,2,3,4,5); } /* Hier bestaat docent niet meer Dat kan je oplossen door global te gebruiken, maar dat raad ik je af. */ functie mijnfunctie() { global $docent = array(1,2,3,4,5); } /* $docent bestaat nu wel buiten de functie scope*/ ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $docent = array(); function VoegToe(&$docent, $naam,$kamer,$telefoon,$vak) { docent[] = array( "naam"=> $naam, "kamernummer"=>$kamer,"telnr"=>$telefoon, "vak" => $vak); } VoegToe($docent, "Jij", "1", "020 1234567", "php"); VoegToe($docent, "Hij", "2", "020 1234568", "php"); VoegToe($docent, "Zij", "3", "020 1234569", "php"); # Zonder references: function VoegToe($docent, $naam,$kamer,$telefoon,$vak) { docent[] = array( "naam"=> $naam, "kamernummer"=>$kamer,"telnr"=>$telefoon, "vak" => $vak); return $docent; } $docent = VoegToe($docent, "Jij", "1", "020 1234567", "php"); $docent = VoegToe($docent, "Hij", "2", "020 1234568", "php"); $docent = VoegToe($docent, "Zij", "3", "020 1234569", "php"); ?> |
1 2 3 4 | $docent[$k] = array(..); $k++; $docent[$k] = array(..); |
1 2 3 4 5 6 7 8 9 | $members = array(); $i = 0; while(argumenten){ $members[$i]['rank'] = $rank; $members[$i]['name'] = $name; $i++; } ?> |
1 2 3 4 5 6 7 | $ua = //een string switch ($ua){ case (strstr($ua,'blaat')): //doe wat break; ?> |
Is het hier niet zo dat de 'doe wat' bij veel cases sterk op elkaar lijkt, en je dus met een array met speciale user-agents beter af bent?quote:Op zaterdag 27 december 2008 17:32 schreef mcDavid het volgende:
ik krijg mijn switch niet werkend:
[ code verwijderd ]
Hij doet het alleen als $ua exact 'blaat' is, niet als 'blaat' ergens halverwege staat... (dan voert'ie de default actie uit)
iemand een idee?
1 2 3 4 5 6 7 8 9 | $special_uas = array('blaat1', 'blaat2', 'etc'); foreach($special_uas as $special_ua) { if(stripos($ua, $special_ua) !== false) { // w00t break; } } ?> |
De functie strstr returned de string die die gevonden heeft. (de string die je zoekt ;) ) Deze is anders dan de string die je meegeeft aan de switch.quote:Op zaterdag 27 december 2008 17:32 schreef mcDavid het volgende:
ik krijg mijn switch niet werkend:
[ code verwijderd ]
Hij doet het alleen als $ua exact 'blaat' is, niet als 'blaat' ergens halverwege staat... (dan voert'ie de default actie uit)
iemand een idee?
1 2 3 4 5 6 7 8 9 | $ua = 'hoi blaat';//een string switch ($ua){ case (strstr($ua,'blaat') == 'blaat'): //doe wat print 'hoi'; break; } ?> |
Leukquote:Op zaterdag 27 december 2008 18:00 schreef mcDavid het volgende:
mochten julle geinteresseerd zijn in wat stats: http://duft.nl/avatars/browsers.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | echo '<tr><td>'.$docent[$k]['naam'].'</td><td>'; if(isset($docent[$k]['telnr'])) { echo $docent[$k]['telnr'].'</td><td>'; } else { echo $onbekend.'</td><td>';} if(isset($docent[$k]['kamernummer'])) { echo $docent[$k]['kamernummer'].'</td><td>'; } else { echo $onbekend.'</td><td>' ;} if(isset($docent[$k]['vak'])) { echo $docent[$k]['vak'].'</td></tr>'; } else { echo $onbekend.'</td></tr>'; } } ?> |
ipv dat hij aangeeft dat het waar is false? als er niks in zet met empty()?quote:Op zondag 28 december 2008 22:26 schreef SuperRembo het volgende:
isset() geeft ook true als het element in de array een lege string is.
heb hem al opgelost met emptyquote:Op zondag 28 december 2008 22:39 schreef mcDavid het volgende:
je kunt gewoon if ($variable) {//doe iets} doen!
het ging hier om tekst en als ik een van deze bovenste wil gebruiken wat kan ik dan gebruiken?quote:Op zondag 28 december 2008 22:52 schreef SuperRembo het volgende:
empty() is een irritante functie die om allerlei wazige redenen true kan geven:
The following things are considered to be empty:"" (an empty string) 0 (0 as an integer) "0" (0 as a string) NULL FALSE array() (an empty array) var $var; (a variable declared, but without a value in a class)
Vooral dat empty("0") true geeft is waardeloos.
Ik zou het moeten testen, maar volgens mij is er geen verschil tussenquote:Op zondag 28 december 2008 22:52 schreef SuperRembo het volgende:
empty() is een irritante functie die om allerlei wazige redenen true kan geven:
The following things are considered to be empty:"" (an empty string) 0 (0 as an integer) "0" (0 as a string) NULL FALSE array() (an empty array) var $var; (a variable declared, but without a value in a class)
Vooral dat empty("0") true geeft is waardeloos.
http://www.deformedweb.co.uk/php_variable_tests.phpquote:Op zondag 28 december 2008 23:50 schreef Breuls het volgende:
Vergeet vooral de type comparison tables niet: http://nl.php.net/manual/en/types.comparisons.php
Altijd handig als je 't niet meer weet.
Ah, dan hoef ik het niet meer te testenquote:Op zondag 28 december 2008 23:50 schreef Breuls het volgende:
Vergeet vooral de type comparison tables niet: http://nl.php.net/manual/en/types.comparisons.php
Altijd handig als je 't niet meer weet.
Bedoel je deze?quote:Op maandag 29 december 2008 18:38 schreef Likkende_Lassie het volgende:
Kort vraagje!:
PHP heeft toch zo'n mooie functie om in een array karakters te zetten, zodat je ze niet allemaal hoeft te typen?
$A_to_Z = functie(A,Z);
hoe heet die functie ook alweer??
Kun je toch een script maken dat continu in de achtergrond draait en statusinfo stuurt naar een database?quote:Op maandag 29 december 2008 11:35 schreef ursel het volgende:
Zo hebben we een proces wat verbinding legt met een externe partij. Echter komt het regelmatig voor dat we bij de eerste paar checks een verzameling antwoorden terug krijgen. Aan de hand hiervan filteren we wat en doen we een nieuw verzoek met een deel van deze gegevens. Echter is in het huidige proces al gebleken dat in een aantal exotische gevallen dit gehele proces behoorlijk tijd rovend kan zijn, omdat er continue verzamelingen antwoorden terug keren.
Wat ik in het nieuwe project eigenlijk wil bewerkstelligen is dat het proces zelf gewoon door blijft lopen, maar dat er naar de gebruiker toe in ieder geval een melding komt hierover.
Nee dat lukt niet. Je kunt om de zoveel tijd de inhoud van die map opvragen of het proces dat het bestand in die map zet aanpassen om jouw script aan te roepen.quote:Een 2e geval is of er een soort van "event-listener" bestaat voor PHP. Waar ik naar op zoek ben is een functionaliteit dat als er een bestand in een bepaalde map gezet wordt, dat er dan een proces gestart wordt. Momenteel worden er elke minuut de folder gecontroleerd, maar volgens mij moeten er hier veel betere oplossingen voor zijn.
In .NET gaat dat super simpel met een FileSystemWatcherquote:Op maandag 29 december 2008 11:35 schreef ursel het volgende:
Een 2e geval is of er een soort van "event-listener" bestaat voor PHP. Waar ik naar op zoek ben is een functionaliteit dat als er een bestand in een bepaalde map gezet wordt, dat er dan een proces gestart wordt. Momenteel worden er elke minuut de folder gecontroleerd, maar volgens mij moeten er hier veel betere oplossingen voor zijn.
Mja, dat is eigenlijk wat we nu dus hebben. Echter als dus deze "exotische" samenstelling voorbij komt kan dat de rest van het systeem dus ook ophouden. Ik wilde er eigenlijk meer naar werken dat voor elke aanroep het proces gaat draaien, zodat deze andere niet op kunnen houden als er oponthoud is.quote:Op maandag 29 december 2008 19:00 schreef GlowMouse het volgende:
[..]
Kun je toch een script maken dat continu in de achtergrond draait en statusinfo stuurt naar een database?
Mja, zoals we nu dus ook al doen dus.quote:[..]
Nee dat lukt niet. Je kunt om de zoveel tijd de inhoud van die map opvragen of het proces dat het bestand in die map zet aanpassen om jouw script aan te roepen.
De suggestie kwam inderdaad ook van een .Netter..quote:Op maandag 29 december 2008 19:12 schreef SuperRembo het volgende:
[..]
In .NET gaat dat super simpel met een FileSystemWatcherJe zou een heel simpel .NET (of Mono) programmaatje kunnen maken dat die folder in de gaten houd en dan php start als 't nodig is.
1 2 3 4 5 6 7 8 9 | /* Set locale to Dutch */ setlocale(LC_ALL,'nl_NL') or setlocale(LC_ALL,'nld_NLD'); for($i=1; $i<=52; $i++){ $timestamp = strtotime('+'.$i.' thursday'); echo strftime("%A %e %B %Y", $timestamp); } ?> |
quote:michiel1978 at hotmail dot com
06-Oct-2004 11:31
As said in these comments, Windows strftime() doesn't support %e. However, to achieve a similar effect (not 100%) you can use %#d. The # flag will remove the leading zero, so you do get single digits, but without the space that would be added by %e in other environments.
Erm... door de docs te lezen incl. comments? Die staan er niet voor de lol onderquote:Op dinsdag 30 december 2008 23:57 schreef Scorpie het volgende:
De tering hey, hoe moet ik dat nou weten
http://images.google.nl/images?q=winkelwagentjequote:Op donderdag 1 januari 2009 @ 19:00 schreef Likkende_Lassie het volgende:
Even heel erg ontopic, heeft iemand een afbeelding van een winkelwagen, maar dan zo'n grotere, zoals bij de makro en andere groothandels. Maar dan wel als getekend plaatje, in het klein!
Ik zou zeer zeker neit gaan opslaan welke letters een product bevatten tenzij de producten stabiel zijn en er maar weinig nieuwe producten bijkomen/weggaan/veranderen van naam.quote:Op donderdag 1 januari 2009 20:55 schreef Likkende_Lassie het volgende:
Helaas vind ik hem daar niet tussen, maar heb al een goed alternatief kunnen vinden.
Andere vraag:
Ik heb een array uit een database met allemaal producten.
Nu geef ik de klant de mogelijkheid te filterten op a tm z, welke bovenaan de pagina staan als volgt:
bekijk alle producten - A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Nu is het niet altijd zo dat er onder G iets te vinden is, enz. In zo'n geval wil ik G als onklikbaar instellen.
Nu kan ik natuurlijk een while loop maken en indien er geen product met de beginletter G wordt gevonden, iets uitvoeren. Maar als er veel producten in de array zitten, wordt het misschien toch iets te traag.
Bijkomend probleem is, dat als er een letter is gekozen, de array slechts alleen producten bevat die beginnen met de gekozen letter... misschien een idee om de beschikbare letters ergens op te slaan?
Waarom niet? Hoe denk je dat de verhouding opvragen/aanpassen is?quote:Op donderdag 1 januari 2009 22:16 schreef Database het volgende:
Ik zou zeer zeker neit gaan opslaan welke letters een product bevatten tenzij de producten stabiel zijn en er maar weinig nieuwe producten bijkomen/weggaan/veranderen van naam.
Hoe denk je dat dat werkt als er, zeg, 10.000 producten zijn?quote:Wat je kan doen is je producten opslaan in een dictioary (2d array) van letters naar arrays van producten. Dus $producten["a"][0] geeeft het eerst product dat met een a begint.
Zo kan je met een count($producten["x"]); zien hoeveel producten er zijn die met letter x beginnen.
Omdat dit een bron is van bugs. Je krijgt hier code van wat slecht onderhoudbaar is omdat je moet weten/onthouden dat wanneer je een de naam van een product wijzigt, een nieuw product toevoegt of een product verwijderd, dat je dan ook je extra tabel moet updaten. Normaal gesproken is het gewoon bad practice. Plus dat het queryen van een database veel meer overhead geeft dan code uitvoeren.quote:Op donderdag 1 januari 2009 22:20 schreef GlowMouse het volgende:
[..]
Waarom niet? Hoe denk je dat de verhouding opvragen/aanpassen is?
Ik snap niet wat je bedoelt? Het opbouwen van je dictioary kost lineair meer werk met het aantal producten dat je hebt.quote:Hoe denk je dat dat werkt als er, zeg, 10.000 producten zijn?
True. Dit pattern zie je wel vaker bij grote datacollecties.quote:Op donderdag 1 januari 2009 23:11 schreef Database het volgende:
[..]
Omdat dit een bron is van bugs. Je krijgt hier code van wat slecht onderhoudbaar is omdat je moet weten/onthouden dat wanneer je een de naam van een product wijzigt, een nieuw product toevoegt of een product verwijderd, dat je dan ook je extra tabel moet updaten. Normaal gesproken is het gewoon bad practice. Plus dat het queryen van een database veel meer overhead geeft dan code uitvoeren.
[..]
Ik snap niet wat je bedoelt? Het opbouwen van je dictioary kost lineair meer werk met het aantal producten dat je hebt.
Een specifiek item opzoeken gaat sneller als je de productnaam weet (omdat het aantal items wat je dan moet doorzoeken ongeveer 1/26ste is vergeleken bij een lange een dimensionale array). En aangezien je maar 1 keer opbouwt en waarschijnlijk meerdere keer opzoekt, zie ik - met alle respect - het probleem van 10.000 producten niet.
Het probleem is dat je dat lineair meer tijdrovende klusje op jouw manier bij elke request moet doen. Ten eerste moet de gebruiker langer wachten, ten tweede krijgt je server een probleem als je wat meer bezoekers krijgt.quote:Ik snap niet wat je bedoelt? Het opbouwen van je dictioary kost lineair meer werk met het aantal producten dat je hebt.
Een specifiek item opzoeken gaat sneller als je de productnaam weet (omdat het aantal items wat je dan moet doorzoeken ongeveer 1/26ste is vergeleken bij een lange een dimensionale array). En aangezien je maar 1 keer opbouwt en waarschijnlijk meerdere keer opzoekt, zie ik - met alle respect - het probleem van 10.000 producten niet.
In het kader van normalisatie is het idd niet handig om informatie dubbel op te slaan. Aan de andere kant is het ook weer niet zo dat je moet onthouden wat er allemaal moet gebeuren bij het aanpassen/toevoegen/verwijderen van een product. Daar kun je immers een leuke API voor schrijven. (En als je dat goed doet, kun je naderhand de hele opbouw aanpassen zonder elders in de code te moeten rommelen.)quote:Op donderdag 1 januari 2009 23:11 schreef Database het volgende:
[..]
Omdat dit een bron is van bugs. Je krijgt hier code van wat slecht onderhoudbaar is omdat je moet weten/onthouden dat wanneer je een de naam van een product wijzigt, een nieuw product toevoegt of een product verwijderd, dat je dan ook je extra tabel moet updaten. Normaal gesproken is het gewoon bad practice. Plus dat het queryen van een database veel meer overhead geeft dan code uitvoeren.
Ik denk dat het aantal zoekacties laag is. Het blijft wel PHP, dus aan het eind van het script is al je harde werk verloren gegaan. De kans dat je meer dan 1 keer gaat zoeken lijkt me dan niet zo groot. En als je een lijst wilt hebben van alle beginletters en van alle producten die met de letter C beginnen, dan is het wat overkill om alle producten uit de database te trekken.quote:[..]
Ik snap niet wat je bedoelt? Het opbouwen van je dictioary kost lineair meer werk met het aantal producten dat je hebt.
Een specifiek item opzoeken gaat sneller als je de productnaam weet (omdat het aantal items wat je dan moet doorzoeken ongeveer 1/26ste is vergeleken bij een lange een dimensionale array). En aangezien je maar 1 keer opbouwt en waarschijnlijk meerdere keer opzoekt, zie ik - met alle respect - het probleem van 10.000 producten niet.
Gebruiken die ook PHP/MySQL?quote:Op donderdag 1 januari 2009 23:26 schreef Scorpie het volgende:
[..]
True. Dit pattern zie je wel vaker bij grote datacollecties.
Dat lijkt mij inderdaad een goede oplossing:quote:Op donderdag 1 januari 2009 21:12 schreef Light het volgende:
[..]
Dat idd. En MySQL heeft ook een functie die het leven wat makkelijker kan maken.
1 |
Er zijn genoeg grote websites met flinke datasets die PHP en/of MySQL gebruiken, waaronder Facebook, Wikipedia, Yahoo!, Digg, Flickr, Google en YouTube.quote:
Want de elementen zijn nog niet uniek vóór array_unique()?quote:Op vrijdag 2 januari 2009 13:27 schreef Likkende_Lassie het volgende:
Die array met het resultaat van DISTINCT(SUBSTRING(name, 1, 1)), daar heb ik de functie array_unique(); over laten gaan.
Nee, zijn er alsnog mensen die lang op hun request wachten.quote:Ik kan ook eventueel deze array voor een aantal minuten laten cachen via memcached.
Als er geen array in memcached voor komt, dan kan ik hem laten genereren.... goed idee?
Caches moet je niet te moeilijk over doen, serialized array in de categorieëntabel in een extra kolom is het makkelijkste.quote:Op vrijdag 2 januari 2009 13:15 schreef Likkende_Lassie het volgende:
Cachen dus. Hoe zien jullie hier de tabel opbouw voor ?
Ik zelf dacht aan:
cat_ID, letter_ID.
Toch wel, dacht het niet uniek terug te krijgen..quote:Op vrijdag 2 januari 2009 13:30 schreef GlowMouse het volgende:
[..]
Want de elementen zijn nog niet uniek vóór array_unique()?
[..]
Nee, zijn er alsnog mensen die lang op hun request wachten.
[..]
Caches moet je niet te moeilijk over doen, serialized array in de categorieëntabel in een extra kolom is het makkelijkste.
Dat is opmerkelijk, waar denk je dat DISTINCT voor dient?quote:Op vrijdag 2 januari 2009 17:12 schreef Likkende_Lassie het volgende:
[..]
Toch wel, dacht het niet uniek terug te krijgen..
Dat weet ikquote:Op vrijdag 2 januari 2009 13:07 schreef Tijn het volgende:
[..]
Er zijn genoeg grote websites met flinke datasets die PHP en/of MySQL gebruiken, waaronder Facebook, Wikipedia, Yahoo!, Digg, Flickr, Google en YouTube.
Ja die doet hetzelfde, maar toen ik de code teste, en een print_r() deed, stonden er dubbele waardes in.quote:Op vrijdag 2 januari 2009 17:19 schreef GlowMouse het volgende:
[..]
Dat is opmerkelijk, waar denk je dat DISTINCT voor dient?
Voor hele grote datasets is dat misschien makkelijker, maar dan moet je echt huge datasets hebben. En 500k records vind ik daar niet onder vallen.quote:Op donderdag 1 januari 2009 23:44 schreef GlowMouse het volgende:
[..]
Het probleem is dat je dat lineair meer tijdrovende klusje op jouw manier bij elke request moet doen. Ten eerste moet de gebruiker langer wachten, ten tweede krijgt je server een probleem als je wat meer bezoekers krijgt.
Bij een request wil je gewoon snel de producten hebben die alleen met een bepaalde beginletter beginnen, eventueel ook alleen die op een bepaalde pagina voorkomen als je paginering gebruikt. Die andere producten wil je niet eerst in een arraytje stoppen, je wilt gewoon snel weten of ze bestaan. En als bij het groeien van je dataset de rekentijd lineair toeneemt, wil je gewoon dingen cachen als je op den duur ook daadwerkelijk veel producten krijgt, bijna onafhankelijk tegen welke prijs.
Ik zal je helpen: op een vrij vlotte server die een tabel met 1 miljoen records geheel in zijn geheugen heeft staan duurt de SELECT DISTINCT-methode 2.7 seconden en de PHP-methode zonder twijfel langer (je hebt het dan aan megabytes aan data die je databaseserver bij elke request uit moet spugen).quote:Op vrijdag 2 januari 2009 23:37 schreef Database het volgende:
[..]
Voor hele grote datasets is dat misschien makkelijker, maar dan moet je echt huge datasets hebben. En 500k records vind ik daar niet onder vallen.
Ik denk (maar weet niet zeker) dat het queryen van een database om een simpele tabel op te halen langzamer is (gemeten uit php, niet rechtstreeks op je (my)sql) dan het bouwen van zon array. Maar nogmaals ik heb al tijden geen php gedaan. In .net weet ik zeker dat het sneller is gezien het daar (bijna) native draait.
Ik zal zo wel even een testje draaien om te timen.
Je hebt idd gelijk, het ophalen van 10000 records is de helft korter vergeleken met het doen van 10.000 assignments.quote:Op vrijdag 2 januari 2009 23:44 schreef GlowMouse het volgende:
[..]
Ik zal je helpen: op een vrij vlotte server die een tabel met 1 miljoen records geheel in zijn geheugen heeft staan duurt de SELECT DISTINCT-methode 2.7 seconden en de PHP-methode zonder twijfel langer (je hebt het dan aan megabytes aan data die je databaseserver bij elke request uit moet spugen).
Creëren van die array kost dus ook 2.7 seconden (want de tijd die je daarna in PHP nodig hebt is verwaarloosbaar) en hoeft eenmalig. Daarna kun je hem direct gebruiken bij elke request; zelfs als je hem met een aparte query op moet halen zal dat minder dan 1/100ste van een seconde kosten, als hij in het geheugen staat zelfs minder dan 1/1000ste.
Welke 10.000 records haal je op, en welke assignments doe je? Arraytje steeds groter maken kost gewoon tijd, ook in .NET als je de grootte elke keer aan moet passen.quote:Op zaterdag 3 januari 2009 00:22 schreef Database het volgende:
[..]
Je hebt idd gelijk, het ophalen van 10000 records is de helft korter vergeleken met het doen van 10.000 assignments.
Query was:quote:Op zaterdag 3 januari 2009 00:28 schreef GlowMouse het volgende:
[..]
Welke 10.000 records haal je op, en welke assignments doe je? Arraytje steeds groter maken kost gewoon tijd, ook in .NET als je de grootte elke keer aan moet passen.
1 2 | a[j] = (byte)(j % 255); |
Memcached anyone?quote:Op vrijdag 2 januari 2009 00:12 schreef Light het volgende:
Het blijft wel PHP, dus aan het eind van het script is al je harde werk verloren gegaan.
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 | if (!empty($_POST)){ switch ($_POST["soort"]){ case "optellen": $getal3 = $_post["getal1"]+ $_post["getal2"]; echo $_post["getal1"]."+".$_post["getal2"]." = ".$getal3; echo("<br> <a href =\"".$_SERVER["PHP_SELF"] . "\">Nieuwe berekening uitvoeren.</a>"); break; case "aftrekken": $getal3 = $_post["getal1"]- $_post["getal2"]; echo $_post["getal1"]."+".$_post["getal2"]." = ".$getal3; echo("<br> <a href =\"".$_SERVER["PHP_SELF"] . "\">Nieuwe berekening uitvoeren.</a>"); break; case "delen": $getal3 = $_post["getal1"]+ $_post["getal2"]; echo $_post["getal1"]."+".$_post["getal2"]." = ".$getal3; echo("<br> <a href =\"".$_SERVER["PHP_SELF"] . "\">Nieuwe berekening uitvoeren.</a>"); break; case "vermenigvuldigen": $getal3 = $_post["getal1"]+ $_post["getal2"]; echo $_post["getal1"]."+".$_post["getal2"]." = ".$getal3; echo("<br> <a href =\"".$_SERVER["PHP_SELF"] . "\">Nieuwe berekening uitvoeren.</a>"); break; default: echo("Je hebt niks ingevuld!"); echo("<br> <a href =\"".$_SERVER["PHP_SELF"] . "\">Nieuwe berekening uitvoeren.</a>"); break; } }else{ ?> <html> <head> <title>Rekenmachientje 2e poging</title> </head> <body> <FORM ACTION="<?php echo($_SERVER["PHP_SELF"]);?>" method="post"> Getal1 <input type="text" name="getal1"><br> Getal2 <input type="text" name="getal2" ><br> <INPUT TYPE="radio" NAME="soort" VALUE="optellen">Optellen(+) <INPUT TYPE="radio" NAME="soort" VALUE="aftrekken">Aftrekken(-) <INPUT TYPE="radio" NAME="soort" VALUE="delen">Delen(/) <INPUT TYPE="radio" NAME="soort" VALUE="vermenigvuldigen">Vermenigvuldigen(*) <BR> <INPUT TYPE="submit" name ="Submit" VALUE="Verzenden"> <INPUT TYPE="reset" name="Reset" VALUE="Leegmaken"> </FORM> <?php } ?> |
Moet je die wel hebben draaien en is er nog steeds één request die er lang over doet.quote:
Wat bedoel je?quote:Op zaterdag 3 januari 2009 17:24 schreef cablegunmaster het volgende:
[ code verwijderd ]
hoe var dump ik dit?
ik krijg de variable niet goed van getal1 en getal 2quote:Op zaterdag 3 januari 2009 17:31 schreef GlowMouse het volgende:
[..]
Moet je die wel hebben draaien en is er nog steeds één request die er lang over doet.
[..]
Wat bedoel je?
quote:Op zaterdag 3 januari 2009 18:08 schreef GlowMouse het volgende:
De variabele heet dan ook niet $post of $_post maar $_POST. En de functie niet vardump maar var_dump.
Dat geldt voor iedere extensie natuurlijk. Wil je afbeeldingen resizen, dan zul je ook GD ofzo moeten hebben draaien. En wil je json_encode gebruiken in PHP < 5.2.3, dan zul je dat ook moeten installeren.quote:Op zaterdag 3 januari 2009 17:31 schreef GlowMouse het volgende:
Moet je die wel hebben draaien en is er nog steeds één request die er lang over doet.
En wil je PHP gebruiken...Helaas krijg je bij weinig hosters de beschikking over memcached. Bij shared hosting ben ik het nog nooit tegengekomen, waarschijnlijk omdat er geen authenticatie is.quote:Op zaterdag 3 januari 2009 20:12 schreef Roy_T het volgende:
[..]
Dat geldt voor iedere extensie natuurlijk. Wil je afbeeldingen resizen, dan zul je ook GD ofzo moeten hebben draaien. En wil je json_encode gebruiken in PHP < 5.2.3, dan zul je dat ook moeten installeren.
Dat eerder cachen werd eerder al gesuggereerd als oplossing, alleen niet icm memcached. Memcached is hiervoor niet zo heel erg goed omdat het zomaar dingen weg kan mikken als het geheugen vol zit. En als je al MySQL hebt, waarom zou je dat niet gebruiken? Voor de performance hoef je het niet te laten.quote:Je kunt de cache overigens prima vullen wanneer er een product wordt toegevoegd bijvoorbeeld, zodat er nooit iemand hoeft te wachten op een lange request. Ik heb verschillende apps gebouwd die met een cron eenmaal per dag kijken wat er nieuw is, dat in memcached opslaan en klaar.
Dat is waar. Ik werk nooit binnen shared hosting omgevingen, dus daar had ik niet aan gedachtquote:Op zaterdag 3 januari 2009 20:25 schreef GlowMouse het volgende:
En wil je PHP gebruiken...Helaas krijg je bij weinig hosters de beschikking over memcached. Bij shared hosting ben ik het nog nooit tegengekomen, waarschijnlijk omdat er geen authenticatie is.
Dat ligt helemaal aan de architectuur uiteraard. In het artikel waar je naar verwijst hebben ze het over een cluster van databases waar de data sharded wordt opgeslagen. Daar hebben de meesten uiteraard ook geen mogelijkheid toe.quote:Dat eerder cachen werd eerder al gesuggereerd als oplossing, alleen niet icm memcached. Memcached is hiervoor niet zo heel erg goed omdat het zomaar dingen weg kan mikken als het geheugen vol zit. En als je al MySQL hebt, waarom zou je dat niet gebruiken? Voor de performance hoef je het niet te laten.
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 | error_reporting(E_ALL); mysql_connect("localhost", "root", "")or die("mysql_error"); mysql_select_db("opdracht1")or die("mysql_error"); if(!empty($_POST)) { // username and password sent from form $myusername=$_POST['username']; $mypassword=$_POST['wachtwoord']; // To protect MySQL injection $myusername = stripslashes($myusername); $mypassword = stripslashes($mypassword); $myusername = mysql_real_escape_string($myusername); $mypassword = mysql_real_escape_string($mypassword); $query = "SELECT * FROM members WHERE username='$myusername' and password='$mypassword'"; $result = mysql_query($query); if($result == 1) { $user = $_POST["username"]; $wachtwoord = $_POST["wachtwoord"]; $_SESSION['username'] = $user; $_SESSION['wachtwoord'] = $wachtwoord; header("Location: beveiligd.php"); } else { echo "U heeft geen goede combinatie van emailadres en wachtwoord gebruikt."; } } else { echo "U heeft de pagina verkeerd opgeroepen."; } ?> |
quote:Return Values
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
Je kunt die resource weer aan een andere functie voeren, zoals deze.quote:Op zondag 4 januari 2009 12:59 schreef Kerol het volgende:
En hoe kan ik dan ervoor zorgen dat de resultaten wel in een rij komen te staan? Met mysql_fetch_row?
Jij vraagt alle kolommen op uit de tabel members (via SELECT * ), dus in ieder geval krijg je een gebruikersnaam en wachtwoord terug die je toch al kent. Heb je niks aan dus.quote:Op zondag 4 januari 2009 13:08 schreef Kerol het volgende:
Wat bedoel je met zoveel gegevens? Ik vraag nu alleen aan de database of de username en password zich bevinden in de database.
Verder niets toch? Of is dat niet wat je bedoelt..
Dat klopt, maar je vraagt veel meer informatie op dan je nodig hebt.quote:Op zondag 4 januari 2009 13:14 schreef Kerol het volgende:
Hij controleert nu toch juist of die username en wachtwoord in de database staan zodat de gebruiker kan inloggen?
1 2 3 | "SELECT COUNT(*) FROM members WHERE username='$myusername' and password='$mypassword'"; ?> |
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 | error_reporting(E_ALL); mysql_connect("localhost", "root", "")or die("mysql_error"); mysql_select_db("opdracht1")or die("mysql_error"); if(!empty($_POST)) { // username and password sent from form $myusername=$_POST['username']; $mypassword=$_POST['wachtwoord']; // To protect MySQL injection (more detail about MySQL injection) $myusername = stripslashes($myusername); $mypassword = stripslashes($mypassword); $myusername = mysql_real_escape_string($myusername); $mypassword = mysql_real_escape_string($mypassword); $query = "SELECT COUNT(*) FROM members WHERE username='$myusername' and password='$mypassword'"; $result = mysql_query($query); if($result == 1) { $user = $_POST["username"]; $wachtwoord = $_POST["wachtwoord"]; $_SESSION['username'] = $user; $_SESSION['wachtwoord'] = $wachtwoord; header("Location: beveiligd.php"); } else { echo "U heeft geen goede combinatie van emailadres en wachtwoord gebruikt."; } } else { echo "U heeft de pagina verkeerd opgeroepen."; } ?> |
1 2 3 4 5 6 7 | foreach ($_SESSION['user_shop']['items'] AS $item_ID => $key){ if (is_numeric($item_ID)){ $extra_Q .= $item_ID.','; } } ?> |
1 |
Ik zie geen ORDER BY. En zonder ORDER BY kun je de rijen in elke willekeurige volgorde terugkrijgen. De volgorde waarin je id's in een WHERE opgeeft wordt niet gebruikt voor de sortering.quote:Op zondag 4 januari 2009 14:00 schreef jeroen2497 het volgende:
- Er wordt niet gesorteerd op de volgorde van $extra_Q.
In $result staat nog steeds een resource, en niet de waarde voor count(*).quote:Op zondag 4 januari 2009 13:59 schreef Kerol het volgende:
Ik krijg nog steeds aldoor de melding: 'U heeft geen goede combinatie van emailadres en wachtwoord gebruikt. '
[ code verwijderd ]
Wat doe ik nu nog verkeerd?
Maar normaalgesproken is het toch zo dat als ik een serie ID's opgeef, hij ze in de opgegeven volgorde laat zien? Want hier kan ik volgens mij geen order by voor gebruiken?quote:Op zondag 4 januari 2009 14:07 schreef GlowMouse het volgende:
[..]
Ik zie geen ORDER BY.
[..]
In $result staat nog steeds een resource, en niet de waarde voor count(*).
mysql_query geeft niet het resultaat van count terug, maar een resultset. Je moet de eerste row nog fetchen met $row = mysql_fetch_row($result) en dan $row[0] == 1 checken.quote:Op zondag 4 januari 2009 13:59 schreef Kerol het volgende:
Ik krijg nog steeds aldoor de melding: 'U heeft geen goede combinatie van emailadres en wachtwoord gebruikt. '
[ code verwijderd ]
Wat doe ik nu nog verkeerd?
Kan ik anders niet de array's naast elkaar laten lopen ofzo?quote:Op zondag 4 januari 2009 14:08 schreef jeroen2497 het volgende:
[..]
Maar normaalgesproken is het toch zo dat als ik een serie ID's opgeef, hij ze in de opgegeven volgorde laat zien? Want hier kan ik volgens mij geen order by voor gebruiken?
Mijn edit gezien?quote:Op zondag 4 januari 2009 15:04 schreef jeroen2497 het volgende:
[..]
Kan ik anders niet de array's naast elkaar laten lopen ofzo?
Had ik niet gezienquote:Op zondag 4 januari 2009 15:25 schreef GlowMouse het volgende:
[..]
Mijn edit gezien?
Ik weet niet wat je bedoelt, maar als de volgorde zo belangrijk is, zul je dat later in PHP moeten regelen.
Je krijgt ze in de volgorde waarin MySQL ze aanlevert, dus die sla je op in een array met als key dat ID. Daarna loop je met een foreach door de array waarin de ID's op juiste volgorde staan en vraag je aan de hand van dat ID weer de bijbehorende tijdelijk opgeslagen MySQL-resultaatrij op.quote:Op zondag 4 januari 2009 15:33 schreef jeroen2497 het volgende:
[..]
Hoe vertel ik PHP dat er een bepaalde volgorde moet worden aangehouden?
1 2 3 | <input type="text" value="iets met "quotes" hier"> ?> |
Je zou het zo kunnen doen:quote:Op zondag 4 januari 2009 20:25 schreef wonderer het volgende:
't Is meer een html-ding, maar goed.
Als ik een waarde uit een database haal dit ik in een tekstbalk wil zetten, en daar staan quotes in, dan gaat het op html gebied mis.
[ code verwijderd ]
Hoe fix ik dat? Is " de enige optie?
1 |
htmlentities() is wel de nettere oplossing van de twee.quote:Op zondag 4 januari 2009 20:30 schreef Tijn het volgende:
[..]
Je zou het zo kunnen doen:
[ code verwijderd ]
Met htmlentities() convert PHP de quotes naar de HTML-code (en alle andere speciale karakters waarvoor een HTML-code bestaat). Dan heb je dit probleem niet meer.
Je zou ook de functie addslashes() kunnen gebruiken, dan worden de quotes geescaped met een slash en voorkom je dit probleem ook.
Is htmlspecialchars() misschien wat je zoekt? Die zet maar een kleine subset van de hele HTML-specialchars set om.quote:Op zondag 4 januari 2009 21:17 schreef wonderer het volgende:
Maar ik wil alleen de quotes doen. De rest wordt al voor gezorgd namelijk. En met htmlentities wordt het een zootje.
Hoe had je het toen gedaan?quote:Slashes werkt niet in het htmlgedeelte (tenminste, toen ik het probeerde kapte hij het alsnog af na de quote).
Ik heb het net ff zelf geprobeerd en blijkbaar kun je in HTML geen slashes escapen. M'n browser print gewoon de slash en daarna stopt 'ie. Dus dan heeft addslashes() ook geen zin.quote:Op zondag 4 januari 2009 21:55 schreef wonderer het volgende:
Gewoon met addslashes();
Nee, dat kan niet. Je zult de HTML-code of een ander type quotes moeten gebruiken.quote:Ik vind het zo raar, je zou toch ook gewoon een tekstbalk moeten kunnen maken in puur html met een quote erin?
Maar dan hebben bezoekers zonder Javascript dus een niet-werkende site?quote:Op zondag 4 januari 2009 22:37 schreef wonderer het volgende:
Dom. Nou ja, dan weet ik dat. Heb het nu "opgelost" met javascript omdat ik daar toch al mee bezig was, maar als het nog een keer voorkomt, zal ik het onthouden.
Ja. Maar dat hadden ze sowieso alquote:Op zondag 4 januari 2009 22:43 schreef Tijn het volgende:
[..]
Maar dan hebben bezoekers zonder Javascript dus een niet-werkende site?
Dus nu valideert je HTML niet meer. Lekker handig debuggenquote:Op zondag 4 januari 2009 22:37 schreef wonderer het volgende:
Dom. Nou ja, dan weet ik dat. Heb het nu "opgelost" met javascript omdat ik daar toch al mee bezig was, maar als het nog een keer voorkomt, zal ik het onthouden.
Ik weet hetquote:Op zondag 4 januari 2009 23:50 schreef Roy_T het volgende:
[..]
Dus nu valideert je HTML niet meer. Lekker handig debuggen
Maar zoveel moeite is het toch niet om htmlspecialchars() te gebruiken?quote:Op zondag 4 januari 2009 23:53 schreef wonderer het volgende:
Ik weet het
Ik ben er ook niet blij mee, maar het is een site die maar door twee personen gebruikt wordt (ik en iemand anders) dus HEEL erg is het niet.
Op de een of andere manier werkte het niet (je zag " staan in plaats van ") en ik heb tot nu toe geen tijd/zin gehad om uit te gaan zoeken waarom.quote:Op maandag 5 januari 2009 00:29 schreef Roy_T het volgende:
[..]
Maar zoveel moeite is het toch niet om htmlspecialchars() te gebruiken?
Kijk eens in je source. Ik gok op dubbel escapen, waardoor er & amp;quot; komt te staan.quote:Op maandag 5 januari 2009 00:44 schreef wonderer het volgende:
Op de een of andere manier werkte het niet (je zag " staan in plaats van ") en ik heb tot nu toe geen tijd/zin gehad om uit te gaan zoeken waarom.
quote:Op maandag 5 januari 2009 16:45 schreef Flaccid het volgende:
Ik wil snel een lijstje van alle tijden tussen 0:00 en 24:00, met een half uur of kwartier er tussen
0:00
0:30
1:00
enz. Hoe kan ik dit makkelijk doen?
0:00
0:15
0:30
0:45
1:00
enz
1 2 3 4 5 6 7 8 9 10 11 | $teller = 0; for($i = 0; $i < 24; $i++) { for($j = 0; $j < 60; $ j+= 15) //of +=30 { $val[$teller] = "$i:$j"; $teller++; } } ?> |
1 2 3 4 5 6 7 8 | $val = array(); for($i=0; $i<24; $i++) { for($j=0; $j<60; $j+= 15) { $val[] = sprintf('%02.0f:%02.0f', $i, $j); } } ?> |
Maar $i en $j zijn integers, geen floats. Dus kun je %02d gebruiken ipv %02.0f. Korter en duidelijkerquote:Op maandag 5 januari 2009 21:25 schreef GlowMouse het volgende:
Met sprintf kun je voorloopnullen toevoegen.
[ code verwijderd ]
1 2 3 4 5 | "<br>".$variabele."<br>" // of "<br>$variabele<br>" ?> |
Allebei even goed en voor zover ik weet ook even snel, maar gebruik in het eerste geval dan wel enkele quotes ipv dubbele quotes, aangezien dubbele quotes geen nut hebben wanneer je er geen $vars in zetquote:Op dinsdag 6 januari 2009 01:25 schreef cablegunmaster het volgende:
[ code verwijderd ]
welke is beter te gebruiken en waarom? hele discussie welke je kan gebruiken.
mij is de 1e geleerd. alleen het kan ook met de 2e waarom ? heeft het voordelen nadelen?
Ik dacht dat enkele quotes sneller zijn dan dubbele omdat PHP de inhoud van de quotes dan niet hoeft te parsen.quote:Op dinsdag 6 januari 2009 09:26 schreef Roy_T het volgende:
[..]
Allebei even goed en voor zover ik weet ook even snel, maar gebruik in het eerste geval dan wel enkele quotes ipv dubbele quotes, aangezien dubbele quotes geen nut hebben wanneer je er geen $vars in zet
Dat bedoelde ik met "maar gebruik in het eerste geval dan wel enkele quotes ipv dubbele quotes" (iets te impliciet misschien). Het klopt inderdaad dat enkele quotes sneller zijn. Het scheelt niet veel en zorgt niet voor een trage app, maar in het kader van "nette code" moet je imo enkele en dubbele quotes gebruiken waar ze voor verzonnen zijn (dus alleen dubbele quotes wanneer er iets in staat wat geparsed moet worden, zoals een $var of /n newline ofzo).quote:Op dinsdag 6 januari 2009 09:30 schreef Tijn het volgende:
[..]
Ik dacht dat enkele quotes sneller zijn dan dubbele omdat PHP de inhoud van de quotes dan niet hoeft te parsen.
Ik denk dat het eerste script waarbij het een merkbaar verschil in snelheid oplevert nog in deze reeks gepost moet worden.quote:Op dinsdag 6 januari 2009 09:30 schreef Tijn het volgende:
[..]
Ik dacht dat enkele quotes sneller zijn dan dubbele omdat PHP de inhoud van de quotes dan niet hoeft te parsen.
quote:Op dinsdag 6 januari 2009 01:25 schreef cablegunmaster het volgende:
[ code verwijderd ]
welke is beter te gebruiken en waarom? hele discussie welke je kan gebruiken.
mij is de 1e geleerd. alleen het kan ook met de 2e waarom ? heeft het voordelen nadelen?
Nee, dat vind jijquote:
1 2 3 | echo $var1 . ' tekst ' . $var2 . ' tekst... '; ?> |
1 2 3 | echo "$var1 tekst $var2 tekst" ?> |
IDE`s vinden dat ook veul mooier, kijk maar naar de kleurverschillenquote:Op dinsdag 6 januari 2009 10:58 schreef Roy_T het volgende:
[..]
Nee, dat vind jij
Ik vind het ranzig om het door die functie te gooien "voor de mooi" (en zelfs dat niet imo), en daarmee volledig nutteloze overhead te creëren. Persoonlijk gebruik ik ook altijd 'string' . $var . 'string' voor de leesbaarheid, omdat je dan in één oogopslag ziet waar een $var staat. Maar ieder z'n meug natuurlijk
NotePad++ vindt het inderdaad niet zo fijn om alles maar in stringvorm te parsen.quote:Op dinsdag 6 januari 2009 11:14 schreef Scorpie het volgende:
[..]
IDE`s vinden dat ook veul mooier, kijk maar naar de kleurverschillen
Dan is er nog altijd het argument dat je voor het typen van ' geen shift nodig hebt, en voor het typen van " wel. Gemak dient de mens, en ik ga niet onnodig " gebruiken als ' volstaat.quote:Op dinsdag 6 januari 2009 10:41 schreef SuperRembo het volgende:
[..]
Ik denk dat het eerste script waarbij het een merkbaar verschil in snelheid oplevert nog in deze reeks gepost moet worden.
Klopt, al zou je IDE's en code editors nog wel zo kunnen tweaken dat 'ie een $var binnen dubbele quotes een ander kleurtje geeft. En het is een stukje gewenning uit andere talen, zoals Tuvai al aangeeft. Ik programmeer niet alleen in PHP en ben gewend dat je een $var niet zomaar in een string kan knallen. Maar PHP geeft ook weinig om data types uiteraard (rekenen met stringsquote:Op dinsdag 6 januari 2009 11:14 schreef Scorpie het volgende:
IDE`s vinden dat ook veul mooier, kijk maar naar de kleurverschillen![]()
1 2 3 4 | $var = 'omfg wtf bbq'; echo '$var = ' . $var . 'hehe'; ?> |
1 2 3 4 | $var = 'omfg wtf bbq'; echo "$var = $varhehe"; ?> |
Eenschquote:Op dinsdag 6 januari 2009 11:22 schreef Tuvai.net het volgende:
Sowieso voorkom je voor jezelf als programmeur zo onnodige fouten. Ik had laatst nog iemand op MSN die me vroeg waarom zijn script 'niks deed outputten'. Kwam het op het volgende neer:
[ code verwijderd ]
Wat had deze meneer echter gedaan:
[ code verwijderd ]
Oftewel, PHP gaat zoeken naar variabele $varhehe en vindt uiteraard niks. Ik vind het gewoon een slordige gewoonte, alles maar als stringetjes te parsen. PHP zou dat eigenlijk niet moeten toelaten, dat doet het gros van de andere 'grote' programmeertalen ook niet. Ik zie het derhalve als een soort van automatische foutcorrectie voor slechte programmeurs.
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 | error_reporting(E_ALL); mysql_connect("localhost", "root", "")or die("mysql_error"); mysql_select_db("opdracht1")or die("mysql_error"); $username = $_POST['username']; if (isset($_POST['submit'])) { $query = "SELECT `vraag` FROM `members` WHERE `username` = '".$username."'"; $result = mysql_query($query); $rowcount= mysql_num_rows($result); if ($rowcount > 0) { echo "Je geheime vraag: '".$result."'"; <tr> <td> <input type="text" name="antwoord"> </td> </tr> <tr> </td> <input type="submit" name="geefww" value="Geef mijn wachtwoord!"; } else { echo "Deze gebruikersnaam is niet bekend bij ons."; } } else { echo "Gelieve wel een username in te vullen"; } ?> |
Eens. Volgens mij kan het in de meeste andere talen ook niet, omdat ze niet eisen dat een variabele met een bepaald teken (bijvoorbeeld $) begint. En als je variabelenaam gewoon een aantal letters is, zoek dan de variabele maar eens tussen de andere letters.quote:Op dinsdag 6 januari 2009 11:22 schreef Tuvai.net het volgende:
Oftewel, PHP gaat zoeken naar variabele $varhehe en vindt uiteraard niks. Ik vind het gewoon een slordige gewoonte, alles maar als stringetjes te parsen. PHP zou dat eigenlijk niet moeten toelaten, dat doet het gros van de andere 'grote' programmeertalen ook niet. Ik zie het derhalve als een soort van automatische foutcorrectie voor slechte programmeurs.
1) $resource is gewoon jouw uitvoer van de functie mysql_query(). Je doet verder nog niks met deze uitvoer/query. zoek eens op mysql_fetch_array() of mysql_fetch_assoc().quote:Op dinsdag 6 januari 2009 12:07 schreef Kerol het volgende:
Ik wil de geheime vraag van een gebruiker tonen als deze zijn wachtwoord vergeten is.
Probleem is dat ik elke keer Je geheime vraag: 'Resource id #3' als antwoord krijg en niet de échte geheime vraag zoals die in de database staat.
Waarom krijg ik Resource id #3????
[ code verwijderd ]
Er staan trouwens wel ?> en <?php om dat html heen alleen verwijderd FOK dat op de een of andere manier.
Dat los je gewoon op dmv ${var}hehe of zoals php het ook toestaat iirc: {$var}hehe.quote:Op dinsdag 6 januari 2009 11:22 schreef Tuvai.net het volgende:
Sowieso voorkom je voor jezelf als programmeur zo onnodige fouten. Ik had laatst nog iemand op MSN die me vroeg waarom zijn script 'niks deed outputten'. Kwam het op het volgende neer:
[ code verwijderd ]
Wat had deze meneer echter gedaan:
[ code verwijderd ]
Oftewel, PHP gaat zoeken naar variabele $varhehe en vindt uiteraard niks. Ik vind het gewoon een slordige gewoonte, alles maar als stringetjes te parsen. PHP zou dat eigenlijk niet moeten toelaten, dat doet het gros van de andere 'grote' programmeertalen ook niet.
Vooral dit is een goede Kerol. Want wat zal er gebeuren als iemand als username "';DELETE FROM `members` WHERE 1 OR `username` = '" invult?quote:Op dinsdag 6 januari 2009 12:19 schreef Tuvai.net het volgende:
3) Je script is erg vatbaar voor SQL Injection; je gebruikt immers rechtstreeks een variabele die gebruik maakt van een $_POST waarde zonder hier ook maar enige controle op uit te voeren.
1 2 | DELETE FROM `members` WHERE 1 OR `username` = '' |
Lees de documentatie bij mysql_query eens goedquote:Op dinsdag 6 januari 2009 12:57 schreef Roy_T het volgende:
[..]
Vooral dit is een goede Kerol. Want wat zal er gebeuren als iemand als username "';DELETE FROM `members` WHERE 1 OR `username` = '" invult?
Juist, dan krijg je dit...
[ code verwijderd ]
En weg zijn al je members
Detailsquote:Op dinsdag 6 januari 2009 12:58 schreef GlowMouse het volgende:
Lees de documentatie bij mysql_query eens goed
Helaas zijn er teveel hosts die dat niet ondersteunen, net als mysqli.quote:Op dinsdag 6 januari 2009 14:53 schreef slacker_nl het volgende:
Daarom gebruik je PDO...
Dat is leuk gezegd, maar je hebt niet altijd invloed op het platform waar je applicatie op wordt geïnstalleerd.quote:Op dinsdag 6 januari 2009 14:56 schreef slacker_nl het volgende:
Dan ga je weg bij die hosters, maak duidelijk dat je weggaat omdat ze die features niet ondersteunen en dan gaan ze vanzelf wel een keer die meuk ondersteunen.
Jij hebt het steeds over hosters, Tijn over platformen. Een hoster host wel op een bepaald platform, maar een platform hoeft nog niet bij een host te horen. Ik heb bijvoorbeeld een klant die naast enkele honderden servers met PHP5 ook nog honderden bakken heeft met PHP4, puur omdat er ook legacy spul op draait (en zo nog meer redenen). Die hebben uiteraard geen host, maar een eigen team van systeembeheerders met daarboven weer architecten. Ik kan nog zo graag PHP5 willen, maar als ik daar op een cluster met PHP4 kom dan breng ik er niets tegeninquote:Op dinsdag 6 januari 2009 16:35 schreef slacker_nl het volgende:
Dat betekend overigens wel dat je hoster geen PHP 5.x draait. Das alleen al reden genoeg om naar een andere hoster over te stappen of te adviseren om te zoeken naar een andere hoster.
Geen idee, ik ben niet zo goed in regular expressions. Of zit ik helemaal fout met dat 'ie REGEXP moet gebruiken?quote:
met REGEXP in MySQLquote:Op donderdag 8 januari 2009 11:17 schreef Chandler het volgende:
Weet iemand zo even uit zijn mouw te schudden hoe je middels een query (mysql) gebruikers kunt vinden waarbij de gebruikersnamen beginnen met een cijfer (0-9). Met letters lukt simpel LIKE 'B%' maar ik wil nu alle gebruikers die gebruikersnamen hebben met 0-9
Werkt idd perfect, had zelf een andere versie met % maar dat werkte natuurlijk nietquote:
Nee dus.quote:Op donderdag 8 januari 2009 11:36 schreef GlowMouse het volgende:
Je kunt denk ik ook WHERE veld BETWEEN '0' and '9' gebruiken.
'9adsf' gaat foutquote:
Ik zou voor het eerste gaan om de volgende reden:quote:Op donderdag 8 januari 2009 07:29 schreef jeroen2497 het volgende:
Ik heb een vraag mbt de bouw van een webshop.
Hoe zouden jullie de data van een bestelling in de database opnemen?
Een tabel met;
- klant_nummer, product_nummer, prijs
- klant_nummer, product_nummer, product_naam, product_gewicht, prijs
Het voordeel van optie 2 is dat als er een productnaam wordt gewijzigd (of zelfs verwijderd), dat alle info wel in de bestelling blijft staan.
Het gaat om flink wat bestellingen per dag.
Graag jullie idee hier over!!
Ja, dat doe ik inderdaad ookquote:Op donderdag 8 januari 2009 13:43 schreef Roy_T het volgende:
Ik zou het wel redundant opslaan, en dezelfde tabel gebruiken voor "bestellingen" en "facturen". Het is namelijk precies hetzelfde, alleen is bij de ene "payed" false en bij de andere true.
Waarom zou je de prijs aan willen passen nadat een product besteld is maar nog niet geleverd? Stel dat je iets bestelt voor 10 euro, 10 minuten later maakt de admin dat product 20 euro en wanneer de bestelling wordt afgehandeld is de klant opeens het dubbele kwijt.
Data redundant opslaan lijkt me in dit geval een duidelijk voordeel hebben: het is 100% gelijk aan het moment waarop er besteld werd.
Ik zou overigens wel een aparte tabel maken voor orders (dus bestellingen), met hierin het klantnummer, afleveradres, status, etc. en een tabel met order_items (ofzo) die weer aan orders hangen.
Dat dus. Bestellingen != Facturen, en daar moet je in je database al rekening mee hebben gehouden.quote:Op donderdag 8 januari 2009 13:43 schreef Roy_T het volgende:
Ik zou het wel redundant opslaan, en dezelfde tabel gebruiken voor "bestellingen" en "facturen". Het is namelijk precies hetzelfde, alleen is bij de ene "payed" false en bij de andere true.
Waarom zou je de prijs aan willen passen nadat een product besteld is maar nog niet geleverd? Stel dat je iets bestelt voor 10 euro, 10 minuten later maakt de admin dat product 20 euro en wanneer de bestelling wordt afgehandeld is de klant opeens het dubbele kwijt.
Data redundant opslaan lijkt me in dit geval een duidelijk voordeel hebben: het is 100% gelijk aan het moment waarop er besteld werd.
Ik zou overigens wel een aparte tabel maken voor orders (dus bestellingen), met hierin het klantnummer, afleveradres, status, etc. en een tabel met order_items (ofzo) die weer aan orders hangen.
Besteld (dus in je winkelwagen) maar nog niet betaald, dan betaal je gewoon de actuele prijs. Volgens mij is dat gebruikelijk. Kijk maar naar amazon of bol. Als iets in je winkelwagen zit, maar nog niet betaald is.quote:Op donderdag 8 januari 2009 13:43 schreef Roy_T het volgende:
Waarom zou je de prijs aan willen passen nadat een product besteld is maar nog niet geleverd? Stel dat je iets bestelt voor 10 euro, 10 minuten later maakt de admin dat product 20 euro en wanneer de bestelling wordt afgehandeld is de klant opeens het dubbele kwijt.
En hoe wil jij de bestelgeschiedenis van iemand gaan bijhouden dan met optie 1?quote:Op donderdag 8 januari 2009 15:41 schreef Database het volgende:
[..]
Besteld (dus in je winkelwagen) maar nog niet betaald, dan betaal je gewoon de actuele prijs. Volgens mij is dat gebruikelijk. Kijk maar naar amazon of bol. Als iets in je winkelwagen zit, maar nog niet betaald is.
Daarnaast is een factuur niet hetzelfde als een bestelling wat betaald is aangezien een factuuradres anders kan zijn dan het bezorgadres.
Sterker nog, real life is een bestelbon ook geen factuur en als je gaat modelleren wil je dat soort nuances ook in je model hebben. En tuurlijk er zijn altijd wel hacks te bedenken om twee verschillende beestjes een te maken (of andersom), maar omdat het kan en omdat het werkt wil het nog niet zeggen dat het goed is.
Stel je gaat naar een winkel en plaatst een bestelling wat je over 5 dagen op kan komen halen. Je komt na 5 dagen je bestelling halen. De winkelier kan voor zijn eigen gemak en voor het milieu geen factuur maken maar jou bestelbon ondertekenen en erbij zetten dat het betaald is. Dat gebeurt toch ook niet..? En fraudegevoeligheid is echt niet de belangrijkste reden.
Een persoon heeft 0 of meer facturen, een factuur heeft 1 of meer producten. Tadaamquote:Op donderdag 8 januari 2009 15:44 schreef Scorpie het volgende:
[..]
En hoe wil jij de bestelgeschiedenis van iemand gaan bijhouden dan met optie 1?
Dan is een "bestelling" voor ons beiden iets anders. Ik zou pas een "bestelling" van iets maken wanneer de order geplaatst wordt, en het tot die tijd alleen in de sessie of tijdelijk in een aparte tabel ofzo zetten.quote:Op donderdag 8 januari 2009 15:41 schreef Database het volgende:
Besteld (dus in je winkelwagen) maar nog niet betaald, dan betaal je gewoon de actuele prijs. Volgens mij is dat gebruikelijk. Kijk maar naar amazon of bol. Als iets in je winkelwagen zit, maar nog niet betaald is.
Daarnaast is een factuur niet hetzelfde als een bestelling wat betaald is aangezien een factuuradres anders kan zijn dan het bezorgadres.
Ik vind het geen hack. Je kunt wel alles naar real life willen modeleren, maar soms (en imo in dit geval) kun je hierbij gelukkig dingen die in real life niet kunnen. Jij hebt het over bestelbonnen en facturen, ik gewoon over "orders". En die zijn betaald of niet betaald (of hebben een andere status, zoals "wacht op akkoord" of whatever), en op basis van die status kun je een bestelbon, afleverbon, retourbon, RMA-formulier of een factuur genereren. Dat je in de supermarkt een bonnetje krijgt, wil niet zeggen dat er in hun boekhouding allemaal "bonnetjes" zitten. Dat zijn gewoon verkopen/orders, waarbij het bonnetje één van de vele mogelijke representaties van die order is.quote:Sterker nog, real life is een bestelbon ook geen factuur en als je gaat modelleren wil je dat soort nuances ook in je model hebben. En tuurlijk er zijn altijd wel hacks te bedenken om twee verschillende beestjes een te maken (of andersom), maar omdat het kan en omdat het werkt wil het nog niet zeggen dat het goed is.
Bestelling_nr , Klant_nummer, Productnummer, Product_naam,product_gewicht, Prijsquote:Op donderdag 8 januari 2009 07:29 schreef jeroen2497 het volgende:
Ik heb een vraag mbt de bouw van een webshop.
Hoe zouden jullie de data van een bestelling in de database opnemen?
Een tabel met;
- klant_nummer, product_nummer, prijs
- klant_nummer, product_nummer, product_naam, product_gewicht, prijs
Het voordeel van optie 2 is dat als er een productnaam wordt gewijzigd (of zelfs verwijderd), dat alle info wel in de bestelling blijft staan.
Het gaat om flink wat bestellingen per dag.
Graag jullie idee hier over!!
orders kunnen ook anders worden weergegeven.quote:orders (order_id, klant_id, opmerkingen, timestamp)
orders_items, (item_id, order_id, naam, prijs, opmerkingen)
orders_gegevens (order_ID, factuur_adres, leverings_adres)
PHP kan dat nietquote:Op vrijdag 9 januari 2009 10:02 schreef LordNemephis het volgende:
Is er ook iemand die tips heeft m.b.t. uploaden en converteren naar .FLV van filmpjes m.b.v. PHP? Ik las op het grote internet dat Ffmpeg daarvoor het meest geschikt zou zijn - iemand die dat kan bevestigen?
Heb dat nog nooit gedaan en wil daar toch es mee aan de slag
Ik weet dat PHP op zichzelf geen video's kan converteren. Ik zocht idd naar een OpenSource oplossing (lees: graties). Ffmpeg is dus wel een aanrader voor mij?quote:Op vrijdag 9 januari 2009 11:02 schreef Tijn het volgende:
FFMpeg is niet het beste programma om video's mee te recoden, maar het is in elk geval wel gratis en ondersteunt veel formaten. Je kunt het vanuit PHP makkelijk aanroepen omdat het een command line programma is.
Ja, gratis is er sowieso weinig anders te vinden op dit gebied.quote:Op vrijdag 9 januari 2009 11:31 schreef LordNemephis het volgende:
[..]
Ik weet dat PHP op zichzelf geen video's kan converteren. Ik zocht idd naar een OpenSource oplossing (lees: graties). Ffmpeg is dus wel een aanrader voor mij?
1 |
Tijd voor een lesje datatypes voor beginnersquote:Op vrijdag 9 januari 2009 14:55 schreef Gloeidoos het volgende:
Stel ik heb in tabel a een kolom 'naam'. In tabel b is de primary key deze 'naam'. Verder staat in tabel b nog een kolom 'enabled' met de waarde 'Y' of 'N'.
Ik heb de tables aangepast om het een beetje simpel te houden. In feite is het een kolomnaam met de naam state, enum('enabled','disabled'). Volgens mij komen hier uiteindelijk nog meer states bij, als dat nodig is.quote:Op vrijdag 9 januari 2009 15:18 schreef Roy_T het volgende:
[..]
Tijd voor een lesje datatypes voor beginners
Wat jij wilt is een boolean, en die sla je normaliter in een MySQL database op als integer met de waarde 1 (true) of 0 (false).
Zou voor geen van die beide gaan... zou voor het volgende gaan...quote:Op donderdag 8 januari 2009 07:29 schreef jeroen2497 het volgende:
Ik heb een vraag mbt de bouw van een webshop.
Hoe zouden jullie de data van een bestelling in de database opnemen?
Een tabel met;
- klant_nummer, product_nummer, prijs
- klant_nummer, product_nummer, product_naam, product_gewicht, prijs
Het voordeel van optie 2 is dat als er een productnaam wordt gewijzigd (of zelfs verwijderd), dat alle info wel in de bestelling blijft staan.
Het gaat om flink wat bestellingen per dag.
Graag jullie idee hier over!!
Of, nog een andere optie:quote:Op vrijdag 9 januari 2009 14:58 schreef HuHu het volgende:
Wat je nu doet is hetzelfde als:
[ code verwijderd ]
1 2 3 4 5 | FROM a JOIN b USING (naam) WHERE b.enabled = 'Y'; |
Kan je mij uitleggen wat er beter is aan:quote:Op vrijdag 9 januari 2009 14:58 schreef HuHu het volgende:
Wat je nu doet is hetzelfde als:
[ code verwijderd ]
Die tweede vorm is veel efficienter. Je geeft daar meteen aan hoe gejoind moet worden in de on clause, en daardoor kan de query beter geoptimaliseerd worden.quote:Op vrijdag 9 januari 2009 17:21 schreef slacker_nl het volgende:
[..]
Kan je mij uitleggen wat er beter is aan:
select * from a,b where a.id = b.pid and b.bla = 'Y';
en
select * from a join b on a.id = b.pid where b.bla = 'Y';
?
En ik vind het ook een stuk leesbaarder.quote:Op vrijdag 9 januari 2009 18:10 schreef Farenji het volgende:
[..]
Die tweede vorm is veel efficienter. Je geeft daar meteen aan hoe gejoind moet worden in de on clause, en daardoor kan de query beter geoptimaliseerd worden.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |