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 | $from['Lat'] = 51.5007359; $from['Lng'] = 3.6112547; $iRadius = 100; $istartlat = $from['Lat']; $istartlong = $from['Long']; $LatRange = ($iRadius / ((6076 / 5280) * 60)); $floatthis = ($iStartLat * 3.141592653589 / 180); $LongRange = ($iRadius / (((cos(settype($floatthis, "float")) * 6076.) / 5280.) * 60)); $LowLatitude = ($istartlat - $LatRange); $HighLatitude = ($istartlat + $LatRange); $LowLongitude = ($istartlong - $LongRange); $HighLongitude = ($istartlong + $LongRange); echo " SELECT * FROM cor WHERE cor.Lat <= $HighLatitude AND cor.Lat >= $LowLatitude AND cor.Lng >= $LowLongitude AND cor.Lng <= $HighLongitude "; ?> |
quote:Pi is often usefull in con/sin/tan functions..
There are also other Pi related constants.
These are most of them:
M_PI = 3.14159265358979323846 // pi
// The following were added in PHP 4.0.0
M_PI_2 = 1.57079632679489661923 // pi/2
M_PI_4 = 0.78539816339744830962 // pi/4
M_1_PI = 0.31830988618379067154 // 1/pi
M_2_PI = 0.63661977236758134308 // 2/pi
M_SQRTPI = 1.77245385090551602729 // sqrt(pi) (Only in PHP 4.0.2+)
M_2_SQRTPI = 1.12837916709551257390 // 2/sqrt(pi)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function getRadiusCords($radius, $startLat, $startLong){ $radius = ($radius * 0.50); $latRange = ($radius / ((6076 / 5280) * 60)); $floatthis = ($startLat * pi() / 180); $longRange = ($radius / (((cos(settype($floatthis,"float")) * 6076.8) / 5280) * 60)); return "( cor.Lat <= ".($startLat + $latRange)." AND cor.Lat >= ".($startLat - $latRange)." AND cor.Lng >= ".($startLong - $longRange)." AND cor.Lng <= ".($startLong + $longRange)." )"; } ?> |
Korte tip: de constanten gebruiken is altijd beter als weer een extra functieaanroep (performance-wise).. Dat geldt voor wel meer dingen in PHP... __CLASS__ in plaats van get_class($this), PHP_VERSION in plaats van phpversion(), en dat soort dingenquote:Op zondag 21 juni 2009 14:23 schreef Light het volgende:
Er is ook een functie pi()
Uit het commentaar daar:
[..]
En afgezien daarvan vind ik pi() en M_PI beter leesbaar dan 3.14159265358979323846quote:Op maandag 22 juni 2009 00:32 schreef Intrepidity het volgende:
[..]
Korte tip: de constanten gebruiken is altijd beter als weer een extra functieaanroep (performance-wise).. Dat geldt voor wel meer dingen in PHP... __CLASS__ in plaats van get_class($this), PHP_VERSION in plaats van phpversion(), en dat soort dingen
Tevens goed gemaskeerde TVP
Ach, ik heb wel eens gekker gezien hoorquote:Op maandag 22 juni 2009 09:01 schreef Light het volgende:
[..]
En afgezien daarvan vind ik pi() en M_PI beter leesbaar dan 3.14159265358979323846
1 |
Het werkt sowieso gewoon niet. In de eerste plaats selecteer je postcodes uit een 'vierkant', en niet binnen een cirkel. Ten tweede is de aarde een bol, en lopen de meridianen niet parallel. Wat je kunt doen is de range vrij groot houden, en dan in een postprocessing stap alle postcodes die je terugkrijgt nog even te checken door de daadwerkelijke afstand uit te rekenen. Hoe je dat doet staat hier:quote:Op zondag 21 juni 2009 14:43 schreef Likkende_Lassie het volgende:
@light, thanks,
Functie is nu als volgt geworden:
[ code verwijderd ]
Lijkt nu 100% te werken. Toch nog even goed testen
Wat ik wel erg raar vind, is dat ik de $radius moet vermenigvuldigen met 0.50 zodat ik kilometers kan gebruikenErgens moet er dan iets fout zijn, want eigenlijk zou ik het moeten vermenigvuldigen met 0.62
Ik hoop van harte dat PHP niet zo brak is, dat dat het geval is.quote:Op maandag 22 juni 2009 00:32 schreef Intrepidity het volgende:
Korte tip: de constanten gebruiken is altijd beter als weer een extra functieaanroep (performance-wise).
Hoezo? constanten staan altijd in geheugen.. Functieaanroep betekent extra dingen op de stack, geheugenlocatie veranderen, uitvoeren van die functie, terugspringen naar vorige locatie.. Dat is in iedere taal zo.. Functieaanroepen geven nou eenmaal overhead omdat ze aanzienlijk complexer zijn dan even een variabele uit het geheugen vissen.. Je moet gewoon geen functies gebruiken voor enkele regels code en dat soort ongein.. Waarschijnlijk doet pi() niets anders dan return M_PI;quote:Op maandag 22 juni 2009 11:33 schreef Catbert het volgende:
[..]
Ik hoop van harte dat PHP niet zo brak is, dat dat het geval is.
1 2 3 4 5 6 7 8 | <td width="327"> <select name="name" type="text" class="tabel" id="name"> <option>jongen</option> <option>meisje</option> </td> </tr> |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <td width="47"><label for="age" class="lettertype"><?php echo JText::_('AGE'); ?></label></td> <td width="327"> <select name="age" type="text" class="tabel" id="age" size="1" maxlength="2" /> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> </td> </tr> |
1 |
quote:Op maandag 22 juni 2009 13:07 schreef cablegunmaster het volgende:
ik bedoel we echoeen het in een textarea we hebben al <br> en nu willen we dat die enters veroorzaken ipv /n
is hier iets mogelijk voor?
want hij echo't plaint text.
1 2 3 4 5 6 7 8 9 10 11 12 | /** * Convert BR tags to nl * * @param string The string to convert * @return string The converted string */ function br2nl($string) { return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string); } ?> |
Al sinds C worden simpele functies geinlined, dit geldt ook voor functies waar hele simpele berekeningen gedaan worden. Je moet de compiler / runtime lekker dat soort optimalisaties laten doen. Moeilijk gaan doen over een functieaanroep is gewoon premature optimization. Helemaal als het ten koste gaat van leesbaarbeid (__CLASS__ is een goed voorbeeld, WTF?) is het gewoon een slecht idee.quote:Op maandag 22 juni 2009 11:47 schreef Intrepidity het volgende:
Hoezo? constanten staan altijd in geheugen.. Functieaanroep betekent extra dingen op de stack, geheugenlocatie veranderen, uitvoeren van die functie, terugspringen naar vorige locatie.. Dat is in iedere taal zo..
quote:Op maandag 22 juni 2009 13:21 schreef Swetsenegger het volgende:
[..]
1
2
3
4
5
6<?php
function br2nl($string)
{
return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}
?>
1 2 3 4 5 6 | function br2nl($string) { return preg_replace('/\<br\s*\/?\>/i', "\n", $string); } ?> |
Maar ik selecteer helemaal geen postcodes, maar coordinaten.quote:Op maandag 22 juni 2009 11:27 schreef Catbert het volgende:
[..]
Het werkt sowieso gewoon niet. In de eerste plaats selecteer je postcodes uit een 'vierkant', en niet binnen een cirkel. Ten tweede is de aarde een bol, en lopen de meridianen niet parallel. Wat je kunt doen is de range vrij groot houden, en dan in een postprocessing stap alle postcodes die je terugkrijgt nog even te checken door de daadwerkelijke afstand uit te rekenen. Hoe je dat doet staat hier:
http://www.movable-type.co.uk/scripts/gis-faq-5.1.html
Oh, en dat je door 0.5 moet delen komt waarschijnlijk doordat uitgegaan wordt van zeemijlen i.p.v. landmijlen. Een zeemijl is 1.85 km ongeveer, en komt dus dicht bij 2km. Je factor zou dus 1/1.85 = 0.54 moeten zijn.
En toch scheelt het 20-25%:quote:Op maandag 22 juni 2009 15:16 schreef Catbert het volgende:
[..]
Al sinds C worden simpele functies geinlined, dit geldt ook voor functies waar hele simpele berekeningen gedaan worden. Je moet de compiler / runtime lekker dat soort optimalisaties laten doen. Moeilijk gaan doen over een functieaanroep is gewoon premature optimization. Helemaal als het ten koste gaat van leesbaarbeid (__CLASS__ is een goed voorbeeld, WTF?) is het gewoon een slecht idee.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Constante $timestart = microtime(); for($i = 0; $i < 10000; $i++) { $pi = M_PI; } $timeconst = (microtime() - $timestart); echo "Tijd voor 10.000 x constante: " . $timeconst . "<br />"; // Functieaanroep $timestart = microtime(); for($i = 0; $i < 10000; $i++) { $pi = pi(); } $timefunc = (microtime() - $timestart); echo "Tijd voor 10.000 x functieaanroep: " . $timefunc . "<br />"; echo "Factor func. vs const.: " . $timefunc / $timeconst; ?> |
1 2 3 | Tijd voor 10.000 x functieaanroep: 0.0015500000000001 Factor func. vs const.: 1.2409927942355 |
Waarschijnlijk is je encoding nog gewoon ASCII of UTF-8 (ook al zegt je instruction dat het om UTF-16 gaat). Om dit te controleren, open het betreffende XML-bestand met een teksteditor die ook ondersteuning biedt om in verschillende encodings op te slaan (i.e. niet notepad), of open je document in een hex-editor en verifieer dat elk karakter uit 2 bytes bestaat (en niet 1).quote:Op maandag 22 juni 2009 11:05 schreef Intrepidity het volgende:
Iemand ervaring met UTF-16 in combinatie met SimpleXML/DOM? Ik wil een XML-bestand openen in SimpleXML of DOM, maar krijg de volgende error: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found
Dit teken staat er wel degelijk, en er staat geen witregel of spatie voor. Zodra ik de inhoud van dit bestand in een string stop in PHP en de string probeer te laden gaat het wel goed..
BOM?quote:Op maandag 22 juni 2009 11:05 schreef Intrepidity het volgende:
Iemand ervaring met UTF-16 in combinatie met SimpleXML/DOM? Ik wil een XML-bestand openen in SimpleXML of DOM, maar krijg de volgende error: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found
Dit teken staat er wel degelijk, en er staat geen witregel of spatie voor. Zodra ik de inhoud van dit bestand in een string stop in PHP en de string probeer te laden gaat het wel goed..
Betreffende eerste regel:
[ code verwijderd ]
1 2 3 4 5 6 | 1 1 10 s 2 1 10 m 3 1 10 l 4 1 12567431 l 5 1 10678096 m |
1 2 3 | <tr><td>Kleur:</td><td>12567431</td><td>maat</td>l</td></tr> <tr><td>Kleur:</td><td>10678096</td><td>maat</td>m</td></tr> |
apart tabelletje voor maten, en die linken aan het id?quote:Op maandag 22 juni 2009 23:10 schreef Swetsenegger het volgende:
Ik heb mezelf weer in een lastige mysql hoek gemanoeuvreerd....
[ code verwijderd ]
Nu moet ik als de artID en kleur gelijk is dit behandelen als 1 product in verschillende maten. Dus bovenstaand moet als volgt geparsed worden
[ code verwijderd ]
Hoe ga ik dit het handigst aanpakken. Ik zat er zelf aan te denken om in de while lus te controleren of de kleur gelijk is aan het vorige rondje, maar.... hoe pas ik dan de cel 'maat' aan in de regel ervoor....
Iemand een briljant idee?
Dat lijkt me idd de beste optiequote:Op maandag 22 juni 2009 23:13 schreef GlowMouse het volgende:
Niet je output eruit gooien middenin je code. Eerst een arraytje opbouwen $data[$artid][$kleur][] = $row.
Als je het in een andere tabel zet zoals jij voorstelt, dan zul je alsnog wat met mijn post moeten doen.quote:Op maandag 22 juni 2009 23:55 schreef PiRANiA het volgende:
[..]
Ondanks alle redundante data die op deze manier blijft bestaan?
Het is nu al in 3 tabellen opgebroken ivm de schaalbaarheid. Hoofdeigenschappen (die voor elke kleur en maat gelden) dan de eigenschappen zoals kleur, maat, etc. en een tabel foto's.quote:Op maandag 22 juni 2009 23:12 schreef PiRANiA het volgende:
[..]
apart tabelletje voor maten, en die linken aan het id?
Hmz, help me even op weg, hoe krijg ik in mijn while lus de info bij gelijke kleur in desbetreffende array entry erbij geschoven? Als ik als key gewoon de kleur pak kan ik natuurlijk de value manipuleren.... toch?quote:Op maandag 22 juni 2009 23:13 schreef GlowMouse het volgende:
Niet je output eruit gooien middenin je code. Eerst een arraytje opbouwen $data[$artid][$kleur][] = $row.
proberen en falenquote:Op dinsdag 23 juni 2009 08:23 schreef Swetsenegger het volgende:
[..]
Het is nu al in 3 tabellen opgebroken ivm de schaalbaarheid. Hoofdeigenschappen (die voor elke kleur en maat gelden) dan de eigenschappen zoals kleur, maat, etc. en een tabel foto's.
[..]
Hmz, help me even op weg, hoe krijg ik in mijn while lus de info bij gelijke kleur in desbetreffende array entry erbij geschoven? Als ik als key gewoon de kleur pak kan ik natuurlijk de value manipuleren.... toch?
dus als hij het uitvoert lockt hij de tabel?quote:
Je wil toch de insert_id gebruiken van table 1 om in table 2 te gebruiken of begrijp ik je nu verkeerd?quote:Op dinsdag 23 juni 2009 09:16 schreef cablegunmaster het volgende:
[..]
dus als hij het uitvoert lockt hij de tabel?
kan ik geen row lock doen?en voor 1x de variabele ophalen en dan in de foreach het eruithalen en daar een variabele gebruiken ?
![]()
Ja ik begrijp hoe een lusje werkt. Het ging me om de array manipulatiequote:Op dinsdag 23 juni 2009 09:15 schreef cablegunmaster het volgende:
[..]
proberen en falenals het in de database staat kun je een variabele where kleur = ' ".$kleur" ' doen en dat foreach $array as $id en daarna het weer outputten
jup. dat wil ik doenquote:Op dinsdag 23 juni 2009 09:18 schreef Swetsenegger het volgende:
[..]
Je wil toch de insert_id gebruiken van table 1 om in table 2 te gebruiken of begrijp ik je nu verkeerd?
Hij locked de table tot jij hem unlocked.quote:Op dinsdag 23 juni 2009 09:26 schreef cablegunmaster het volgende:
[..]
jup. dat wil ik doenvoor die 0.00005 sec lockt hij de tabel?
![]()
Dat heb ik net uitgelegd. Je selecteert alle coordinaten in een vierkant, niet in een cirkel. Daarnaast lopen de meridianen niet parellel. Daarom kun je beter nafilteren door naderhand nauwkeuriger de exacte afstanden uit te rekenen zodat daadwerkelijk alles binnen een straal krijgt.quote:Op maandag 22 juni 2009 16:58 schreef Likkende_Lassie het volgende:
Maar ik selecteer helemaal geen postcodes, maar coordinaten.
Toch werkt het zo goed hoor, waarom zou het niet moeten werken?
Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:quote:Op maandag 22 juni 2009 18:18 schreef Intrepidity het volgende:
En toch scheelt het 20-25%:
[ code verwijderd ]
Resultaat:
[ 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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | { LoopTest test; test = new LoopTest(); test.test1(); test.test2(); test.test1(); test.test2(); test.test1(); test.test2(); test.test1(); test.test2(); } public void test1() { long ms = System.currentTimeMillis(); for(int i = 0;i < 1000000000;i++) { double pi = Math.PI; } ms = System.currentTimeMillis() - ms; System.out.println("Test 1 took " + ms + "ms."); } public void test2() { long ms = System.currentTimeMillis(); for(int i = 0;i < 1000000000;i++) { doStuff(); } ms = System.currentTimeMillis() - ms; System.out.println("Test 2 took " + ms + "ms."); } private void doStuff() { double pi = Math.PI; } } |
Klopt, en omdat PHP geen perfecte taal is heeft het wel degelijk zin om constanten in plaats van functieaanroepen te gebruiken, dat was m'n punt..quote:Op dinsdag 23 juni 2009 10:47 schreef Catbert het volgende:
Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:
[ code verwijderd ]
array_push($data[$id][$kleur], $data_from_table) ?quote:Op dinsdag 23 juni 2009 09:19 schreef Swetsenegger het volgende:
[..]
Ja ik begrijp hoe een lusje werkt. Het ging me om de array manipulatie
Ik zeg niet dat het perse slecht is, maar niet als het ten koste gaat van de leesbaarheid van je code. Da's m'n punt. Math.PI bijvoorbeeld is een constante die iedereen gebruikt, en ook prima leesbaar is. Die __CLASS__ ofzo constante is IMHO een nono.quote:Op dinsdag 23 juni 2009 10:54 schreef Intrepidity het volgende:
Klopt, en omdat PHP geen perfecte taal is heeft het wel degelijk zin om constanten in plaats van functieaanroepen te gebruiken, dat was m'n punt..
Gelukkig is het je humble opinion.quote:Op dinsdag 23 juni 2009 11:09 schreef Catbert het volgende:
[..]
Ik zeg niet dat het perse slecht is, maar niet als het ten koste gaat van de leesbaarheid van je code. Da's m'n punt. Math.PI bijvoorbeeld is een constante die iedereen gebruikt, en ook prima leesbaar is. Die __CLASS__ ofzo constante is IMHO een nono.
Euh, ja?quote:
Dat fijn. Uiteindelijk is m'n ultieme doel hier mensen blij te makenquote:
Hmm... als ik die code uitvoer kom ik toch tot iets andere getallen:quote:Op dinsdag 23 juni 2009 10:47 schreef Catbert het volgende:
Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:
[ code verwijderd ]
Test 1 took 673ms.
Test 2 took 943ms.
Test 1 took 645ms.
Test 2 took 931ms.
Test 1 took 616ms.
Test 2 took 610ms.
Test 1 took 619ms.
Test 2 took 633ms.
Je ziet na de 2e test2 run dat de VM 'ziet' wat test 2 doet en het voor je gaat optimaliseren. Ik hoop van harte dat PHP dergelijke zaken ook doet, anders is het te brak voor woorden.
BTW: als je testjes maakt, gebruik dan alsjeblieft meer iteraties dan 10000, dat zegt echt niks.
Je hebt zeker de server VM switch gebruikt? Dan gaat 'ie harder optimaliseren en komt tot de conclusie dat wat 'ie doet compleet zinloos isquote:Op dinsdag 23 juni 2009 15:11 schreef Light het volgende:
Hmm... als ik die code uitvoer kom ik toch tot iets andere getallen:
Test 1 took 4ms.
Test 2 took 3ms.
Test 1 took 3ms.
Test 2 took 0ms.
Test 1 took 0ms.
Test 2 took 0ms.
Test 1 took 0ms.
Test 2 took 0ms.
En dan maakt het niet uit of de loopjes in test1() en test2() tot 1.000.000.000 of tot 2.000.000.000 gaan.
Nee, ik deed java zonder switches. Nu zie ik wel in de help staan dat de default de server VM is, omdat het een server-class machine is. Misschien moet ik het ook niet op een server draaienquote:Op dinsdag 23 juni 2009 15:47 schreef Catbert het volgende:
[..]
Je hebt zeker de server VM switch gebruikt? Dan gaat 'ie harder optimaliseren en komt tot de conclusie dat wat 'ie doet compleet zinloos is
1 2 3 4 5 6 7 8 9 10 | Impact</td><td>Impact:<select name="impact"> <option value=""> - </option> <option value="1">Hoog</option> <option value="2">Middel</option> <option value="3">Laag</option> <option value="4">Geen</option> </select> ?> |
Volgens mij moet je selected hebben, niet checked.quote:Op woensdag 24 juni 2009 00:15 schreef cablegunmaster het volgende:
ik heb een drop down menu , en nu wil ik dat hij blijft staan op de waarde die hij uit de database haalt bvb
[ code verwijderd ]
en nu wil ik dat hij checked invoert bij het getalhoe kan ik dit doen?
Maak een array met als keys de waardes (1, 2, 3, etc) en als values de bijbehorende teksten (laag, middel, hoog, etc). Dan haal je uit de database welke optie is geselecteerd (een id). Je gaat gewoon de array met opties af, en bij het weergeven check je iedere keer even of het id misschien toevallig gelijk is aan de key bij de optie die je gaat weergeven.quote:de impact haalt hij uit de database.maar ik wil de andere opties ook kunnen weergeven dus ik dacht een switch maar dan echo je de options 4 * 4 erin.
moet makkelijker te doen zijn
ook een goeie optie.. beter dan brunod die gebruikte ik eerst. maar dat is ook niet zo productief.quote:Op woensdag 24 juni 2009 00:27 schreef Light het volgende:
[..]
Volgens mij moet je selected hebben, niet checked.
[..]
Maak een array met als keys de waardes (1, 2, 3, etc) en als values de bijbehorende teksten (laag, middel, hoog, etc). Dan haal je uit de database welke optie is geselecteerd (een id). Je gaat gewoon de array met opties af, en bij het weergeven check je iedere keer even of het id misschien toevallig gelijk is aan de key bij de optie die je gaat weergeven.
1 2 3 4 | SELECT TIMESTAMPDIFF(MINUTE,LogOutTime,LogInTime) AS TimeLoggedIn FROM LogTable ?> |
1 2 3 4 5 6 7 8 | $output = strtotime($row['datum_tijd_open']); $output2 = strtotime($row['datum_tijd_gesloten']); $temp = $output - $output2; echo " ".date('d',$temp).' Dagen '; echo date('m',$temp).' Maand '; echo date('Y',$temp).' Jaar verschil'; ?> |
Dat komt omdat je een verschil in tijd om gaat zetten naar een daadwerkelijke datum middels de date() functie. Dat kan niet.quote:Op donderdag 25 juni 2009 09:30 schreef cablegunmaster het volgende:
Ik kom er niet uit : ikl probeerde een functie om de tijd te berekenen tussen 2 datums alleen nu krijg ik de hele tijd het probleem dat de tijden tijdens 0:00 negatief worden. want 23:00 is natuurlijk groter.
Hoe kan ik simpel 2 velden met datetime van elkaar aftrekken?![]()
[ code verwijderd ]
is een functie die me niet hielp. hij gaf me negatieve waardes bij bepaalde tijden.
[ code verwijderd ]
Hieruit krijg ik een heel andere waarde 1976 jaar 17 dagen etc... maar de minuten en seconde kloppen wel.
1 2 3 4 5 6 7 8 9 10 | $output = strtotime($row['datum_tijd_open']); $output2 = strtotime($row['datum_tijd_gesloten']); $diff = $output - $output2; $dagen = $diff / 86400; $uren = ($diff % 86400) / 3600; $minuten = (($diff % 86400) % 3600) / 60; $seconden = ((($diff % 86400) % 3600) % 60) / 1; // die /1 kan natuurlijk weg, gaat om het idee ?> |
hoe pak je daar alleen de getallen voor de komma?quote:Op donderdag 25 juni 2009 09:54 schreef HuHu het volgende:
[..]
Dat komt omdat je een verschil in tijd om gaat zetten naar een daadwerkelijke datum middels de date() functie. Dat kan niet.
Een timestamp van 0 staat gelijk aan 1 januari 1970 @ 00:00 en dus niet gelijk aan 1 januari 0 @ 00:00. Dat laatste is wat je zou willen als je wilt weten hoeveel jaren/maanden/weken/dagen/uren/minuten/seconden er tussen 2 datums zitten.
Je kunt het met de hand uitrekenen:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | SELECT leverancier.naam AS naam, incident.incidentid AS id, incident.systeem_naam AS Systeemnaam, datum_tijd_open AS 'Datumtijdmelding', incident.omschrijving AS 'omschrijving', incident.workaround AS 'Workaround', component.leverancier AS Leverancier, component.merk AS merk, component.soort AS 'apparaattype',component.aanschaf_jaar AS 'aanschaf' FROM incident INNER JOIN component ON incident.systeem_naam = component.systeem_naam INNER JOIN leverancier ON component.leverancier = leverancier.leverancier_id WHERE incident.omschrijving IN ( SELECT incident.omschrijving FROM incident GROUP BY omschrijving HAVING ( SELECT COUNT(incident.omschrijving) FROM incident WHERE incident.probleemid = '0') >=2 ) ORDER BY incident.omschrijving"; ?> |
Aangepast en werkendquote:Op donderdag 25 juni 2009 09:54 schreef HuHu het volgende:
[..]
Dat komt omdat je een verschil in tijd om gaat zetten naar een daadwerkelijke datum middels de date() functie. Dat kan niet.
Een timestamp van 0 staat gelijk aan 1 januari 1970 @ 00:00 en dus niet gelijk aan 1 januari 0 @ 00:00. Dat laatste is wat je zou willen als je wilt weten hoeveel jaren/maanden/weken/dagen/uren/minuten/seconden er tussen 2 datums zitten.
Je kunt het met de hand uitrekenen:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | if(isset($row['datum_tijd_gesloten']) && $row['status'] == 'Gesloten') { $output = strtotime($row['datum_tijd_open']); $output2 = strtotime($row['datum_tijd_gesloten']); }elseif($row['status'] != 'Gesloten'){ $output = strtotime($row['datum_tijd_open']); $date = date('Y-m-d H:i:s'); $output2 = strtotime($date); } $diff = $output2 - $output; $dagen = floor($diff / 86400); $uren = floor(($diff % 86400) / 3600); $minuten = floor((($diff % 86400) % 3600) / 60); $seconden = floor(((($diff % 86400) % 3600) % 60)); // die /1 kan natuurlijk weg, gaat om het idee if($row['status'] == 'Gesloten') { echo "Het probleem duurde ".$dagen." dagen ".$uren." uur ".$minuten." minuten ".$seconden." seconden"; }else{ echo "Het probleem duurt al ".$dagen." dagen ".$uren." uur ".$minuten." minuten ".$seconden." seconden"; } ?> |
Opgelost met een where en een andquote:Op donderdag 25 juni 2009 12:13 schreef cablegunmaster het volgende:
[..]
hoe pak je daar alleen de getallen voor de komma?en een groot probleem. Deze query ben ik 0,5 dag mee bezig geweest om te formuleren.
[ code verwijderd ]
alleen nu geeft hij na toevoegen van problemen ook incidenten terug die meer dan 2 rijen heeft
en probleem id 0 hoe los ik dit op?![]()
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 | echo "<h5><font color=#ff9900><b>Deze week:</b></font></h5><hr>"; global $mainframe; $db =& JFactory::getDBO(); $today_month = date( 'm', $time); $query = "SELECT * FROM jos_eventlist_events WHERE ((WEEK(dates) = WEEK(now() + INTERVAL 0 WEEK) AND YEAR(dates) = YEAR(now() + INTERVAL 0 WEEK)) OR (WEEK(now() + INTERVAL 0 WEEK BETWEEN WEEK(dates) AND WEEK(enddates)) AND YEAR(now() + INTERVAL 0 WEEK BETWEEN YEAR(dates) AND YEAR(enddates)))) GROUP BY dates ORDER BY dates, times ASC limit 25"; $db->setQuery( $query, 0, $count ); $rows = $db->loadObjectList(); echo '<ul>'; foreach($rows as $row) { echo " <b><a href='$JURI index.php?option=com_eventlist&view=details&id=$row->id'>$row->title </a></b><BR /> <li>Wanneer: <b>$row->dates</b><BR /> Aanvang: $row->times<BR /><BR /> </li>"; } if (empty($row)) { echo 'Er zijn geen evenementen deze week!<br>Check volgende week nog eens.'; } echo '</ul><hr>'; ?> |
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 | echo "<h5><font color=#ff9900><b>Deze week:</b></font></h5><hr>"; global $mainframe; $db =& JFactory::getDBO(); $today_month = date( 'm', $time); $query = "SELECT * FROM jos_eventlist_events WHERE published=1 AND ((WEEK(dates) = WEEK(now() + INTERVAL 0 WEEK) AND YEAR(dates) = YEAR(now() + INTERVAL 0 WEEK)) OR (WEEK(now() + INTERVAL 0 WEEK BETWEEN WEEK(dates) AND WEEK(enddates)) AND YEAR(now() + INTERVAL 0 WEEK BETWEEN YEAR(dates) AND YEAR(enddates)))) GROUP BY dates ORDER BY dates, times ASC limit 25"; $db->setQuery( $query, 0, $count ); $rows = $db->loadObjectList(); echo '<ul>'; foreach($rows as $row) { echo " <b><a href='$JURI index.php?option=com_eventlist&view=details&id=$row->id'>$row->title </a></b><BR /> <li>Wanneer: <b>$row->dates</b><BR /> Aanvang: $row->times<BR /><BR /> </li>"; } if (empty($row)) { echo 'Er zijn geen evenementen deze week!<br>Check volgende week nog eens.'; } echo '</ul><hr>'; ?> |
Volgens mij niet die or is puur voor de 2 datum selectiesquote:Op vrijdag 26 juni 2009 13:39 schreef Scorpie het volgende:
Je moet ook in de OR clause een published = 1 zetten
Het script verwacht dat er via GET of POST een veld "comment" wordt meegestuurd, maar dat gebeurt niet. Dan krijg je die melding.quote:Op zaterdag 27 juni 2009 16:46 schreef Gruning3r het volgende:
Kan iemand me helpen, soms krijg ik deze melding bij mijn gastenboek.Notice: Undefined index: comment op regel 111 dit is de regel $comment =$_REQUEST["comment"];
alvast bedankt.![]()
Maar hoe kan ik het oplossen dan? alvast bedanktquote:Op zaterdag 27 juni 2009 16:49 schreef Light het volgende:
[..]
Het script verwacht dat er via GET of POST een veld "comment" wordt meegestuurd, maar dat gebeurt niet. Dan krijg je die melding.
quote:Op zaterdag 27 juni 2009 16:46 schreef Gruning3r het volgende:
Kan iemand me helpen, soms krijg ik deze melding bij mijn gastenboek.Notice: Undefined index: comment op regel 111 dit is de regel $comment =$_REQUEST["comment"];
alvast bedankt. ^O^ :D
1 2 3 | $comment = isset($_REQUEST['comment'])?$_REQUEST['comment']:"Default"; ?> |
quote:Op zaterdag 27 juni 2009 22:14 schreef wobbel het volgende:
Hoe maak ik eigenlijk een simpel PHP/MySQL navigatie systeem?
Dat ik dus 50150 resultaten netjes per 50 kan opdelen, met onderaan < Vorige | 1-2-3-4-5-6-7 | Volgende > enzo...
1 2 3 4 5 6 7 8 | $page = isset($_REQUEST['page'])?($_REQUEST['page'] - 1)*50:0; while($row = mysql_fetch_assoc(mysql_query("SELECT * FROM table LIMIT ".$page.",50")) { //blablabla } ?> |
Owjah, dat was hetquote:Op zondag 28 juni 2009 11:33 schreef FastFox91 het volgende:
@Wobbel
" With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15"
Je krijgt dus maximaal tien terug, omdat er maar zeven rijen zijn krijg je er minder terug. Maar zes rijen terug verwachten is sowieso fout.
Aan het eind van het laden opslaan lijkt me vele malen makkelijker dan via memcached en een cronjob?quote:Op zaterdag 27 juni 2009 12:21 schreef Likkende_Lassie het volgende:
Momenteel ben ik bezig een web applicatie icm Google Maps.
Nu is het de bedoeling dat er uitgebreide stats worden bijgehouden, ook als een zogeheten marker per bedrijf wordt weergegeven.
Nu is dat bijhouden niet zo'n probleem, maar vraag ik me af hoe ik dit het beste kan doen qua performance:
Via memcached bijhouden welke markers/bedrijven er zijn weergegeven, vervolgens elke 5 min. een script laten draaien welke de memcached in de database stopt, en memcached opschoont.
Of aan het einde van het laden van alle markers deze met 1 query opslaan in de database...
Wat is het snelst en het meeste stabiel? Er van uitgaande dat er straks behoorlijk wat mensen gebruik gaan maken van de app.
het is idd een feit dat het direct uitvoeren van een query makkerlijker is, maar hoe zit het met de performance? en dus straks de totale load op de server.quote:Op zondag 28 juni 2009 12:08 schreef Xcalibur het volgende:
[..]
Aan het eind van het laden opslaan lijkt me vele malen makkelijker dan via memcached en een cronjob?
Bovendien heb je je data dan meteen. 1 insertquery kost natuurlijk helemaal geen tijd....
altijd leukquote:Op zondag 28 juni 2009 14:10 schreef wobbel het volgende:
Ik kwam er net achter dat ik gister 20 regels had getikt omdat ik moe was, maar daar ook gewoon een simpele functie voor bestond
En ik kwam er pas achter dat ik de hele json klasse uit m'n framework gewoon kon vervangen door calls naar json_encode en json_decodequote:Op zondag 28 juni 2009 14:10 schreef wobbel het volgende:
Ik kwam er net achter dat ik gister 20 regels had getikt omdat ik moe was, maar daar ook gewoon een simpele functie voor bestond
Hoezo moet je de status nog aanmaken? Zijn die voor ieder record verschillend dan?quote:Op zondag 28 juni 2009 13:17 schreef Likkende_Lassie het volgende:
[..]
het is idd een feit dat het direct uitvoeren van een query makkerlijker is, maar hoe zit het met de performance? en dus straks de totale load op de server.
het is toch een flinke update/insert/select query, select omdat het systeem de stats eventueel nog moet aanmaken.
Hoe onderhoud je die dan? In een CMS ofzo dus, textfile steeds opnieuw schrijven?quote:Op maandag 29 juni 2009 10:48 schreef Scorpie het volgende:
Ik zet vertalingen nooit in de database, maar in een aparte file.
Bij een CMS kan je onderscheid maken he. Je hebt dynamische content die de gebruiker zelf verzorgt (die zet je dan natuurlijk in de database), je hebt systeem meldingen (komen uit een resource file), en generieke meldingen (ook uit de resource file).quote:Op maandag 29 juni 2009 11:11 schreef Xcalibur het volgende:
[..]
Hoe onderhoud je die dan? In een CMS ofzo dus, textfile steeds opnieuw schrijven?
Ja dat is dus specifiek voor de dynamische content, daar maak ik mij niet zo druk om.quote:Ik gebruik altijd een centrale teksten tabel. Per record staat daarin om wat voor soort tekst het gaat (pagina, nieuwsbericht, etc. - tabelnaam dus), de ID van het betreffende pagina/nieuws-record, de taal en de tekst.
Klopt. Maar ik bouw meestal een CMS waarbij ik de labels van de velden e.d vastleg in een file, en niet in de database. Dacht dat je dat bedoelde.quote:Door middel van een join kan je die vrij eenvoudig ophalen, ook meerdere tekstrecords per pagina (voor de titel, inhoud, etc.) Voordeel is dat je *alle* tekst in 1 tabel hebt staan, en dat dus erg makkelijk te doorzoeken is enzoEen nieuwe taal toevoegen is een kwestie van alle tekstrecords van 1 taal dupliceren naar je nieuwe taal.
Wat ik persoonlijk doe is de vertalingen in een XML-file opslaanquote:Op maandag 29 juni 2009 11:11 schreef Xcalibur het volgende:
[..]
Hoe onderhoud je die dan? In een CMS ofzo dus, textfile steeds opnieuw schrijven?
Ik gebruik altijd een centrale teksten tabel. Per record staat daarin om wat voor soort tekst het gaat (pagina, nieuwsbericht, etc. - tabelnaam dus), de ID van het betreffende pagina/nieuws-record, de taal en de tekst.
Door middel van een join kan je die vrij eenvoudig ophalen, ook meerdere tekstrecords per pagina (voor de titel, inhoud, etc.) Voordeel is dat je *alle* tekst in 1 tabel hebt staan, en dat dus erg makkelijk te doorzoeken is enzoEen nieuwe taal toevoegen is een kwestie van alle tekstrecords van 1 taal dupliceren naar je nieuwe taal.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <config> Hier wat configuratieinstellingen voor de taal, zoals een foutmelding als er een vertaling niet gevonden is </config> <page name="home"> <group name="headers"> <constant name="kop">Welkom!</constant> </group> <group name="...">[...]</group> <constant name="blaat">Een vertaling mag ook buiten een groep staan, maar niet buiten een pagina</constant> </page> <page name="...">[...]</page> </language> |
Als je het een keer inlaadt en dan in-memory bewaard is het performance verschil tussen DB of flat file natuurlijk niet erg boeiend, maar hou er rekening mee dat in normale gevallen (dus niet dat je info maar een maal nodig hebt) DB requests over het algemeen sneller zijn dan flat files lezen. Zelf vind ik het vanuit een ontwerpstandpunt erg slordig om dergelijke dynamische data op een andere plek op te slaan dan waar de rest van je spul zit. M.i. kies je ervoor 'alles' in een DB te stoppen, of 'alles' via XML files te doen.quote:Op maandag 29 juni 2009 11:30 schreef Intrepidity het volgende:
Wat ik persoonlijk doe is de vertalingen in een XML-file opslaanMet SimpleXML en DOM en whatever kun je vanuit je CMS makkelijk muteren in dat soort bestanden, en de performance is over het algemeen een stuk beter als losse databasequeries. (aangezien ik de XML 1 keer parse en vervolgens het object bewaar. Dan wel zo min mogelijk gebruik maken van xpath queries, dat is redelijk zwaar).
Ik had het voornamelijk over dynamische teksten inderdaadquote:Op maandag 29 juni 2009 11:14 schreef Scorpie het volgende:
Klopt. Maar ik bouw meestal een CMS waarbij ik de labels van de velden e.d vastleg in een file, en niet in de database. Dacht dat je dat bedoelde.
Dit begrijp ik niet helemaal. Je laadt de hele XML (met *alle* tekst) 1x per pageload in?quote:Op maandag 29 juni 2009 11:30 schreef Intrepidity het volgende:
aangezien ik de XML 1 keer parse en vervolgens het object bewaar.
Nou ja, wat ik altijd vervelend vind is generieke teksten zoals Gebruiker / Login - Loguit enzo te moeten vervangen. Dat doe ik liever op 1 plek dan op meerdere. Maar ja das natuurlijk persoonsgebonden.quote:Op maandag 29 juni 2009 13:01 schreef Xcalibur het volgende:
[..]
Ik had het voornamelijk over dynamische teksten inderdaad
Vaste teksten zet ik hard in de template, met een aparte template map per taal. Vind ik een stuk gemakkelijker werken dan met een los tekstbestand. Zo kan ik tenminste gewoon zien waar een tekst staan enzo. Bovendien kan je dan per taal nog wat wijzigen in de template, om een of andere reden willen mijn klanten dat altijd
Wijzigingen in de template moet je in het slechtste geval een aantal keer doorvoeren, maar als je het goed doet kan het meeste via de CSS
Zo werkt dat nou eenmaal met methoden als SimpleXML. Bij het laden hiervan wordt de hele XML file geparsed en omgezet naar een object. Ik zorg dat dat object statisch blijft in de hele applicatie en dus maar 1 maal geparsed wordt per paginaverzoek. Eventueel kun je dat object zelfs nog cachen als je graag op performance let.quote:Op maandag 29 juni 2009 13:03 schreef Xcalibur het volgende:
[..]
Dit begrijp ik niet helemaal. Je laadt de hele XML (met *alle* tekst) 1x per pageload in?
Of stop je het ding in een sessie ofzo?
In het eerste geval lijkt me dat niet zo efficient als je een grote site hebt namelijk
Ik noem vertalingen van teksten niet dynamisch hoor.. Het gaat hier om teksten die eenmaal ingevoerd worden en hooguit een jaartje later wat geupdate worden. Dynamische data als nieuwsberichten zet ik gewoon in hun eigen tabel, dus titel_nl, titel_en kolommen, etc.quote:Op maandag 29 juni 2009 12:06 schreef Catbert het volgende:
[..]
Als je het een keer inlaadt en dan in-memory bewaard is het performance verschil tussen DB of flat file natuurlijk niet erg boeiend, maar hou er rekening mee dat in normale gevallen (dus niet dat je info maar een maal nodig hebt) DB requests over het algemeen sneller zijn dan flat files lezen. Zelf vind ik het vanuit een ontwerpstandpunt erg slordig om dergelijke dynamische data op een andere plek op te slaan dan waar de rest van je spul zit. M.i. kies je ervoor 'alles' in een DB te stoppen, of 'alles' via XML files te doen.
Euh, als het 'statisch' over heel de applicatie is, dan wordt het toch sowieso niet eens per pagina ingelezen? Ik snap dat het in PHP wat ingewikkelder is dan in .Net bijvoorbeeld maar dat kan je toch via shared geheugen oplossen?quote:Op maandag 29 juni 2009 13:26 schreef Intrepidity het volgende:
Zo werkt dat nou eenmaal met methoden als SimpleXML. Bij het laden hiervan wordt de hele XML file geparsed en omgezet naar een object. Ik zorg dat dat object statisch blijft in de hele applicatie en dus maar 1 maal geparsed wordt per paginaverzoek. Eventueel kun je dat object zelfs nog cachen als je graag op performance let.
Ja, ik heb ook een tijd met een tekstbestand per taal gewerkt, maar dat vond ik toch maar onhandig... vooral omdat je geen goed overzicht hebt waar je nou iets aan het wijzigen bent... En als je 1 tekst als Login wilt vervangen, maar alle andere niet is de kans dat het fout gaat wel aanzienlijkquote:Op maandag 29 juni 2009 13:04 schreef Scorpie het volgende:
[..]
Nou ja, wat ik altijd vervelend vind is generieke teksten zoals Gebruiker / Login - Loguit enzo te moeten vervangen. Dat doe ik liever op 1 plek dan op meerdere. Maar ja das natuurlijk persoonsgebonden.
Zoals het nu ingericht is (en dat zijn kleine klanten met weinig traffic) wordt die XML eens per request omgezet naar een SimpleXML object in PHP. Misschien bewaart .net dat soort objecten wel netjes voor je door middel van een viewstate of iets dergelijks (weinig verstand van .net), maar in PHP gebeurt dat zeker niet volautomatisch, en aangezien HTTP inherent stateless is is dat volgensmij ook niet eenvoudig toe te passen tenzij je caching technieken als memcache gaat inzetten.. Maar ik geef toe dat dat bij ons bedrijf door het gebrek aan heftige traffic nog geen issue is ook om dat soort optimalisaties toe te passen.. Die 0.001sec extra per request maakt met andere woorden geen drol uit.quote:Op maandag 29 juni 2009 14:18 schreef Catbert het volgende:
[..]
Euh, als het 'statisch' over heel de applicatie is, dan wordt het toch sowieso niet eens per pagina ingelezen? Ik snap dat het in PHP wat ingewikkelder is dan in .Net bijvoorbeeld maar dat kan je toch via shared geheugen oplossen?
xkcd ftw: http://nl2.php.net/gotoquote:Op dinsdag 30 juni 2009 15:12 schreef GlowMouse het volgende:
http://www.php.net/releases/5_3_0.php
Nu met goto
quote:
Heel ouderwets is nog een understatement. Ik zie er echt het nut niet van. Het wordt wel makkelijker om spaghetticode te schrijven, maar of je daar nou zo blij mee moet zijn...quote:Op dinsdag 30 juni 2009 15:33 schreef Xcalibur het volgende:
ik heb het gevoel dat goto iets heel ouderwets is?
Ik zie het nut er ook niet zo van eerlijk gezegd...
PHP heeft wat weg van C. Om de leercurve voor QBasicgebruikers minder stijl te maken, is deze feature toegevoegd.quote:Op dinsdag 30 juni 2009 22:09 schreef Xcalibur het volgende:
is het weer 1 april ofzo?
Of is dit nu echt een feature?
Bedankt, maar heb het toch met een mooie functie gedaan die een array uitpoept welke ik kan gebruikenquote:
Is dat echt de reden?quote:Op dinsdag 30 juni 2009 22:33 schreef GlowMouse het volgende:
[..]
PHP heeft wat weg van C. Om de leercurve voor QBasicgebruikers minder stijl te maken, is deze feature toegevoegd.
Ik denk het nietquote:Op dinsdag 30 juni 2009 23:03 schreef Xcalibur het volgende:
[..]
Is dat echt de reden?
Wtf... echt...
Het praktische nut staat uitgelegd op de pagina van PHP zelf: eenvoudig uit een loopje ontsnappen bijvoorbeeld. Maargoed, dat kan ook op een andere manier, dat wel.quote:Op dinsdag 30 juni 2009 23:17 schreef Xcalibur het volgende:
Ik kan me eigenlijk ook geen praktisch nut voorstellen....
De toevoeging ontgaat me daarom ook volledig
Maar dat was inmiddels wel duidelijk denk ik
Mjah, deze goto is alleen wel heel erg beperkt ten opzichte van de oude goto. Je kunt er dan ook weer niet alles meequote:Op woensdag 1 juli 2009 09:21 schreef cablegunmaster het volgende:
goto lijkt me ook weer vaag... het is een soort van dirty workaround in m'n ogen. oude dos commandos gebruikten goto.
Inderdaad. Je kunt, thank god, niet uit een methode of van buiten een methode inspringen. Maar dan nog zie ik het gebeuren dat kansloze prutsers hun hele script een grote method maken van 5 pagina's met overal goto's.quote:Op woensdag 1 juli 2009 09:24 schreef HuHu het volgende:
Mjah, deze goto is alleen wel heel erg beperkt ten opzichte van de oude goto. Je kunt er dan ook weer niet alles mee.
The horror!quote:Op woensdag 1 juli 2009 11:07 schreef HuHu het volgende:
Je kunt natuurlijk wel de hele OO structuur van je applicatie weggooien en vervolgens alles met GOTO's gaan oplossen in één grote blob. Dus geen functies of methoden meer gebruiken, maar goto-en naar een label en de return waarde globaal zetten en dan weer terug goto-en enzo.
En dan door een variabele laten bepalen waar je naar terug gaat goto-en?quote:Op woensdag 1 juli 2009 11:07 schreef HuHu het volgende:
Je kunt natuurlijk wel de hele OO structuur van je applicatie weggooien en vervolgens alles met GOTO's gaan oplossen in één grote blob. Dus geen functies of methoden meer gebruiken, maar goto-en naar een label en de return waarde globaal zetten en dan weer terug goto-en enzo.
Uiteraard. Met zo'n mooie if-elseif-else constructie:quote:Op woensdag 1 juli 2009 12:28 schreef Light het volgende:
[..]
En dan door een variabele laten bepalen waar je naar terug gaat goto-en?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | doeIetsLeuks: // lala $c = $a + $b; // allemaal globaal // We zijn klaar, waar gaan we nu naar terug? if ($gaTerugNaar == 'start') goto start; elseif ($gaTerugNaar == 'gevangenis') goto gevangenis; elseif ($gaTerugNaar == 'school') goto school; else goto einde; ?> |
1 2 3 | goto a, b, c; ?> |
had m geinstalleerd. en lokaal (127.0.0.1/phpMyAdmin) werkte het wel.quote:Op woensdag 1 juli 2009 13:34 schreef Xcalibur het volgende:
"opeens"?
Wat heb je veranderd, en wat krijg je voor foutmelding?
dat begrijp ik.quote:Op woensdag 1 juli 2009 13:59 schreef Xcalibur het volgende:
Eerst keek je dus op de machine zelf (op localhost), en nu kijk je vanaf een andere pc?
Dan kan hij waarschijnlijk 127.0.0.1 niet vinden, en moet je gewoon het IP-adres van die machine gebruiken
Dus 192.168.168.4 bijvoorbeeld, afhankelijk van je DHCP settings
Klinkt als m'n eerste spelletje in Qbasic toen ik 13 was ofzoquote:Op woensdag 1 juli 2009 11:07 schreef HuHu het volgende:
Je kunt natuurlijk wel de hele OO structuur van je applicatie weggooien en vervolgens alles met GOTO's gaan oplossen in één grote blob. Dus geen functies of methoden meer gebruiken, maar goto-en naar een label en de return waarde globaal zetten en dan weer terug goto-en enzo.
Ja dat kan, zoek maar op xmlhttprequest. Reken wel op wat JavaScript dat je moet schrijven.quote:Op woensdag 1 juli 2009 18:21 schreef cablegunmaster het volgende:
vraagje: ik zit met een normerings systeem 1-10 radioboxjes
en nu vroeg ik me af of het met php mogelijk was dat ALS 1-10 is ingevuld.
bvb ik klik op 4 , geen submit knop erbij ,en dan reageert hij met " Thank you for your vote"
Tofquote:Op woensdag 1 juli 2009 19:36 schreef raptorix het volgende:
http://www.masugadesign.c(...)jax-star-rating-bar/
PEAR heeft alleen de mogelijkheid om uit te wijken naar RFC822quote:Op vrijdag 3 juli 2009 09:43 schreef HuHu het volgende:
De wiki heeft wat verwijzingen naar de RFC's, waarin exact staat hoe het hoort: http://en.wikipedia.org/wiki/E-mail_address#RFC_specification.
Zelf gebruik ik Zend_Validate_EmailAddress, die zich houdt aan RFC2822.
Ja, klopt, maar verwacht dat er bij onze situatie het bedrijf er een email groep achter heeft hangen. Daar is F&I een redelijk standaard begrip, maar kom hem nu dus voor het eerst ook in een email tegen.quote:Op vrijdag 3 juli 2009 14:38 schreef raptorix het volgende:
Eigenlijk nog nooit een email tegengekomen met een & erin, denk ook dat iemand daar redelijk snel van afstapt als ie merkt dat ie op veel plekken niet kan registreren, had zelf als 1 van eerste een .INFO adres, en daar had ik al problemen zat mee.
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 | // First, we check that there's one @ symbol, // and that the lengths are right. if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) { // Email invalid because wrong number of characters // in one section or wrong number of @ symbols. return false; } // Split it into sections to make life easier $email_array = explode("@", $email); $local_array = explode(".", $email_array[0]); for ($i = 0; $i < sizeof($local_array); $i++) { if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%& ↪'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) { return false; } } // Check if domain is IP. If not, // it should be valid domain name if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { $domain_array = explode(".", $email_array[1]); if (sizeof($domain_array) < 2) { return false; // Not enough parts to domain } for ($i = 0; $i < sizeof($domain_array); $i++) { if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])| ↪([A-Za-z0-9]+))$", $domain_array[$i])) { return false; } } } return true; } |
Komt die ook niet valide doorheen..quote:Op vrijdag 3 juli 2009 14:51 schreef raptorix het volgende:
Voldoet dit niet: http://www.linuxjournal.com/article/9585
Zo dus:
[ code verwijderd ]
Overbodige spaties eraf trimmen kan je natuurlijk ook in je code...quote:Op vrijdag 3 juli 2009 15:20 schreef raptorix het volgende:
Je bedoeld die F&I@bedrijf.nl? Die zou er echt op moeten valideren hoor? Let je op dat je er geen spatie achter hebt staan?
Zei ik tochquote:Op vrijdag 3 juli 2009 15:45 schreef ursel het volgende:
Hmm.. de functie werkt wel, maar blijkbaar zit er in de post nog een "onzichtbare" spatie ofzo.
Mooi klusje voor maandag..
<?phpquote:Op vrijdag 3 juli 2009 09:01 schreef ursel het volgende:
Iemand hier bekend met de exacte regels wat betreft validatie van email adressen?
We maken zelf gebruik van de PEAR klasse Validate.
Echter nu blijkt dat deze email adressen afkeurt welke een & teken in de naam hebben (naam@domein.nl).
Ik heb even een snelle check gedaan en ook FOK! accepteert dit niet.
Echter, ga ik kijken op wat WIKI hier over te zeggen heeft dan zouden de volgende tekens juist wel geaccepteerd moeten worden:
Characters ! # $ % & ' * + - / = ? ^ _ ` { | } ~
accepteren jullie ook al deze tekens?
Of zie ik iets verkeerds over het hoofd dat er toch maar slechts enkele tekens mogen?
Dacht namelijk zelf dat alleen . - _ geaccepteerd werden in de naam.
1 2 3 4 5 6 7 8 9 10 11 | { if( $isId ) { // zoeken op ID } else { // zoeken op woord } } |
Maar dan wel zo:quote:Op zaterdag 4 juli 2009 09:33 schreef FastFox91 het volgende:
Wat jouw voorkeur is. Je kunt ook beide opties gebruiken.
lang( 'welcome' ) en lang( 151, true ) oid.
[ code verwijderd ]
of de query "select translation from lang where id = *value* or word = *value* limit 1" doen.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function lang( $value, $isId = false ) { if( $isId ) { // zoeken op ID } else { // zoeken op woord } } ?> |
ID is natuurlijk wel godsgruwelijk lelijk in je pagina`s. Je legt zo een directe link tussen je recordID en een woordje. Haal gewoon het woord zelf op. Is gelijk een stuk duidelijker.quote:Op zaterdag 4 juli 2009 09:33 schreef FastFox91 het volgende:
Wat jouw voorkeur is. Je kunt ook beide opties gebruiken.
lang( 'welcome' ) en lang( 151, true ) oid.
[ code verwijderd ]
of de query "select translation from lang where id = *value* or word = *value* limit 1" doen.
Inderdaad, en als je site zo dramatisch vaak bezocht wordt dat een index-look-up op een string te lang duurt (quote:Op zaterdag 4 juli 2009 10:20 schreef Scorpie het volgende:
[..]
ID is natuurlijk wel godsgruwelijk lelijk in je pagina`s. Je legt zo een directe link tussen je recordID en een woordje. Haal gewoon het woord zelf op. Is gelijk een stuk duidelijker.
Stukje vergeten.quote:
Klopt, maar ik maak ook geen keuze wat beter is. Ik stel een optie voor waardoor je later nog zou kunnen kiezen en tot dan beide kunt gebruiken.quote:Op zaterdag 4 juli 2009 10:20 schreef Scorpie het volgende:
[..]
ID is natuurlijk wel godsgruwelijk lelijk in je pagina`s. Je legt zo een directe link tussen je recordID en een woordje. Haal gewoon het woord zelf op. Is gelijk een stuk duidelijker.
Ja, maar dan moet je weer een templatparser bouwen/hebben (doe ik standaard).quote:Op zaterdag 4 juli 2009 15:53 schreef Likkende_Lassie het volgende:
Bedankt voor de reacties![]()
Maar is het beste dan niet om bijvoorbeeld het volgende te doen:
Document
bla bla bla {translate:welcome to my world} blabla bla bla bla bla bla {translate:get out my world} blabla bla bla
Vervolgens het op deze manier te vervangen?
1 2 3 4 5 6 7 | function mysqlQuery ($query) { Return mysql_query($query) $a++; } ?> |
1 2 3 4 5 6 7 8 9 | function mysqlQuery($input) { $input = mysql_query($input); $a++; return $a; return $input; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class db { protected $_queryCount; public function __construct() { $this->_queryCount = 0; } public function query($sql) { $this->_queryCount++; return mysql_query($sql); } public function getQueryCount() { return $this->_queryCount; } } ?> |
niet zo heel goed in OO programmeren maar dan krijg ik ongv dit.quote:
1 2 3 4 5 6 | $query = new db(); $query ->__construct(); //( deze 2 regels bovenaan.) $Sqluitkomst = $query ->query('de sql die je invoert of variabele'); $query ->getQueryCount(); ?> |
ah op die fietsquote:Op zondag 5 juli 2009 09:37 schreef HuHu het volgende:
Regel 3 is overbodig, dat gaat automatisch bij die new db().
1 2 3 4 5 6 | $db = new db(); $result = $db->query('SELECT * FROM table'); $queryCount = $db->getQueryCount(); ?> |
PHP is lievvvvquote:Op zondag 5 juli 2009 10:39 schreef raptorix het volgende:
Moet trouwens van de week voor eerst wat met PHP doen, juk, programmeer eigenlijk al jaren c# dus zal wel tegenvaller worden
2 dagen geleden was het nog 'volgende maand'?quote:Op zondag 5 juli 2009 10:39 schreef raptorix het volgende:
Moet trouwens van de week voor eerst wat met PHP doen, juk, programmeer eigenlijk al jaren c# dus zal wel tegenvaller worden
quote:Op vrijdag 3 juli 2009 14:50 schreef raptorix het volgende:
hoewel ik volgende maand voor eerst in 15 jaar een projectje moet doen in PHP
Project begint wat vroegerquote:Op zondag 5 juli 2009 10:57 schreef Swetsenegger het volgende:
[..]
2 dagen geleden was het nog 'volgende maand'?
[..]
zend en php designer.quote:Op zondag 5 juli 2009 11:00 schreef raptorix het volgende:
[..]
Project begint wat vroeger
Wel leuk project opzich, zeer uitgebreide webshop in Magento, product ziet er op zich goed uit.
Tjah ik vind PHP toch een wat matige programmeertaal, wat voor omgeving gebruiken jullie eigenlijk om het te ontwikkelen? Eclipse ofzo?
Hoe debug je dan? Of ga je gewoon in je code waardes zitten afdrukken?quote:Op zondag 5 juli 2009 11:38 schreef GlowMouse het volgende:
http://www.waterproof.fr/(...)/en/debug/usage.html
Nooit gebruikt; je moet op je server ook een extra php plug-in installeren; http://www.php-debugger.com/dbg/
Dat laatste; en zovaak komt het ook niet voor dat ik geen idee heb waardoor iets veroorzaakt wordt. Alleen als ik door nieuwe code moet spitten zou die debug plug-in wel handig zijn.quote:Op zondag 5 juli 2009 11:40 schreef raptorix het volgende:
[..]
Hoe debug je dan? Of ga je gewoon in je code waardes zitten afdrukken?
Mjah, komt ook al omdat de meeste php projecten niet echt hoogstaand zijn, meeste projecten die ik doe kan je echt niet zonder debuggers.quote:Op zondag 5 juli 2009 11:44 schreef GlowMouse het volgende:
[..]
Dat laatste; en zovaak komt het ook niet voor dat ik geen idee heb waardoor iets veroorzaakt wordt. Alleen als ik door nieuwe code moet spitten zou die debug plug-in wel handig zijn.
1 2 3 4 | ini_set("display_errors", "1"); error_reporting(E_ALL); ?> |
Ik heb er geloof ik wel eens wat op gezien. Maar gelet op de structuur kun je beter een for-loop gebruiken en dan $_FILES['name/tmpname/userfile'][$i] gebruiken. Een foreach is namelijk erg flauw hierquote:Op zondag 5 juli 2009 14:38 schreef Swetsenegger het volgende:
Iemand hier al eens wat mee gedaan:
http://us.php.net/manual/en/features.file-upload.multiple.php Kan ik dan gewoon een foreach lus loslaten op $_FILES[file']?
Het is ook niet handig dat je informatie over uploads uit verschilende arrays moet halen. Designfoutje, denk ik.quote:Op zondag 5 juli 2009 14:42 schreef GlowMouse het volgende:
[..]
Ik heb er geloof ik wel eens wat op gezien. Maar gelet op de structuur kun je beter een for-loop gebruiken en dan $_FILES['name/tmpname/userfile'][$i] gebruiken. Een foreach is namelijk erg flauw hier
Hij bevat meer arrays: eentje met name, eentje met tmp_name, eentje met size, etc.quote:Op zondag 5 juli 2009 14:44 schreef Swetsenegger het volgende:
waarom? Ik heb toch gewoon 2 <input type="file" name="foto[]" bv. Dat de array $_FILES['foto'] vervolgens 2 array's bevat doet er toch niet toe?
Ja $_FILES['foto'] bevat meer arraysquote:Op zondag 5 juli 2009 14:48 schreef GlowMouse het volgende:
[..]
Hij bevat meer arrays: eentje met name, eentje met tmp_name, eentje met size, etc.
1 2 3 4 5 | if($_FILES['foto']['tmp_name']!=''){ //verwerk de meuk en gooi het in db } ?> |
Ja en die arrays zijn zo opgebouwd dat foreach niet handig is.quote:Op zondag 5 juli 2009 14:49 schreef Swetsenegger het volgende:
[..]
Ja $_FILES['foto'] bevat meer arrays
Maar als je multiple upload krijg je toch gewoon een array foto met multiple arrays erin?
Je hebt een id nodig, maar die kun je ook met een foreach wel pakken.quote:Op zondag 5 juli 2009 14:52 schreef GlowMouse het volgende:
[..]
Ja en die arrays zijn zo opgebouwd dat foreach niet handig is.
1 2 3 4 5 6 7 | for($i = 0; $i < count($_FILES['foto']), ++$i){ if($_FILES['foto'][$i]['tmp_name']!=''){ //verwerk de meuk en gooi het in db } } ?> |
1 2 3 4 5 6 7 | for($i = 0; $i < count($_FILES['foto']['tmp_name']), ++$i){ if($_FILES['foto']['tmp_name'][$i] != ''){ //verwerk de meuk en gooi het in db } } ?> |
Handige Superglobalquote:
In welk opzicht? dus in plaats van wat in deze code?quote:Op zondag 5 juli 2009 15:15 schreef GlowMouse het volgende:
Waarom geen http://nl.php.net/is_uploaded_file?
if($_FILES['foto']['tmp_name'][$i] != ''){quote:Op zondag 5 juli 2009 15:19 schreef Swetsenegger het volgende:
In welk opzicht? dus in plaats van wat in deze code?
.. is een mapje hoger; ../../index.php.quote:Op zondag 5 juli 2009 15:16 schreef cablegunmaster het volgende:
hoe kan ik naar een onderliggend bestand refereren?
bvb index.php en dan zit ik includes/logout.php en dan wou ik naar index.php refereren.
iets met een punt? las ik.
dus dan heb je bvb
c:\blablabla\includes\bestand.php
en van uit dat bestand wil je de naam van
c:\index.php weten relatief.
ik krijg nu:
http://localhost:8888/cablegunmaster%20v3.0/includes/index.php
ipv de map includes weg.![]()
Ik zag 'm zelf ook, nog voordat ik jou post had gezienquote:Op zondag 5 juli 2009 15:14 schreef GlowMouse het volgende:
count($_FILES['foto']) hangt niet af van het aantal geüploade files
HaHa HuHu past zijn post gauw aan![]()
nvmquote:Op zondag 5 juli 2009 15:16 schreef cablegunmaster het volgende:
hoe kan ik naar een onderliggend bestand refereren?
bvb index.php en dan zit ik includes/logout.php en dan wou ik naar index.php refereren.
iets met een punt? las ik.
dus dan heb je bvb
c:\blablabla\includes\bestand.php
en van uit dat bestand wil je de naam van
c:\index.php weten relatief.
ik krijg nu:
http://localhost:8888/cablegunmaster%20v3.0/includes/index.php
ipv de map includes weg.![]()
Ah tuurlijk... ja wel een stuk mooierquote:Op zondag 5 juli 2009 15:21 schreef GlowMouse het volgende:
[..]
if($_FILES['foto']['tmp_name'][$i] != ''){
infinite loop. Ik heb er ff een echootje tussen gezetquote:
1 2 3 4 5 6 | for($i = 0; $i < count($_FILES['foto']['tmp_name']), ++$i){ echo $i } } ?> |
Als ik voor de loop een print_r($_FILES['foto']['name']); zet krijg ik keurigquote:Op zondag 5 juli 2009 19:35 schreef GlowMouse het volgende:
Wat zegt print_r($_FILES['foto']['tmp_name'])?
quote:Op zondag 5 juli 2009 19:43 schreef GlowMouse het volgende:
Ik zie het al, die HuHu is niet zo goed met puntkomma's. Kijk eens goed naar je for-loop
Was Swetsenegger z'n schuld hoor, ik heb zijn code ge-copy-pastequote:
Mja, toch niet helemaal.quote:
1 2 3 | print_r('text :' . $var . '.'); ?> |
1 2 3 4 5 6 7 8 9 10 | define('TEST', '100'); if(defined(TEST)){ print('ja: '.TEST); }else{ print('nee: '.TEST); } ?> |
hoe kan ik dequote:
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 | function gebruikerBestaat($naam) { $sql = "SELECT username FROM cable_gebruiker WHERE username = '".$username."'"; $result = $db->query($sql) if(mysql_fetch_array($result) > 0) return true; } class db { protected $_queryCount; public function __construct() { $this->_queryCount = 0; } public function query($sql) { $this->_queryCount++; return mysql_query($sql); } public function getQueryCount() { return $this->_queryCount; } } ?> |
1 2 3 4 5 6 7 8 9 | function functie() { global $db; $sql = 'SELECT * FROM tabel;'; $result = $db->query($sql); } ?> |
De functie defined() verwacht een string en geen constant:quote:
1 2 3 4 5 6 7 8 | define('TEST', '100'); if(defined('TEST')){ print('ja: '. TEST); }else{ print('nee: '. TEST); } ?> |
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 | $db = new db(); function gebruikerBestaat($naam) { global $db; $sql = "SELECT username FROM cable_gebruiker WHERE username = '".$username."'"; $result = $db->query($sql) if(mysql_fetch_array($result) > 0) return true; } class db { protected $_queryCount; public function __construct() { $this->_queryCount = 0; } public function query($sql) { $this->_queryCount++; return mysql_query($sql); } public function getQueryCount() { return $this->_queryCount; } } ?> |
Dankjequote:Op maandag 6 juli 2009 10:58 schreef HuHu het volgende:
De waarde $db meegeven aan je functie, of een global $db doen.
[ code verwijderd ]
Ik wist wel dat het iets stoms zou zijn....quote:Op maandag 6 juli 2009 11:01 schreef HuHu het volgende:
[..]
De functie defined() verwacht een string en geen constant:
[ code verwijderd ]
Functies in functies gaat nog een stapje verder hoor, daar kun je maar beter niet aan beginnenquote:Op maandag 6 juli 2009 11:03 schreef cablegunmaster het volgende:
[..]
Dankjekan ik eindelijk functies in functies gebruiken
![]()
word mn code al een stuk ingewikkelder door
maak je geen zorgen daar GA ik aan beginnenquote:Op maandag 6 juli 2009 11:09 schreef HuHu het volgende:
[..]
Functies in functies gaat nog een stapje verder hoor, daar kun je maar beter niet aan beginnen. Dit is een leuke eerste opzet naar OO programmeren.
1 |
1 2 3 4 5 6 | function esc($input) { return mysql_escape_query($input); } ?> |
1 2 3 4 5 6 | $sql = "SELECT id, naam, leeftijd FROM tabel WHERE beroep = '". mysql_real_escape_string($beroep) ."' AND leeftijd >= ". (int)$leeftijd .";"; ?> |
quote:Op maandag 6 juli 2009 11:36 schreef HuHu het volgende:
Nou... de fout lijkt me vrij duidelijk: mysql_escape_query() bestaat niet. Je moet mysql_real_escape_string() gebruiken en dan ook alleen maar op de variabelen in je query.
1 2 3 4 5 6 | function esc($input) { return mysql_real_escape_string($input); } ?> |
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | // This started out as this — http://www.evoluted.net/community/code/directorylisting.php // It was then edited by Ryan McCue from http://cubegames.net/ to include file uploading // Then I took it and stripped it back to it's bare minimum of less than 150 lines of // PHP and HTML and just 20 lines of CSS. My name is Jim Whimpey and you can // find me at valhallaisland.com // This code is released under GPL 3.0 which is included in the bundle // Files to hide in the directory listing // add and subtract as you please $hide = array( 'resources', 'index.php', '.htaccess', '.htpasswd', '.DS_Store'); error_reporting(E_ERROR); // When downloading force it to actually download // rather than just open it in the browser if ($_GET['download']) { $file = str_replace('/', '', $_GET['download']); $file = str_replace('..', '', $file); if (file_exists($file)) { header("Content-type: application/x-download"); header("Content-Length: ".filesize($file)); header('Content-Disposition: attachment; filename="'.$file.'"'); readfile($file); die(); } } $filepath = $_SERVER['SCRIPT_FILENAME']; $scriptname = basename($filepath); $readpath = str_replace($scriptname, "", $filepath); $handle = opendir($readpath); // If deleting if (isset($_GET['rmfile'])) { unlink($readpath . $_GET['rmfile']); } // If uploading if ($_FILES['file']) { $success = move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']); } while ($file = readdir($handle)) { if ($file == "." || $file == ".." || in_array($file, $hide)) continue; $key = @filemtime($file); $files[$key] = $file; } closedir($handle); // Sort our files @ksort($files, SORT_NUMERIC); $files = @array_reverse($files); <!DOCTYPE html> <html> <head> <title>Super Simple PHP File Manager</title> <link rel="stylesheet" type="text/css" href="resources/styles.css" /> </head> <body> $baseurl = $_SERVER['PHP_SELF']; <table border="0" cellspacing="5" cellpadding="5"> $arsize = sizeof($files); for ($i=0; $i<$arsize; $i++) { $ext = strtolower(substr($files[$i], strrpos($files[$i], '.')+1)); $filename = stripslashes($files[$i]); $fileurl = $files[$i]; if (strlen($filename) > 43) { $filename = substr($files[$i], 0, 40) . '...'; } <tr> <td><img src="../image.png" /></td> <td><a href=" echo $filename; "> echo $filename; </a></td> <td> echo round(filesize($leadon.$files[$i])/1024); KB</td> <td> echo date ("d/m/y", filemtime($leadon.$files[$i]));</td> <td><a href="./index.php?rmfile= echo $filename; ">Delete</a></td> </tr> } </table> <div id="upload"> <form method="post" action=" echo $_SERVER['PHP_SELF'];" enctype="multipart/form-data"> <p><input type="file" name="file" /></p> <p><input type="submit" value="Upload" /></p> </form> ?> |
RTFM, onder een van die dingen is het zo te vindenquote:* POST method uploads
* Error Messages Explained
* Common Pitfalls
* Uploading multiple files
* PUT method support
Apache en IIS hebben dat wel degelijk hoor. En maar goed ook. Apache heeft de limit standaard op 2 MB en IIS op 4 MB. Dat limiet zit er voor een reden.quote:Op maandag 6 juli 2009 20:59 schreef Xcalibur het volgende:
Ik weet niet wat Apache daarmee te maken heeft?
Kan me niet herinneren daar ooit wel eens een upload limiet gezien te hebben...
Misschien dat een betere upload nog komt in http 4.0, maar ik reken er niet op. Ik ken situaties waar men 100+ MB via http wil uploaden.quote:Op maandag 6 juli 2009 22:21 schreef Tuvai.net het volgende:
Overigens ben ik sowieso niet zo'n voorstander van grote bestanden uploaden middels HTTP. Daar is dat protocol simpelweg (nog) niet voor bedoeld en het is ook erg gebrekkig. Al is 3 MB niets bijzonders.
't Gaat om foto's te uploaden, die groter kunnen zijn dan 2 mb. Ik heb mn hostingsbedrijf gevraagd of ze hem even willen opkrikken naar 10 MB (want dat kan toch?)quote:Op maandag 6 juli 2009 22:21 schreef Tuvai.net het volgende:
[..]
Apache en IIS hebben dat wel degelijk hoor. En maar goed ook. Apache heeft de limit standaard op 2 MB en IIS op 4 MB. Dat limiet zit er voor een reden.
Overigens ben ik sowieso niet zo'n voorstander van grote bestanden uploaden middels HTTP. Daar is dat protocol simpelweg (nog) niet voor bedoeld en het is ook erg gebrekkig. Al is 3 MB niets bijzonders.
Heb met .htaccess wat gedaan, nu doet ie tquote:Op maandag 6 juli 2009 22:40 schreef Xcalibur het volgende:
dat zou geen probleem moeten zijn
ik heb em standaard op 50mb staan, 10mb wil je nog wel eens nodig hebben....
quote:Op maandag 6 juli 2009 22:32 schreef Light het volgende:
[..]
Misschien dat een betere upload nog komt in http 4.0, maar ik reken er niet op. Ik ken situaties waar men 100+ MB via http wil uploaden.
Ik heb zelf ook ooit zo'n rotprojectje op het werk gehad waar de opdrachtgevers en mijn werkgevers, ondanks mijn beargumenteerde tegenadvies en raad, per sé een uploadsysteem wilden hebben voor bestanden tussen de 1 en 4 GB, dat middels een webaplicatie werkte.quote:Op maandag 6 juli 2009 22:29 schreef Xcalibur het volgende:
Nou, dat limiet ben ik dan nog nooit tegengekomen kennelijk... ?![]()
Dat HTTP d'r niet voor bedoeld is is natuurlijk zo, maar een fatsoenlijk alternatief in je browser is er ook niet echt....
Ik heb nu nog nachtmerries van die filemanager die m'n baas per se voor z'n klanten wilde om dingen te uploaden... want FTP was te ingewikkeld... bestanden van 100+ mb, wat een gezeik was dat
4GB uploaden via http.... lekker... er zijn wel halve oplossingen waarbij je in ieder geval nog een soort van progress bar hebt, maar het blijft behelpen.quote:Op maandag 6 juli 2009 23:12 schreef Tuvai.net het volgende:
[..]
[..]
Ik heb zelf ook ooit zo'n rotprojectje op het werk gehad waar de opdrachtgevers en mijn werkgevers, ondanks mijn beargumenteerde tegenadvies en raad, per sé een uploadsysteem wilden hebben voor bestanden tussen de 1 en 4 GB, dat middels een webaplicatie werkte.Dat is naderhand natuurlijk een dik fiasco geworden.
Ik had daar inderdaad al een nette uploadprogress extension voor geïnstalleerd want ik had gewoon toegang op de server waar het hele goedje zich af moest spelen. Zo'n progress bar is leuk, maar blijft eye candy. Bij de minste of geringste interruptie van je verbinding is je upload naar de filistijnen, of je nou 3GB ver was of niet.quote:Op maandag 6 juli 2009 23:25 schreef Light het volgende:
[..]
4GB uploaden via http.... lekker... er zijn wel halve oplossingen waarbij je in ieder geval nog een soort van progress bar hebt, maar het blijft behelpen.
En je had er zeker ook een functie bij ingebouwd dat er bij het bereiken van de 1GB grens een 25% kans is dat de webserver (Apache ofzo) een restart krijgt. Oh, da's lullig, upload wegquote:Op maandag 6 juli 2009 23:29 schreef Tuvai.net het volgende:
[..]
Ik had daar inderdaad al een nette uploadprogress extension voor geïnstalleerd want ik had gewoon toegang op de server waar het hele goedje zich af moest spelen. Zo'n progress bar is leuk, maar blijft eye candy. Bij de minste of geringste interruptie van je verbinding is je upload naar de filistijnen, of je nou 3GB ver was of niet.
Hoe moet je dan aan een klant uitleggen die bijna niks van pc's weet hoe hij een foto moet uploaden?quote:Op maandag 6 juli 2009 23:29 schreef Tuvai.net het volgende:
[..]
Ik had daar inderdaad al een nette uploadprogress extension voor geïnstalleerd want ik had gewoon toegang op de server waar het hele goedje zich af moest spelen. Zo'n progress bar is leuk, maar blijft eye candy. Bij de minste of geringste interruptie van je verbinding is je upload naar de filistijnen, of je nou 3GB ver was of niet.
Het ging hier niet over foto's, maar over video bestanden van 3 tot 4 GB. Dat was NADAT ze al 'gehakt' waren, want de oorspronkelijke bestanden waren groter dan 30 GB. Deze bestanden moesten onder bepaalde mensen verdeeld worden, en de situatie was toen al dat men de bestanden op een lokale FileServer deden zetten middels FTP en iedereen hier dus aan kon. Het ging met name om dat laatste, dat beter beveiligd moest worden. Iets met accounts zodat alleen maar de mensen die iets met de filmpjes te maken hadden, deze konden downloaden.quote:Op dinsdag 7 juli 2009 00:01 schreef Flaccid het volgende:
[..]
Hoe moet je dan aan een klant uitleggen die bijna niks van pc's weet hoe hij een foto moet uploaden?
Het principe is op zich vrij simpel: je gaat een bestand uploaden en in de headers van de upload geeft je browser al mee hoe groot het totale bestand is. Zo'n extensie als APC of uploadprogress uploaden het bestand naar een aparte map op je server. Tevens geef je vanuit je browser een unieke key mee voor die specifieke upload (die key genereer je server-side zodra je het formulier laadt).quote:Op dinsdag 7 juli 2009 09:01 schreef Xcalibur het volgende:
Ja, die progressbars die echt zeggen wat er gebeurt heb ik ooit nooit zo begrepen....
Als ik ze al gebruik is het meestal gewoon een oneindig loopende gif
Ok, dus bij shared hosting is de kans relatief klein dat ze het hebben draaienquote:Op dinsdag 7 juli 2009 09:02 schreef HuHu het volgende:
Jep, daarvoor moet je APC of uploadprogress hebben draaien.
Ja. En hostingproviders staan er ook niet echt om te springen om extensions te installeren.quote:Op dinsdag 7 juli 2009 09:16 schreef Swetsenegger het volgende:
[..]
Ok, dus bij shared hosting is de kans relatief klein dat ze het hebben draaien
Ik dacht dat één van de twee standaard werd meegeleverd met nieuwere PHP-versies, maar dat zou je even moeten navragen bij je hoster dan.quote:Op dinsdag 7 juli 2009 09:16 schreef Swetsenegger het volgende:
[..]
Ok, dus bij shared hosting is de kans relatief klein dat ze het hebben draaien
1 2 3 4 5 6 | if(userBanned($_POST['gebruikersnaam'])) { //krijg parameter $fout van userBanned binnen uit functions. } ?> |
Waarom heb je hier dan een serverside extentie voor nodig?quote:Op dinsdag 7 juli 2009 09:06 schreef HuHu het volgende:
[..]
Het principe is op zich vrij simpel: je gaat een bestand uploaden en in de headers van de upload geeft je browser al mee hoe groot het totale bestand is. Zo'n extensie als APC of uploadprogress uploaden het bestand naar een aparte map op je server. Tevens geef je vanuit je browser een unieke key mee voor die specifieke upload (die key genereer je server-side zodra je het formulier laadt).
Vervolgens ga je met AJAX eens in de zoveel tijd een request naar de server sturen, waarbij je de unieke upload-key mee stuurt. Aangezien je nog steeds op dezelfde HTML pagina blijft zolang de upload loopt, heb je ook nog steeds toegang tot die key middels JavaScript. APC/uploadprogress kijkt vervolgens hoe groot het bestand op de server reeds is en hoe groot het zou moeten zijn. Op basis daarvan wordt het percentage weergegeven. De verwachte tijd die het nog duurt wordt berekend op basis van de timestamp van het bestand op de server en de huidige tijd.
que?quote:Op dinsdag 7 juli 2009 11:56 schreef cablegunmaster het volgende:
hey, ik wou m'n inlog uitbreiden met een tijd ban maar nu wil ik een variabele meegeven $fout;
dus ik dacht return $fout; maar de vraag is hoe kan ik dit true maken? en de foutmelding mee geven?
[ code verwijderd ]
functie :
sql
als 1 rij gevonden is return $fout; in het kort en dat werkt met return true; alleen die fout moet ook mee![]()
Omdat je als het ware bestandsgegevens gaat uitlezen van bestanden die nog in het uploadproces zitten, oftewel in de PHP temporary directory staan. Daarbij word tijdens het uploaden een tijdelijk tekstbestandje aangemaakt (eveneens in de PHP temp dir) met meerdere gegevens dan alleen de bestandsgrootte, zoals bijvoorbeeld het aantal bytes reeds geupload, datum start upload, etcetera.quote:Op dinsdag 7 juli 2009 11:57 schreef Xcalibur het volgende:
[..]
Waarom heb je hier dan een serverside extentie voor nodig?
Alleen om de filesize van het bestand te checken? Maar dat kan toch ook gewoon met PHP?
de functie checkt of er een rij bestaat. als de rij niet bestaat gaat de code door en is hij ingelogdquote:
1 2 3 | return $fout; ?> |
1 2 3 4 | return true; return $fout; ?> |
Omdat het niet kan in PHPquote:Op dinsdag 7 juli 2009 11:57 schreef Xcalibur het volgende:
[..]
Waarom heb je hier dan een serverside extentie voor nodig?
Alleen om de filesize van het bestand te checken? Maar dat kan toch ook gewoon met PHP?
Je kunt maar één ding tegelijk returnen, want na een return stopt je methode. Je moet de fout dan eerst globaal opslaan, zodat je er later weer bij kunt.quote:Op dinsdag 7 juli 2009 12:17 schreef cablegunmaster het volgende:
[..]
de functie checkt of er een rij bestaat. als de rij niet bestaat gaat de code door en is hij ingelogd
als hij wel bestaat komt er een foutmelding alleen wou ik wat variabele meegeven uit de functie dus ik dacht
om een query te besparen, haal op wat je toch al eerder ophaalt.
[ code verwijderd ]
maar dan toont hij de foutmelding niet want hij komt niet tussen die haakjes terecht.
dus eigenlijk wilde ik
[ code verwijderd ]
kan dat?
Ja dat kanquote:Op dinsdag 7 juli 2009 13:12 schreef raptorix het volgende:
Je kan eventueel een array returnen lijkt me.
Nog beter is om alleen het resultaat te returnen en bij fouten een Exception te throwen.quote:Op dinsdag 7 juli 2009 13:12 schreef raptorix het volgende:
Je kan eventueel een array returnen lijkt me.
Dat dus. En een array retourneren werkt ook prima. Dat doe ik overigens alleen in mijn SQL query methodes. Dan zorg ik dat ik een array terug krijg met de Identity, Error nummer en Error Message van de betreffende query.quote:Op dinsdag 7 juli 2009 14:02 schreef HuHu het volgende:
[..]
Nog beter is om alleen het resultaat te returnen en bij fouten een Exception te throwen.
Jup dat vind ik ook mooier, en liefst dan een log functionaliteit gebruiken om de error in weg te schrijven. Enige tijd terug heb ik een RSS feed gemaakt op me error log, dat vond ik toch wel een heel cool conceptquote:Op dinsdag 7 juli 2009 14:02 schreef HuHu het volgende:
[..]
Nog beter is om alleen het resultaat te returnen en bij fouten een Exception te throwen.
1 2 3 4 5 6 7 8 9 10 11 | // filter email if (stripos($sms, "DOORLATEN1") !== false || stripos($sms, "DOORLATEN2") !== false || stripos($sms, "NIET DOORLATEN1") === false && stripos($sms, "NIET DOORLATEN2") === false && stripos($sms, "NIET DOORLATEN3") === false) { // send email } |
1 2 3 | DELETE FROM table ORDER BY date ASC LIMIT 100 ?> |
Zou gewoon moeten werken dus.quote:ORDER BY can be used with DELETE beginning with MySQL 4.0.0.
From MySQL 4.0, you can specify multiple tables in the DELETE statement to delete rows from one or more tables depending on a particular condition in multiple tables. However, you cannot use ORDER BY or LIMIT in a multiple-table DELETE.
Wat is de foutmelding die je krijgt?quote:Op woensdag 8 juli 2009 14:13 schreef wipes66 het volgende:
Weet iemand waarom dit niet werkt in mysql 4(werkt wel in mysql 5)
[ code verwijderd ]
1 |
Ja dat is het eerste waar ik aan dacht. Maar sorteren op id, of de naam van 'date' veranderen levert de zelfde foutmelding op...quote:Op woensdag 8 juli 2009 14:36 schreef HuHu het volgende:
De kolomnaam date is een reserved word, die moet tussen backticks staan:
[ code verwijderd ]
Volgens mij is DATE een van de reserved words die je wel als kolomnaam mag gebruiken zonder backticks.quote:Op woensdag 8 juli 2009 14:36 schreef HuHu het volgende:
De kolomnaam date is een reserved word, die moet tussen backticks staan:
[ code verwijderd ]
Euh, neem eens een kijkje naar de Google Map API voor de mogelijkheden, zou ik zeggen.quote:Op woensdag 8 juli 2009 20:00 schreef Likkende_Lassie het volgende:
Ik wil het volgende op een site zetten:
Een kaart van Nederland, met daaronder een zoekveld waar je een plaatsnaam kan invullen, vervolgens wordt er dan een pin geplaatst op de kaart.
Natuurlijk is het leuk als ik dit met google maps kan doen, echter weet ik niet of google maps het ondersteund (en ik kan hier ook niets over vinden) om andere landen weg te filteren en alleen Nederland te laten staan oid.
Iets wat ik wel heb geprobeer, een overlay over de maps van google met een NL kaart. Maar misschien weet iemand betere oplossingen?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |