abonnement Unibet Coolblue Bitvavo
pi_64564814
quote:
Op donderdag 1 januari 2009 21:04 schreef GlowMouse het volgende:
Cachen inderdaad
Dat idd. En MySQL heeft ook een functie die het leven wat makkelijker kan maken.
pi_64566959
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?
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.

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.
  donderdag 1 januari 2009 @ 22:20:38 #154
75592 GlowMouse
l'état, c'est moi
pi_64567125
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.
Waarom niet? Hoe denk je dat de verhouding opvragen/aanpassen is?
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.
Hoe denk je dat dat werkt als er, zeg, 10.000 producten zijn?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64568726
quote:
Op donderdag 1 januari 2009 22:20 schreef GlowMouse het volgende:

[..]

Waarom niet? Hoe denk je dat de verhouding opvragen/aanpassen is?
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:
Hoe denk je dat dat werkt als er, zeg, 10.000 producten zijn?
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.
pi_64569147
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.
True. Dit pattern zie je wel vaker bij grote datacollecties.
  donderdag 1 januari 2009 @ 23:44:14 #157
75592 GlowMouse
l'état, c'est moi
pi_64569596
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.
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.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64570282
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.
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:
[..]

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.
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.
pi_64570319
quote:
Op donderdag 1 januari 2009 23:26 schreef Scorpie het volgende:

[..]

True. Dit pattern zie je wel vaker bij grote datacollecties.
Gebruiken die ook PHP/MySQL?
pi_64574816
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.
Dat lijkt mij inderdaad een goede oplossing:

1SELECT DISTINCT(SUBSTRING(product, 1, 1)) FROM producten
  vrijdag 2 januari 2009 @ 13:07:49 #161
12221 Tijn
Powered by MS Paint
pi_64575600
quote:
Op vrijdag 2 januari 2009 00:17 schreef Light het volgende:

[..]

Gebruiken die ook PHP/MySQL?
Er zijn genoeg grote websites met flinke datasets die PHP en/of MySQL gebruiken, waaronder Facebook, Wikipedia, Yahoo!, Digg, Flickr, Google en YouTube.
  vrijdag 2 januari 2009 @ 13:15:03 #162
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_64575764
Bedankt voor jullie reacties.

Het zal in totaal misschien wel gaan om 500.000 producten, welke onderverdeelt zijn in categorien.

Zodra er een categorie is gekozen, is het mogelijk om een keuze te maken uit de begin letter.
Ik kan gewoon een functie maken die ik elke keer gebruik zodra er wijzigingen worden doorgevoerd in de database.

Cachen dus. Hoe zien jullie hier de tabel opbouw voor ?
Ik zelf dacht aan:

cat_ID, letter_ID.

Het is namelijk zo dat er per categorie een cache zal moeten zijn, van de beschikbare producten, en niet van de producten.

Anders wordt het natuurlijk wel weer als er gezocht gaat worden, en er ook een mogelijkheid moet zijn van het kiezen van een begin letter....
  vrijdag 2 januari 2009 @ 13:27:21 #163
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_64576105
Die array met het resultaat van DISTINCT(SUBSTRING(name, 1, 1)), daar heb ik de functie array_unique(); over laten gaan.

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?
  vrijdag 2 januari 2009 @ 13:30:34 #164
75592 GlowMouse
l'état, c'est moi
pi_64576202
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.
Want de elementen zijn nog niet uniek vóór array_unique()?
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?
Nee, zijn er alsnog mensen die lang op hun request wachten.
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.
Caches moet je niet te moeilijk over doen, serialized array in de categorieëntabel in een extra kolom is het makkelijkste.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  vrijdag 2 januari 2009 @ 17:12:45 #165
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_64583947
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.
Toch wel, dacht het niet uniek terug te krijgen..

De cache is opgeslagen en werkt primá! bedankt!
  vrijdag 2 januari 2009 @ 17:19:15 #166
75592 GlowMouse
l'état, c'est moi
pi_64584251
quote:
Op vrijdag 2 januari 2009 17:12 schreef Likkende_Lassie het volgende:

[..]

Toch wel, dacht het niet uniek terug te krijgen..
Dat is opmerkelijk, waar denk je dat DISTINCT voor dient?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64586555
quote:
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.
Dat weet ik Mijn vraag was dan ook meer of die sites eenzelfde pattern gebruiken voor het tonen van gegevens. Dus ook groeperen op eerste letter. Ik blijf er nog bij dat het niet handig is om alle records op te halen, in php te groeperen, en vervolgens een subset te laten zien. Om dat bij de volgende pageview weer helemaal te herhalen.
  vrijdag 2 januari 2009 @ 18:42:17 #168
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_64587158
quote:
Op vrijdag 2 januari 2009 17:19 schreef GlowMouse het volgende:

[..]

Dat is opmerkelijk, waar denk je dat DISTINCT voor dient?
Ja die doet hetzelfde, maar toen ik de code teste, en een print_r() deed, stonden er dubbele waardes in.
Later toen ik dit weer deed, was dit niet het geval. Of ik heb me vergist
pi_64599855
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.
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.
  vrijdag 2 januari 2009 @ 23:44:56 #170
75592 GlowMouse
l'état, c'est moi
pi_64600198
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.
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.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64601638
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.
Je hebt idd gelijk, het ophalen van 10000 records is de helft korter vergeleken met het doen van 10.000 assignments.

Lang leve .net Daar kan je 10.000 assignments nauwelijks timen
  zaterdag 3 januari 2009 @ 00:28:10 #172
75592 GlowMouse
l'état, c'est moi
pi_64601809
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.
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.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64602685
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.
Query was:
$sql = "SELECT * FROM test WHERE id > 0"
Returned 10.000 2 kolom-rijen met een id en een md5 hash van de rij-id.

En mn forloop deed $a[$i] = $i.

Je hoeft de grootte neit elke keer aan te passen in dit geval gezien je een array van lists kan maken. Grootte van je array weet je (26). Grootte van list kan je benaderen met grootte van je resultset/26 (of je kan t iets nauwkeuriger doen). Dus daar komt ook weinig overhead bij kijken.
Als je t echt goed wil doen kan je je array op je stack alloceren ipv op je heap, dan heb je helemaal dikke performance.

Net bijna dezelfde forloop gedraaid in .net, daar kan ik in 2.0 seconden (minder dan 2.7 dus) 100 miljoen keer casten, een modulo doen en assignen.
1
2
for (int j = size - 1; j >= 0; j--)
  a[j] = (byte)(j % 255);

Je haalt in 2.0 seconden no way 100 miljoen records uit een database.

Ik denk dat in zo'n geval het maken van een dictionary vele malen voordelig is dan een query naar je database. Dat was eigenlijk ook mijn insteek in mijn eerste post, maar ja php performed gewoon crappy :9

Wat maakt t eigenlijk ook allemaal uit! Alsof het hier om high-performance systemen gaat :p
pi_64604608
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.
Memcached anyone?
pi_64617916
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
<?php ;
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 } ?>



hoe var dump ik dit?
Redacted
  zaterdag 3 januari 2009 @ 17:31:36 #176
75592 GlowMouse
l'état, c'est moi
pi_64618123
quote:
Op zaterdag 3 januari 2009 02:05 schreef Roy_T het volgende:

[..]

Memcached anyone?
Moet je die wel hebben draaien en is er nog steeds één request die er lang over doet.
quote:
Op zaterdag 3 januari 2009 17:24 schreef cablegunmaster het volgende:

[ code verwijderd ]

hoe var dump ik dit?
Wat bedoel je?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64618919
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.
[..]

Wat bedoel je?
ik krijg de variable niet goed van getal1 en getal 2
hij telt niet op als ik op ok druk. dus vraag ik me af hoe ik dit nu moet oplossen en vraag ik me ook af hoe ik een var dump van post variabele maak.

want vardump($post)werkt niet.
Redacted
  zaterdag 3 januari 2009 @ 18:08:12 #178
75592 GlowMouse
l'état, c'est moi
pi_64619180
De variabele heet dan ook niet $post of $_post maar $_POST. En de functie niet vardump maar var_dump.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64620755
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.

hartelijk bedankt meteen ook wat fout was in de php code

hoofdletters
Redacted
pi_64623227
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.
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.

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.
  zaterdag 3 januari 2009 @ 20:25:05 #181
75592 GlowMouse
l'état, c'est moi
pi_64623759
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.
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:
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 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.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64640410
quote:
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 is waar. Ik werk nooit binnen shared hosting omgevingen, dus daar had ik niet aan gedacht
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.
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.

Memcached kan inderdaad vol raken en de oudste data weggooien, maar daar ben je zelf bij natuurlijk. De app waar ik het over had moet iedere dag een paar MB aan data opslaan (en gedurende die dag gebruiken), terwijl er 1 GB aan ruimte gereserveerd is voor memcached. Dan heb je dat probleem nooit.

Wat mij betreft dus allebei prima oplossingen, afhankelijk van de architectuur. Maar als je geen memcached hebt en op een shared host draait, dan kun je eigenlijk niets anders dan je database gebruiken (of file caching, maar dat zou niet mijn voorkeur hebben)
pi_64641420
Ik ben op het moment bezig met een login scriptje, maar raar genoeg werkt deze niet..
Ik heb in mijn database een kolom MEMBERS met de velden username en wachtwoord.
Raar genoeg krijg ik aldoor "U heeft geen goede combinatie van emailadres en wachtwoord gebruikt." te zien terwijl de username en password die ik invoer in mijn inlogscherm zeker weten correct zijn.
Ziet iemand de fout die ik maak??
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
<?php
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.";
}
 
?>
Bodybuilding #1
Hardlopen #2
  zondag 4 januari 2009 @ 12:39:41 #184
75592 GlowMouse
l'état, c'est moi
pi_64641651
MEMBERS is een tabel, geen kolom.
Om die stripslashes zou ik nog een check doen of magic_quotes_gpc wel aan staat.
Wat denk je dat $result voorstelt, dat je hem met 1 vergelijkt?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64641759
$result ==1 is om te controleren of er 1 rij uit de query komt, wat betekent dat de username bestaat in de database, in geval van 0 rijen krijg je de melding dat er geen goede combinatie is.
Meer dan 1 rij kan ook niet uit de query komen omdat de username uniek is.
Bodybuilding #1
Hardlopen #2
  zondag 4 januari 2009 @ 12:46:53 #186
75592 GlowMouse
l'état, c'est moi
pi_64641862
Dus $result stelt het aantal rijen in het resultaat voor zeg je? Klopt niet helaas. $result is bij jou wat mysql_query teruggeeft, en dat is een resource:
quote:
Return Values

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64642212
En hoe kan ik dan ervoor zorgen dat de resultaten wel in een rij komen te staan? Met mysql_fetch_row?
Bodybuilding #1
Hardlopen #2
  zondag 4 januari 2009 @ 13:01:48 #188
75592 GlowMouse
l'état, c'est moi
pi_64642261
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?
Je kunt die resource weer aan een andere functie voeren, zoals deze.
Waarom vraag je eigenlijk zoveel gegevens op uit je database terwijl je alleen maar wilt weten hoeveel rijen er voldoen aan jouw criterium?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64642469
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..
Bodybuilding #1
Hardlopen #2
  zondag 4 januari 2009 @ 13:12:14 #190
75592 GlowMouse
l'état, c'est moi
pi_64642588
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..
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.

[ Bericht 5% gewijzigd door GlowMouse op 04-01-2009 13:17:55 ]
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64642654
Hij controleert nu toch juist of die username en wachtwoord in de database staan zodat de gebruiker kan inloggen?
Bodybuilding #1
Hardlopen #2
  zondag 4 januari 2009 @ 13:15:27 #192
75592 GlowMouse
l'état, c'est moi
pi_64642698
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?
Dat klopt, maar je vraagt veel meer informatie op dan je nodig hebt.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64643478
-edit- o wacht
Bodybuilding #1
Hardlopen #2
pi_64643560
Dus eigenlijk moet ik gewoon een count gebruiken?
1
2
3
<?php
"SELECT COUNT(*) FROM members WHERE username='$myusername' and password='$mypassword'"
?>
Bodybuilding #1
Hardlopen #2
  zondag 4 januari 2009 @ 13:46:06 #195
75592 GlowMouse
l'état, c'est moi
pi_64643658
Dat is hier het beste ja Niet dat je het verschil hier merkt, maar het is goed om van begin af aan te bedenken wat je nodig hebt en niet meer dan dat op te vragen. Je kunt nu alleen niet meer mysql_num_rows gebruiken omdat je nu altijd een rij terugkrijgt.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64644112
Ik krijg nog steeds aldoor de melding: 'U heeft geen goede combinatie van emailadres en wachtwoord gebruikt. '

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
<?php
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.";
}
 
?>


Wat doe ik nu nog verkeerd?
Bodybuilding #1
Hardlopen #2
pi_64644150
Vraagje:

Ik heb deze query & code:

1
2
3
4
5
6
7
<?php
foreach ($_SESSION['user_shop']['items']  AS $item_ID => $key){
   if (
is_numeric($item_ID)){
      
$extra_Q .= $item_ID.',';
   }
}
?>


1SELECT * FROM content_items items WHERE   items.item_ID IN (".$extra_Q." 0)


- Er wordt niet gesorteerd op de volgorde van $extra_Q.

Ziet iemand wat er 'fout' is ?

[ Bericht 4% gewijzigd door jeroen2497 op 04-01-2009 14:07:40 ]
  zondag 4 januari 2009 @ 14:07:14 #198
75592 GlowMouse
l'état, c'est moi
pi_64644381
quote:
Op zondag 4 januari 2009 14:00 schreef jeroen2497 het volgende:
- Er wordt niet gesorteerd op de volgorde van $extra_Q.
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 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?
In $result staat nog steeds een resource, en niet de waarde voor count(*).
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64644417
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(*).
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?
pi_64644487
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?
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.

Overigens twijfel ik of count(*) wel het snelste is op mysql vlak

Mogelijk is onderstaande query nog sneller, met als bijkomende voordeel dat je de member id in je session kan gooien.
SELECT id FROM members WHERE username='$myusername' and password='$mypassword' LIMIT 1

$result = mysql_query($query);

$row = mysql_fetch_assoc($result);
if($row) {
//valide record, met $row['id'] = member id
}
pi_64646711
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?
Kan ik anders niet de array's naast elkaar laten lopen ofzo?
  zondag 4 januari 2009 @ 15:25:06 #202
75592 GlowMouse
l'état, c'est moi
pi_64647491
quote:
Op zondag 4 januari 2009 15:04 schreef jeroen2497 het volgende:

[..]

Kan ik anders niet de array's naast elkaar laten lopen ofzo?
Mijn edit gezien?
Ik weet niet wat je bedoelt, maar als de volgorde zo belangrijk is, zul je dat later in PHP moeten regelen.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64647789
quote:
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.
Had ik niet gezien
Wat ik bedoel, ik heb een array met de juiste volgorde van ID's.
Vervolgens krijg ik ook een array van mysql terug, welke ik in een while loop heb.

Hoe vertel ik PHP dat er een bepaalde volgorde moet worden aangehouden?
  zondag 4 januari 2009 @ 15:36:04 #204
75592 GlowMouse
l'état, c'est moi
pi_64647912
quote:
Op zondag 4 januari 2009 15:33 schreef jeroen2497 het volgende:

[..]

Hoe vertel ik PHP dat er een bepaalde volgorde moet worden aangehouden?
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.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64648265
goeie, ff proberen!

- edit -
werkt prima zo!
Heb namelijk een winkelmandje, en de producten kwamen er door elkaar in... niet echt handig natuurlijk.

[ Bericht 79% gewijzigd door jeroen2497 op 04-01-2009 16:00:17 ]
  zondag 4 januari 2009 @ 20:25:48 #206
71919 wonderer
Hung like a My Little Pony
pi_64660963
'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.

1
2
3
<?php
<input type="text" value="iets met "quotes" hier">
?>


Hoe fix ik dat? Is &quot; de enige optie?
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
  zondag 4 januari 2009 @ 20:30:31 #207
12221 Tijn
Powered by MS Paint
pi_64661214
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 &quot; de enige optie?
Je zou het zo kunnen doen:

1<input type="text" value="<?= htmlentities($waarde); ?>" hier">


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.
pi_64663078
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.
htmlentities() is wel de nettere oplossing van de twee.
  zondag 4 januari 2009 @ 21:17:32 #209
71919 wonderer
Hung like a My Little Pony
pi_64663946
Maar ik wil alleen de quotes doen. De rest wordt al voor gezorgd namelijk. En met htmlentities wordt het een zootje.

Slashes werkt niet in het htmlgedeelte (tenminste, toen ik het probeerde kapte hij het alsnog af na de quote).
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
  zondag 4 januari 2009 @ 21:19:56 #210
12221 Tijn
Powered by MS Paint
pi_64664083
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.
Is htmlspecialchars() misschien wat je zoekt? Die zet maar een kleine subset van de hele HTML-specialchars set om.

Je zou zelf een functie kunnen schrijven die van dubbele quotes bijvoorbeeld HTML-entities of enkele quotes ofzo maakt. Dat zou ook je probleem moeten oplossen.
quote:
Slashes werkt niet in het htmlgedeelte (tenminste, toen ik het probeerde kapte hij het alsnog af na de quote).
Hoe had je het toen gedaan?
  zondag 4 januari 2009 @ 21:55:55 #211
71919 wonderer
Hung like a My Little Pony
pi_64666110
Gewoon met addslashes();

Ik vind het zo raar, je zou toch ook gewoon een tekstbalk moeten kunnen maken in puur html met een quote erin?
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
  zondag 4 januari 2009 @ 21:59:23 #212
12221 Tijn
Powered by MS Paint
pi_64666285
quote:
Op zondag 4 januari 2009 21:55 schreef wonderer het volgende:
Gewoon met addslashes();
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:
Ik vind het zo raar, je zou toch ook gewoon een tekstbalk moeten kunnen maken in puur html met een quote erin?
Nee, dat kan niet. Je zult de HTML-code of een ander type quotes moeten gebruiken.

[ Bericht 1% gewijzigd door Tijn op 04-01-2009 22:43:04 ]
  zondag 4 januari 2009 @ 22:37:14 #213
71919 wonderer
Hung like a My Little Pony
pi_64668208
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.
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
  zondag 4 januari 2009 @ 22:43:27 #214
12221 Tijn
Powered by MS Paint
pi_64668508
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.
Maar dan hebben bezoekers zonder Javascript dus een niet-werkende site?
  zondag 4 januari 2009 @ 23:38:26 #215
71919 wonderer
Hung like a My Little Pony
pi_64670943
quote:
Op zondag 4 januari 2009 22:43 schreef Tijn het volgende:

[..]

Maar dan hebben bezoekers zonder Javascript dus een niet-werkende site?
Ja. Maar dat hadden ze sowieso al
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_64671432
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.
Dus nu valideert je HTML niet meer. Lekker handig debuggen
  zondag 4 januari 2009 @ 23:53:51 #217
71919 wonderer
Hung like a My Little Pony
pi_64671563
quote:
Op zondag 4 januari 2009 23:50 schreef Roy_T het volgende:

[..]

Dus nu valideert je HTML niet meer. Lekker handig debuggen
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. Maar ik wilde het ook even weten voor als ik opnieuw tegen een vergelijkbaar probleem aanloop (huidige probleem is on the fly bewerken van tekst in een chatbox), bijvoorbeeld met een forum waar je de titel van een topic bij elk reply houdt of zo. Ik noem maar wat. Ik zal toch niet de enige zijn die tegen het probleem aanloopt.
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_64672660
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.
Maar zoveel moeite is het toch niet om htmlspecialchars() te gebruiken?
  maandag 5 januari 2009 @ 00:44:22 #219
71919 wonderer
Hung like a My Little Pony
pi_64673044
quote:
Op maandag 5 januari 2009 00:29 schreef Roy_T het volgende:

[..]

Maar zoveel moeite is het toch niet om htmlspecialchars() te gebruiken?
Op de een of andere manier werkte het niet (je zag &quot; staan in plaats van ") en ik heb tot nu toe geen tijd/zin gehad om uit te gaan zoeken waarom.
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_64674288
quote:
Op maandag 5 januari 2009 00:44 schreef wonderer het volgende:

Op de een of andere manier werkte het niet (je zag &quot; staan in plaats van ") en ik heb tot nu toe geen tijd/zin gehad om uit te gaan zoeken waarom.
Kijk eens in je source. Ik gok op dubbel escapen, waardoor er & amp;quot; komt te staan.

edit: lekkere brakke escaping hier op Fok!, aangezien 'ie van & amp; gewoon "&" maakt.
pi_64691815
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
pi_64692310
"een lijstje" == een array? Een string?
pi_64692678
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
<?php
$teller = 0;
for($i = 0; $i < 24; $i++)
{
   for($j = 0; $j < 60; $ j+= 15) //of +=30
   {
      $val[$teller] = "$i:$j";
      $teller++;
   }
}
?>


zoiets
pi_64695474
quote:
Op maandag 5 januari 2009 17:04 schreef Database het volgende:

[..]
[ code verwijderd ]

zoiets
Thanks
  maandag 5 januari 2009 @ 21:25:45 #225
75592 GlowMouse
l'état, c'est moi
pi_64705328
Met sprintf kun je voorloopnullen toevoegen.
1
2
3
4
5
6
7
8
<?php
$val 
= array();
for(
$i=0$i<24$i++) {
    for(
$j=0$j<60$j+= 15) {
        
$val[] = sprintf('%02.0f:%02.0f'$i$j);
    }
}
?>
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64705792
quote:
Op maandag 5 januari 2009 21:25 schreef GlowMouse het volgende:
Met sprintf kun je voorloopnullen toevoegen.
[ code verwijderd ]
Maar $i en $j zijn integers, geen floats. Dus kun je %02d gebruiken ipv %02.0f. Korter en duidelijker
pi_64715823
1
2
3
4
5
<?php
"<br>".$variabele."<br>" 
// of 
"<br>$variabele<br>" 
?>


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?
Redacted
pi_64716005
Ik gebruik de bovenste, om het leesbaar(der) te houden.
pi_64717562
ik gebruik de eerste; het schijnt sneller te zijn. je kunt voor een array ook echo("array-veld: {$array['veld']}");, maar ".$array['veld']." is sneller, is mij verteld. Ik weet het verder ook niet, maar er zit wel een beetje logica achter, want het is de normale manier, en die 2 "in-text" variabelen zijn denk ik een beetje van php alleen

en natuurlijk is het wel wat overzichtelijker, zeker als je met een zwart-wit editor werkt

mvg
Marco
pi_64718875
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?
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
  dinsdag 6 januari 2009 @ 09:30:39 #231
12221 Tijn
Powered by MS Paint
pi_64718947
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
Ik dacht dat enkele quotes sneller zijn dan dubbele omdat PHP de inhoud van de quotes dan niet hoeft te parsen.
pi_64720044
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.
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).
pi_64720799
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.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  dinsdag 6 januari 2009 @ 10:45:44 #234
187069 slacker_nl
Sicko pur sang
pi_64720948
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?

Ik zou gaan voor het tweede, waarom zou je "dit" . $dat . "daar"; syntax gebruiken als dubbele quotes values expanden, wat dus gebeurd in "dit $dat daar";

Verder valt het snelheidsverschil echt mee tussen de ' en " bij het parsen. Zie Vraag over loginsysteem Je zal zien dat single quotes de ene keer sneller zijn dat de dubbele quotes en omgekeerd.

Heb je echt veel "dat" . $dit . "daar" constructies dan zou ik voor (s)printf functies gaan:

$val = sprintf("dit %s daar", $dat);

Dat is pas echt leesbaar.
In theory there is no difference between theory and practice. In practice there is.
pi_64721295
quote:
Op dinsdag 6 januari 2009 10:45 schreef slacker_nl het volgende:

Dat is pas echt leesbaar.
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
  dinsdag 6 januari 2009 @ 11:03:14 #236
187069 slacker_nl
Sicko pur sang
pi_64721429
Ik wordt echt helemaal leip van "dit" . $dat . "daar" . $zo . "en " . $zus . "constructies"; dat vind ik lelijk, onleesbaar etc etc. Dan is "dit $dat daar $zo en $zus constructies" vele malen leesbaarder. En sprintf is gewoon leesbaarder plus je kan netjes uitlijnen ed. printf("%-20s echt vet", "Dat is pas");

Maar smaken verschillen inderdaad.
In theory there is no difference between theory and practice. In practice there is.
pi_64721732
Ik zie ook veel liever
1
2
3
<?php
echo $var1 ' tekst ' $var2 ' tekst... ';
?>
dan
1
2
3
<?php
echo "$var1 tekst $var2 tekst"
?>


Veel beter onderscheid tussen 'platte' en 'functionele' tekst / variabelen. Veel andere programmeertalen werken overigens niet met de methode uit mijn tweede voorbeeldstukje. In bijvoorbeeld C(#) kun je ook niet zomaar een variabelenaam in een string knallen. Niet meer dan logisch natuurlijk.
pi_64721788
quote:
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
IDE`s vinden dat ook veul mooier, kijk maar naar de kleurverschillen
pi_64721814
quote:
Op dinsdag 6 januari 2009 11:14 schreef Scorpie het volgende:

[..]

IDE`s vinden dat ook veul mooier, kijk maar naar de kleurverschillen
NotePad++ vindt het inderdaad niet zo fijn om alles maar in stringvorm te parsen.
pi_64721873
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.
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.
pi_64721890
quote:
Op dinsdag 6 januari 2009 11:14 schreef Scorpie het volgende:

IDE`s vinden dat ook veul mooier, kijk maar naar de kleurverschillen
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 strings ).
pi_64722057
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:

1
2
3
4
<?php
$var 
'omfg wtf bbq';
echo 
'$var = ' $var 'hehe';
?>


Wat had deze meneer echter gedaan:

1
2
3
4
<?php
$var 
'omfg wtf bbq';
echo 
"$var = $varhehe";
?>


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.
pi_64722233
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. Ik zie het derhalve als een soort van automatische foutcorrectie voor slechte programmeurs.
Eensch
pi_64723696
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????

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
<?php
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);
    
$rowcountmysql_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";
}
?>
Er staan trouwens wel ?> en <?php om dat html heen alleen verwijderd FOK dat op de een of andere manier.
Bodybuilding #1
Hardlopen #2
pi_64723735
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.
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.
  dinsdag 6 januari 2009 @ 12:09:40 #246
75592 GlowMouse
l'état, c'est moi
pi_64723758
mysql_query($query) geeft niet de vraag terug maar een resource. Je moet die vraag nog opvragen, bijvoorbeeld met mysql_result.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64723761
Omdat $result een Resource is die de MySQL resultaten bevat. Kijk eens naar iets als: http://nl2.php.net/mysql_fetch_assoc
pi_64724097
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.
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().
2) mysql_num_rows() is een erg achterhaalde functie.
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.
pi_64724189
Thanks all
Bodybuilding #1
Hardlopen #2
  dinsdag 6 januari 2009 @ 12:32:23 #250
187069 slacker_nl
Sicko pur sang
pi_64724525
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.
Dat los je gewoon op dmv ${var}hehe of zoals php het ook toestaat iirc: {$var}hehe.
In theory there is no difference between theory and practice. In practice there is.
pi_64725269
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.
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...

1
2
SELECT `vraag` FROM `members` WHERE `username` = '';
DELETE FROM `members` WHERE 1 OR `username` = ''


En weg zijn al je members :)
  dinsdag 6 januari 2009 @ 12:58:27 #252
75592 GlowMouse
l'état, c'est moi
pi_64725290
quote:
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
Lees de documentatie bij mysql_query eens goed
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64727575
quote:
Op dinsdag 6 januari 2009 12:58 schreef GlowMouse het volgende:

Lees de documentatie bij mysql_query eens goed
Details

Ondanks dat dit inderdaad niet werkt, is het natuurlijk wel degelijk gevaarlijk om data richting je query niet te escapen (dat weet jij ook wel, maar ik stress het even voor Kerol ).
  dinsdag 6 januari 2009 @ 14:53:41 #254
187069 slacker_nl
Sicko pur sang
pi_64729526
Daarom gebruik je PDO...
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 6 januari 2009 @ 14:54:20 #255
12221 Tijn
Powered by MS Paint
pi_64729554
quote:
Op dinsdag 6 januari 2009 14:53 schreef slacker_nl het volgende:
Daarom gebruik je PDO...
Helaas zijn er teveel hosts die dat niet ondersteunen, net als mysqli.
  dinsdag 6 januari 2009 @ 14:56:02 #256
187069 slacker_nl
Sicko pur sang
pi_64729629
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.

Of doe zoals ik, huur je eigen doos.
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 6 januari 2009 @ 15:09:57 #257
12221 Tijn
Powered by MS Paint
pi_64730148
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.
Dat is leuk gezegd, maar je hebt niet altijd invloed op het platform waar je applicatie op wordt geďnstalleerd.
  dinsdag 6 januari 2009 @ 16:35:43 #258
187069 slacker_nl
Sicko pur sang
pi_64733949
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.
In theory there is no difference between theory and practice. In practice there is.
pi_64744627
quote:
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.
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 tegenin
pi_64777155
Misschien zit PDO dan wel bij PHP 5 standaard, maar wat nou als de hoster het er uit haalt? Doen er ook zat.
En in PHP 6? Er gaan geruchten dat mysql_* en mysqli_* dan niet meer bestaan.... ai daar gaat je website.
Wat doe je dan?
Misschien alleen voor de meer gevorderde, maar je maakt een eigen database-klasse, los van welk database-systeem je hebt. Je kunt hierbij denken aan functies als select(), edit(), count(), insertedID(), etc.. en daar verwerk je een functie in, die je query beveiligd:
array select(string $query, array $variables)
daar kun je het beveiligen, als je PDO hebt is dat simpel, als je geen PDO hebt met mysql_real_escape_string() of intval(), net erna welk type het is.

gaan we nu even kijken:
Je hebt het in PDO gemaakt en je zet het over naar een host zonder PDO...even scriptje omzetten en je hebt het.
Je hebt het met mysql_* gemaakt en je wilt het in PDO hebben, want je wilt overgaan naar PHP 6...even scriptje omzetten.....
zie je? veel handiger

Hopelijk hebben sommigen er iets aan

mvg
Marco

Dit bericht is niet gericht op een persoon, maar als algemene informatie als toevoeging bij het huidige onderwerp. Eventuele opmerkingen die je persoonlijk kunt opvatten moet je zo dus niet opvatten.
pi_64777490
Ik denk dat velen hier al een dergelijke abstractielaag gebruiken (zelf geschreven, of omdat ze een framework gebruiken) Niettemin een prima tip!
pi_64798942
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!!
  donderdag 8 januari 2009 @ 07:32:45 #263
4159 GI
Nee ik heet geen JOE
pi_64798962
Ik zou gaan voor optie twee, al zijn product_naam en product_gewicht natuurlijk enigzins redundante datum en zou je als een product wijzigt eigenlijk een nieuw product moeten toevoegen aan de database en het oude product een 'niet actief' tag mee moeten geven.

Maar dat hangt van je hele datamodel af.
pi_64803744
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
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_64803873
WHERE lala REGEXP '^[0-9].*'
  donderdag 8 januari 2009 @ 11:20:34 #266
4159 GI
Nee ik heet geen JOE
pi_64803886
Das wel een complexe functie die lala
pi_64803965
quote:
Op donderdag 8 januari 2009 11:20 schreef GI het volgende:
Das wel een complexe functie die lala
Geen idee, ik ben niet zo goed in regular expressions. Of zit ik helemaal fout met dat 'ie REGEXP moet gebruiken?
  donderdag 8 januari 2009 @ 11:24:18 #268
46383 Tiemie
sowieso wel!
pi_64804039
quote:
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
met REGEXP in MySQL

=edit=
casten levert teveel 0-en op
  donderdag 8 januari 2009 @ 11:26:22 #269
4159 GI
Nee ik heet geen JOE
pi_64804102
Ik deed bijdehand met het noemen van het veld 'lala' verder zou ik het niet weten en ben ik een regexp n00b.
pi_64804215
quote:
Op donderdag 8 januari 2009 11:20 schreef HuHu het volgende:
WHERE lala REGEXP '^[0-9].*'
Werkt idd perfect, had zelf een andere versie met % maar dat werkte natuurlijk niet
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  donderdag 8 januari 2009 @ 11:36:18 #271
75592 GlowMouse
l'état, c'est moi
pi_64804436
Je kunt denk ik ook WHERE veld BETWEEN '0' and '9' gebruiken. Als het werkt, kan het in ieder geval gebruik maken van indices, hoewel ik niet denk dat je daar winst mee boekt tenzij er weinig gebruikers zijn die hun username met een getal laten beginnen.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64805767
quote:
Op donderdag 8 januari 2009 11:36 schreef GlowMouse het volgende:
Je kunt denk ik ook WHERE veld BETWEEN '0' and '9' gebruiken.
Nee dus.
  donderdag 8 januari 2009 @ 12:20:39 #273
75592 GlowMouse
l'état, c'est moi
pi_64805869
quote:
Op donderdag 8 januari 2009 12:17 schreef Tuvai.net het volgende:

[..]

Nee dus.
'9adsf' gaat fout Kun je nog >='0' AND <':' gebruiken.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_64807689
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!!
Ik zou voor het eerste gaan om de volgende reden:

Als de naam van je product (typo) of prijs verandert, en je hebt een link naar je productnummer, wordt da overal weer correct aangepast. Afhankelijk van de situatie wil je dan de prijs wel/niet aanpassen. Ik denk dat je in zon geval bij bestellingen de prijs aan wil passen, en als een bestelling betaald is (dan is het ook geen bestelling meer maar een factuur) dat je alles wil fixeren.
Data redundant opslaan blijft imo tenzij het duidelijke voordelen heeft. In dit geval zie ik het voordeel totaal neit. Het scenario wat jij schets met producten die verwijderd zijn zou ik oplossen door producten niet uit je database te gooien (is sowieso een slecht idee ivm commercie), maar door ze inactief te maken.
En natuurlijk kan je na x jaar je productentabel opschonen door alle inactieve dingen van meer dan x jaar oud weg te gooien.
pi_64808723
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.
pi_64813681
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.
Ja, dat doe ik inderdaad ook

Ziet er ongeveer zo uit:

orders (order_id, klant_id, opmerkingen, timestamp)
orders_items, (item_id, order_id, naam, prijs, opmerkingen)
orders_gegevens (order_ID, factuur_adres, leverings_adres)


Ik denk ook dat optie 2 het beste is, ben er normaal ook voorstander van dingen slechts éénmaal op te slaan, maar het is dan maar niet anders.... als er iets wijzigt is dat erg raar dat zoiets in je bestelgeschiedenis ook wordt doorgevoerd.

Als een product wordt aangepast wegens een typfout, ja dan zou het wel mooi zijn als het overal kan worden doorgevoerd.....maar dat is niet nodig in dit geval.
pi_64813746
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.
Dat dus. Bestellingen != Facturen, en daar moet je in je database al rekening mee hebben gehouden.
pi_64813816
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.
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.
pi_64813954
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.
En hoe wil jij de bestelgeschiedenis van iemand gaan bijhouden dan met optie 1?
pi_64814068
quote:
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?
Een persoon heeft 0 of meer facturen, een factuur heeft 1 of meer producten. Tadaam
Op het moment dat iemand zijn bestelling heeft betaald wordt de bestelling weggegooid en wordt het een factuur. En in de factuur is naam & prijs wel gefixeerd.

Ik ben het met jullie eens dat optie 2 de makkelijke manier is, maar optie 1 levert een meer waarheidsgetrouw model op.
pi_64815133
Zoiets sla je stapsgewijs elke keer op. Je wilt toch niet een klant een product t.w.v. 10 euro in zijn winkelwagen laten stoppen, om het vervolgens door diezelfde klant te laten bestellen terwijl het 'opeens' 12 euro kost, om het ten slotte door die klant te laten afrekenen terwijl het 'opeens' 14 euro kost.
  donderdag 8 januari 2009 @ 16:17:07 #282
63192 ursel
"Het Is Hier Fantastisch!
pi_64815290
Daarnaast kan een bestelling ook wel eens gezien worden als offerte, welke vaak weer een duur van 14 dagen heeft ofzo. Dus als jij je prijs verhoogt, heeft de klant nog steeds recht op die prijs.

Maar denk dat het per situatie wel kan schelen welke de beste insteek heeft.
pi_64815323
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.
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:
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.
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.
pi_64818834
Even voor de duidelijkheid, ik neem aan dat er in allebei de voorbeelden de prijs natuurlijk standaard zit.
Het gaat mij meer om de naam, gewicht, beschrijving etc.
pi_64818964
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!!
Bestelling_nr , Klant_nummer, Productnummer, Product_naam,product_gewicht, Prijs

primaire sleutel is bestelling_nr
dit zodat een klant vaker 1 artikel kan bestellen.

als je het helemaal mooi wil hebben;
Facturen
factuur_nr, Klant_nummer,gewenste_leverdatum,min_leverdatum,totaal_prijs, status ,betaald
(ontvangen , niet ontvangen)

verkooporder regel
factuur_nr , Productnummer, Product_naam,aantal,product_gewicht, Prijs

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)
orders kunnen ook anders worden weergegeven.

order ( order_id, klant_nr,lever_adres,gewenste_leverdatum, bestelde_datum, status)
orderregel ( order_id , item_id ,omschrijving, aantal , prijs ,opmerkingen)

Prijs zet je op order regel zodat de klant niet na afloop duurder hoeft te betalen of goedkoper!
dit om misverstanden te voorkomen.

btw prijs is de prijs die op het moment van bestellen is gebruikt en niet zoals het in het artikelbestand staat

en als ze verwerkt zijn update je ze naar het archief ( simpel php code + query aan vastzetten , ideale oplossing om verwerkte orders in op te slaan.)

archief_order()
archier_orderregel () zelfde velden

[ Bericht 5% gewijzigd door cablegunmaster op 08-01-2009 18:30:32 ]
Redacted
  vrijdag 9 januari 2009 @ 10:02:57 #286
181657 LordNemephis
computer says no
pi_64841571
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
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
pi_64843552
quote:
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
PHP kan dat niet Je zal daar dus een programma als Ffmpeg (geen idee of die dat kan) voor moeten gebruiken die je aanroept vanuit je PHP.
  vrijdag 9 januari 2009 @ 11:02:31 #288
12221 Tijn
Powered by MS Paint
pi_64843731
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.
  vrijdag 9 januari 2009 @ 11:31:38 #289
181657 LordNemephis
computer says no
pi_64844830
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.
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?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
  vrijdag 9 januari 2009 @ 11:33:33 #290
12221 Tijn
Powered by MS Paint
pi_64844911
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?
Ja, gratis is er sowieso weinig anders te vinden op dit gebied.
pi_64852464
Heb weer eens een query vraagje.

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'.

Als ik nu een query wil loslaten op a waarvoor geldt dat de 'enabled' op 'Y' staat in tabel b..

1select * from a,b where a.naam=b.naam and b.enabled='Y'


Dit werkt, maar het kan volgens mij ook met een join. Zouden jullie dit ook met een join doen, of zie ik nog een andere oplossing over het hoofd?
pi_64852568
Wat je nu doet is hetzelfde als:

1
2
3
4
5
SELECT *
FROM a
JOIN b
ON a.naam = b.naam
WHERE b.enabled = 'Y';
pi_64853058
Dat bedacht ik me na het posten ook, het ziet er in ieder geval beter uit voor de queries die ik gebruik.
pi_64853357
quote:
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'.
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).
pi_64853610
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).
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.

Maar voor booleans zal ik dan voortaan wel 0 en 1 gebruiken .

[ Bericht 8% gewijzigd door Gloeidoos op 09-01-2009 15:33:50 ]
pi_64855279
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!!
Zou voor geen van die beide gaan... zou voor het volgende gaan...
- klant_nummer, product_nummer, status

product_nummer, product_naam, product_gewicht en prijs zijn namelijk zaken die allemaal gerelateerd zijn aan het product waar je dus een aparte tabel voor hebt...

en p.s. in status moet je dan bijvoorbeeld bij denken, in behandeling, verzonden, ontvangen etc... kortom de stappen die jou product maakt tot het bij de klant is.
pi_64856652
quote:
Op vrijdag 9 januari 2009 14:58 schreef HuHu het volgende:
Wat je nu doet is hetzelfde als:
[ code verwijderd ]
Of, nog een andere optie:
1
2
3
4
5
SELECT *
FROM a
JOIN b
USING (naam)
WHERE b.enabled = 'Y';
  vrijdag 9 januari 2009 @ 17:21:17 #298
187069 slacker_nl
Sicko pur sang
pi_64858506
quote:
Op vrijdag 9 januari 2009 14:58 schreef HuHu het volgende:
Wat je nu doet is hetzelfde als:
[ code verwijderd ]
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';

?
In theory there is no difference between theory and practice. In practice there is.
pi_64860148
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';

?
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.
  vrijdag 9 januari 2009 @ 18:23:43 #300
46383 Tiemie
sowieso wel!
pi_64860586
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.
En ik vind het ook een stuk leesbaarder.
  vrijdag 9 januari 2009 @ 18:38:35 #301
136730 PiRANiA
All thinking men are atheists.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')