Dan doe je wat verkeerd, je zult de index voor de join wel vergeten zijn.quote:Op donderdag 15 maart 2012 12:39 schreef _Flash_ het volgende:
Qua performance zijn ze niet vergelijkbaar.
Maar de resultaten zijn ook anders.quote:Op donderdag 15 maart 2012 14:25 schreef totalvamp het volgende:
@_FLASH_
gebruik PostgrSQL ipv MysQL en doe een FULLTEXT search ipv like.
FULLTEXT search is vele malen snellen dan een LIKE.
Ongetwijfeldquote:Op donderdag 15 maart 2012 14:42 schreef GlowMouse het volgende:
[..]
Dan doe je wat verkeerd, je zult de index voor de join wel vergeten zijn.
Wat is eigenlijk het voordeel van 1 index op 2 velden en in welke situaties is dat het beste te benutten? Ik heb dat nooit goed gesnapt...quote:Op donderdag 15 maart 2012 16:29 schreef GlowMouse het volgende:
In ad1 en ad2 mist de index op klant. Ik zou hier een index maken op (klant,soort) (1 index op 2 velden).
zie het als een gesorteerde lijst; een telefoonboek is één index op (plaats,naam). Dat werkt makkelijker dan wanneer er alleen op plaats of alleen op naam is gesorteerd, maar alleen als je een naam zoekt in een specifieke plaats (of sorteert op plaats,naam; of bij één plaats wilt sorteren op naam).quote:Op donderdag 15 maart 2012 19:07 schreef The_Terminator het volgende:
[..]
Wat is eigenlijk het voordeel van 1 index op 2 velden en in welke situaties is dat het beste te benutten? Ik heb dat nooit goed gesnapt...
helaas, geen koelkastquote:Op donderdag 15 maart 2012 20:33 schreef kucher het volgende:
Een index alleen heeft niet heul veul nut tenzij je graag GROUP BY gebruikt op die 2 kolommen (zover ik weet), maar een (primary key/foreign key/unique) constraint met 2 (of meer) kolommen wel.
Is goed! Ik ga proberen de rest werkend te maken, en als ik dan nog tijd heb kom ik hier nog wel mijn neus om de hoek steken. Heel erg bedanktquote:Op donderdag 15 maart 2012 11:57 schreef _Flash_ het volgende:
Thanks, mooie site.
Als je nog wat tips wilt voor de beveiliging of om spam te voorkomen (je gaat veel spam krijgen met zo'n formulier) dan moet je het maar laten weten
Oh, dit ga ik proberen, bedankt!quote:Op donderdag 15 maart 2012 11:57 schreef The_Terminator het volgende:
[..]
Mooi!
Ik heb nog wel een suggestie als zijnde een verbetering van je huidige invoer-verwerking:
[ code verwijderd ]
De $input_naam variable kun je vervolgens in je mail gebruiken:
[ code verwijderd ]
Hierdoor weet je zeker dat bijzondere tekens goed verwerkt worden en dat je geen waarschuwingen krijgt indien een een element niet bestaat in de POST array.
Geef je een geldigheidsduur mee aan de setcookie functie?quote:Op maandag 19 maart 2012 10:32 schreef Crutch het volgende:
Ik kom er niet uit.
Cookies die ik 'check' en 'set' in een if-statement worden niet onthouden wanneer ik de browser afsluit en daarna weer open.
Als ik een cookie 'set' buiten een if-statement dan blijft deze wel aanwezig.
Dus cookies worden gewoon geaccepteerd, check.
Register Globals staat op 'on', check.
Ik kwam ook ergens de functie ob_start(); tegen, maar dat maakt verder geen verschil als ik die functie aanroep aan het begin van mijn code.
Als ik een cookie aanmaak in een if-statement en ik ververs de pagina dan is ie wel aanwezig, maar sluit ik de browser en open ik de pagina opnieuw dan is ie weer weg.
Ik gebruik overigens MAMP in OSX.
STOP DE PERSEN!!quote:Op maandag 19 maart 2012 10:43 schreef The_Terminator het volgende:
[..]
Geef je een geldigheidsduur mee aan de setcookie functie?
Phpmailer is een tool om mailtjes mee te versturen.quote:Op zondag 18 maart 2012 23:48 schreef Mirel het volgende:
Ik moet een contactformulier maken op een website die ik sinds kort beheer (www.sbscoaching.nl). Ik kom er net achter dat ik niks kan invullen in de tekstboxen. Die doen het gewoon in een testbestand.
Hoe komt dit? Ik weet niet echt waar ik naar moet zoeken..
De site heeft zover ik weet nergens een contactformulier staan. Ik zie in de backend wel een mapje genaamd phpmailer, maar ik weet niet waar die voor is.
Wat? Meen je dit? Welke pipo heeft bedacht dat dit een goed idee was?quote:
als je netjes code dan valt dat wel meequote:Op maandag 19 maart 2012 14:29 schreef totalvamp het volgende:
[..]
GELIJK weer uitzetten anders weet je zeker dat je script gehackt wordt.
Het is een serieus veiligheids probleem... dat kun je niet goedpraten.quote:Op maandag 19 maart 2012 14:31 schreef GlowMouse het volgende:
[..]
als je netjes code dan valt dat wel mee
Ah thanks. Zulke dingen zijn toch waardeloosquote:Op maandag 19 maart 2012 12:18 schreef _Flash_ het volgende:
Haal die drie java-dingetjes even uit de <body>. De maker van die HTML heeft de pagina dmv die commando's beveiligd tegen klikken, rechtsklikken en selecteren e.d. Daarom gebeurt er niks als je in zo'n tekst-vakje klikt.
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 | <?php <script type="text/JavaScript"> <!-- function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } //--> </script> ?> |
1 | <body onContextMenu="return false;" onmousedown="return false;" onselectstart="return false;"> |
laat me raden: de eigenaar van de site is voor het eerst online en denkt ik moet alles beveiligen tegen allesquote:Op maandag 19 maart 2012 14:38 schreef Mirel het volgende:
OH DAT. Die shit heb ik er zelf in moeten doen ooit.
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 | <?php // We definiëren eerst de variabelen die altijd hetzelfde blijven. $ontvanger = "mirelmirelmirel@gmail.com"; $onderwerp = "Ingevuld contactformulier SBS Coaching!" // We definiëren vervolgens de veranderlijke variabelen. $email = $_POST['email']; $aanhef = $_POST['aanhef']; $voornaam = $_POST['voornaam']; $tussenvoegsels = $_POST['tussenvoegsels']; $achternaam = $_POST['achternaam']; $geboortedatum = $_POST['geboortedatum']; $priveadres = $_POST['priveadres']; $telefoon = $_POST['telefoon']; $opleidingwerkniveau = $_POST['opleidingwerkniveau']; $plaats = $_POST['plaats']; $vragenopmerkingen = $_POST['vragenopmerkingen']; //Bericht $bericht = "Iemand heeft je contactformulier ingevuld.<br>Het gaat om '".$voornaam."', met het e-mailadres '".$email."', wonende in '".$plaats."'. Hij vulde de volgende opmerking in:<br><br>'".$tekst."'"; // Verzenden mail($ontvanger, $onderwerp, $bericht); // Bericht verzonden echo "Uw bericht werd verzonden."; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $bericht = "Iemand heeft je contactformulier ingevuld. <br> '".$aanhef."' '".$voornaam."' '".$tussenvoegsels." '".$achternaam." <br> '".$email."' <br> '".$geboortedatum."' <br> '".$opleidingwerkniveau"' <br> '".$priveadres."' <br> '".$telefoon."' <br> '".$plaats."' <br> opmerkingen: <br> '".$vragenopmerkingen."'"; ?> |
ok staat uit en alles werkt, dank je.quote:Op maandag 19 maart 2012 14:29 schreef totalvamp het volgende:
[..]
Wat? Meen je dit? Welke pipo heeft bedacht dat dit een goed idee was?
GELIJK weer uitzetten anders weet je zeker dat je script gehackt wordt. Ze hebben niet voor niets die functie verwijderd in de nieuwste PHP versie.
Klik er eens op dan.quote:Op maandag 19 maart 2012 14:54 schreef Mirel het volgende:
Ok die zooi is nu in te vullen, maar de submit doet niks. Browser zegt dat http://sbscoaching.nl/contactformulieraction.php niet bestaat
quote:Op maandag 19 maart 2012 15:11 schreef Sitethief het volgende:
sluit regel 5 eerst maar eens correct af.
je kan die variabelen toch gewoon inline gooien?quote:Op maandag 19 maart 2012 15:12 schreef Sitethief het volgende:
En of je gebruikt enkele aanhalingstekens om je strings, of dubbele, maar allebei is niet nodig .
Er was ook iets dat als ik de laatste ' en " weghaalde, dat de php ; z'n kleurtje kwijtraakte, wat betekende dat de code onjuist was.quote:Op maandag 19 maart 2012 15:12 schreef Catch22- het volgende:
Dus; fix een goede editor en lees een debugguide.
[..]
je kan die variabelen toch gewoon inline gooien?
1 2 3 4 5 | <?php $string = "blabla".$variabele."bloblo"; //of $string = 'blabla'.$variabele.'bloblo'; ?> |
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 class plugin extends hoofd { public function validate() { parent::verander('plugin test'); } } class hoofd { public $veranderVariabel = 'null'; public function __construct($databaseCls = '') { $this->databaseCls = $databaseCls; } public function startPlugin() { $p = new plugin(); $p->validate(); } public function verander($var) { $this->veranderVariabel = $var; } public function geef() { return $this->veranderVariabel; } } $databaseCls = true; $hoofd = new hoofd($databaseCls); echo $hoofd->geef(); echo $hoofd->veranderVariabel . '<br />'; $hoofd->startPlugin(); // zou nu 'plugin test' moeten zijn? echo $hoofd->geef(); echo $hoofd->veranderVariabel . '<br />'; ?> |
Begin maar opnieuw met OO.quote:Op dinsdag 20 maart 2012 14:00 schreef Chandler het volgende:
Kleine vraag, waarschijnlijk kijk ik ergens overheen
Stel ik heb 2 classes
[ code verwijderd ]
Waar ga ik de fout in? omg. wil in een class een andere class laden en dan de parent qua gegevens updaten en dan weer verdergaan met de parent en deze gegevens kunnen gebruiken.
Waarom wil je variabelen wijzigen in je hoofdclass?quote:Op dinsdag 20 maart 2012 18:23 schreef Chandler het volgende:
Wat ik wil is gewoon in een class een andere class aanroepen, deze class voert bepaalde code uit en moet daarvoor weer variabelen in de hoofd class aanpassen, that's all.
@Scorpie; je hebt gelijk al heb ik al vele malen een hoop documentatie doorgelezen maar krijg het er blijkbaar niet in!
Buiten dat bovenstaande enorme troep is, kan je toch in je klasse gewoon een nieuwe instantie aanmaken en in een variabele stoppen?quote:Op dinsdag 20 maart 2012 18:23 schreef Chandler het volgende:
Wat ik wil is gewoon in een class een andere class aanroepen, deze class voert bepaalde code uit en moet daarvoor weer variabelen in de hoofd class aanpassen, that's all.
@Scorpie; je hebt gelijk al heb ik al vele malen een hoop documentatie doorgelezen maar krijg het er blijkbaar niet in!
Unsigned int, opslaan kan dan makkelijk met INET_ATON() en weer ophalen met INET_NTOA().quote:Op donderdag 22 maart 2012 16:18 schreef PiRANiA het volgende:
Heeft iemand een goed idee hoe ik IP's het beste kan opslaan in een databaas? Het worden op termijn miljoenen rows die goed doorzoekbaar moeten zijn.
Omzetten naar int? Of zal char goed zijn? Binary misschien?
Lijkt me makkelijker dan om 1 veld ip4 te hebben en 1 ip6.quote:Op donderdag 22 maart 2012 16:27 schreef Ofyles2 het volgende:
Ik houd het voorlopig bij VARCHAR, dit om voorbereid te zijn op IPv6.
Uiteraard kijk ik wel of het eenvoudiger kan.
is het een autoincrement waarde?quote:Op vrijdag 23 maart 2012 14:10 schreef LightLuke het volgende:
Ik kom er even niet uit, ik verwijder een record in mijn database waardoor ik dus een gat krijg in de data
het was 1,2,3,4,5
Ik verwijder 2 dus nu heb ik 1,3,4,5.
Met welke mysql update query krijg ik gewoon weer een rijtje 1,2,3,4 eruit?
1 2 | ALTER TABLE tablename DROP id ALTER TABLE tablename ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id), AUTO_INCREMENT=1 |
Het is geen autoincrement waardequote:Op vrijdag 23 maart 2012 14:29 schreef mschol het volgende:
[..]
is het een autoincrement waarde?
niet netjes maar zou moeten werken:
[ code verwijderd ]
volgens mij kent mysql geen functie om alles opnieuw toe te wijzen
waarom zou je dat willen? In welke situatie gebruik je dit?quote:Op vrijdag 23 maart 2012 14:10 schreef LightLuke het volgende:
Ik kom er even niet uit, ik verwijder een record in mijn database waardoor ik dus een gat krijg in de data
het was 1,2,3,4,5
Ik verwijder 2 dus nu heb ik 1,3,4,5.
Met welke mysql update query krijg ik gewoon weer een rijtje 1,2,3,4 eruit?
In het bepalen van de volgorde van een playlist.quote:Op vrijdag 23 maart 2012 15:05 schreef totalvamp het volgende:
[..]
waarom zou je dat willen? In welke situatie gebruik je dit?
1 | UPDATE tblPlaylists SET positie = positie - 1 WHERE positie > $netverwijderdepositie AND playlistid = $playlist |
Een md5 hash past niet in een binary(16) veld. Daarnaast ben je alle zoekopties kwijt als je een hash gebruikt. (Het zou ook kunnen dat er twee ip's met dezelfde md5 hashes bestaan.)quote:Op zaterdag 24 maart 2012 12:07 schreef wipes66 het volgende:
md5 hash van de ip's opslaan als binary(16) ?
md5 is 16 bytes dus dat moet passen. collision is inderdaad een nadeel, maar voor veel toepassingen maakt dat niet veel uit.quote:Op zaterdag 24 maart 2012 13:19 schreef Light het volgende:
[..]
Een md5 hash past niet in een binary(16) veld. Daarnaast ben je alle zoekopties kwijt als je een hash gebruikt. (Het zou ook kunnen dat er twee ip's met dezelfde md5 hashes bestaan.)
Nee, lol. De stupide om een 128-bits IP adres door nota bene een 128-bits hashfunctie te halen is voorbij mij.quote:Misschien is het te laat maar zijn we het niet allemaal eens met elkaar hier?
Wat wil je ervan bewaren? Want het kan zijn zoals in de link aangegeven is dat bepaalde tabellen veranderd zijn in de DB. daarom kun je het beste controleren met een eigen installatie op XAMPP localhost (voorbeeld ) en daar je DB installeren om te kijken of er verschillen in zijn. Dit gaat over een kleinere versie stap dan jij dat nu hebt. Als het om een grote aantal gebruikers gaat is het de moeite waard, anders raad ik aan toch een nieuwe DB in te zetten.quote:Op zondag 25 maart 2012 23:32 schreef Blue_Panther_Ninja het volgende:
Moet ik een nieuwe database maken als ik een fresh install doet van Joomla 2.5.3? (heb 1.5.3 weggehaald!)
Ik,XAMPP gebruiken??Mooi niet,ik heb LAMP.quote:Op maandag 26 maart 2012 11:12 schreef cablegunmaster het volgende:
[..]
Wat wil je ervan bewaren? Want het kan zijn zoals in de link aangegeven is dat bepaalde tabellen veranderd zijn in de DB. daarom kun je het beste controleren met een eigen installatie op XAMPP localhost (voorbeeld ) en daar je DB installeren om te kijken of er verschillen in zijn. Dit gaat over een kleinere versie stap dan jij dat nu hebt. Als het om een grote aantal gebruikers gaat is het de moeite waard, anders raad ik aan toch een nieuwe DB in te zetten.
Bron:
http://support.open-realt(...)Import-user-Database
Al heeft dit een import functie: http://www.zriel.com/joom(...)-csv-file-16-17-25-3
Hoe dit werkt?
1. maak een nieuw bestand op je server aan met alle gegevens. ( CSV dump van je DB)
2. maak een nieuw bestand aan met een .php extensie en zet daarin alle php en vervolgens zet je onderaan het example en laat deze verwijzen naar je CSV file.
Hiermee importeer je al je users.
Maak altijd voor de zekerheid een backup van je DB en van je Nieuwe DB die je installeert.
Mogelijk helpt dit iets.
Je weet dat de X in XAMPP staat voor om het even welke OS, dus ook voor LAMP ?quote:Op maandag 26 maart 2012 14:02 schreef Blue_Panther_Ninja het volgende:
[..]
Ik,XAMPP gebruiken??Mooi niet,ik heb LAMP.
Lamp = Linux Apache Mysql Phpquote:Op maandag 26 maart 2012 14:34 schreef Sitethief het volgende:
[..]
Je weet dat de X in XAMPP staat voor om het even welke OS, dus ook voor LAMP ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php ? $filename = "image.jpg"; $handle = fopen($filename, "r"); $data = fread($handle, filesize($filename)); // $data is file data $pvars = array('image' => base64_encode($data), 'key' => IMGUR_API_KEY); $timeout = 30; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.xml'); curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars); $xml = curl_exec($curl); curl_close ($curl); ?> ?> |
Depends wat je voor veiligheidschecks hebt.quote:Op maandag 26 maart 2012 17:33 schreef Faux. het volgende:
En brengt dat veiligheidsrisico's met zich mee?
En als je de afbeelding van de gebruik opslaat, uploadt naar imgur en gelijk weer verwijderd, loop je dan geen risico?quote:Op maandag 26 maart 2012 17:36 schreef Scorpie het volgende:
[..]
Depends wat je voor veiligheidschecks hebt.
over welk risico heb je het precies? Let ook op je grammatica.quote:Op maandag 26 maart 2012 17:39 schreef Faux. het volgende:
[..]
En als je de afbeelding van de gebruik opslaat, uploadt naar imgur en gelijk weer verwijderd, loop je dan geen risico?
verwijdertquote:Op maandag 26 maart 2012 17:40 schreef GlowMouse het volgende:
[..]
over welk risico heb je het precies? Let ook op je grammatica.
dat moet wel, aangezien je niet altijd files uit de upload_tmp_dir mag lezen (oa. als safe mode aanstaat of open_basedir ingesteld is) en je dus eerst move_uploaded_file moet aanroepenquote:Op maandag 26 maart 2012 22:14 schreef kucher het volgende:
Je hoeft het niet te verwijderen, dat doet PHP zelf al.
Goede site, tutorials zijn lekker uptodate (zoals het hoort). Dit durf ik tenminste te geven aan een beginner! Zeker een aanrader.quote:Op dinsdag 27 maart 2012 16:50 schreef Dalando het volgende:
Ik kwam deze tegen en ik dacht ik laat hem even hier achter, misschien goed voor in de OP.
http://phptuts.nl/home/
Sarcastisch?quote:Op dinsdag 27 maart 2012 18:14 schreef totalvamp het volgende:
[..]
Goede site, tutorials zijn lekker uptodate (zoals het hoort). Dit durf ik tenminste te geven aan een beginner! Zeker een aanrader.
Nee, anders zou ik wel zeggen dat de site klote is... en dat holbewoners zelfs niet gebruik maakten van globals.quote:
Ik zag tuts uit 2008 staan, dus daarom mijn twijfels.quote:Op dinsdag 27 maart 2012 18:22 schreef totalvamp het volgende:
[..]
Nee, anders zou ik wel zeggen dat de site klote is...
De laatste tutorial stamt uit eind 2009. Ik kan dat nou niet bepaald 'up-to-date' noemen...quote:Op dinsdag 27 maart 2012 18:22 schreef totalvamp het volgende:
[..]
Nee, anders zou ik wel zeggen dat de site klote is...
Als je kijkt zie je dat de techniek die gebruikt wordt gewoon goed is. Ik had eerst ook mijn twijfels erover, maar zeker voor een beginner is dit een betere start dan een PHP for Dummies boek.quote:Op dinsdag 27 maart 2012 18:23 schreef The_Terminator het volgende:
[..]
De laaste tutorial stamt uit eind 2009. Ik kan dat nou niet bepaald 'up-to-date' noemen...
Momenteel is PHP6 nog niet wijdverbreid.quote:Op dinsdag 27 maart 2012 18:23 schreef Pino112 het volgende:
[..]
Ik zag tuts uit 2008 staan, dus daarom mijn twijfels.
Dat wel, maar om dat een beginner te gaan leren alhoewel misschien is namespacing wel een goede startquote:Op dinsdag 27 maart 2012 21:32 schreef kucher het volgende:
PHP6 is dood, maar het verschil tussen 5.2 en 5.4 is wel groot.
namespaces is iets van PHP 5.3. Als je iets typisch PHP 5.4 als vorobeeld wilt geven, kun je bijvoorbeeld traits nemen. Maar om dat nou bij een beginner uit te leggen, lijkt me niet slim...quote:Op dinsdag 27 maart 2012 22:49 schreef totalvamp het volgende:
[..]
Dat wel, maar om dat een beginner te gaan leren alhoewel misschien is namespacing wel een goede start
Ik zie het nut van namespaces bij PHP niet helemaal in. Je moet de bestanden toch includen dus die tijd ben je al kwijt. Als PHP goed omgaat met niet geheel inlezen van de bestanden totdat de namespace wordt aangeroepen, dan heeft het wel een voordeel aangezien hij dan pas gaat inlezen wat hij nodig heeft.quote:Op dinsdag 27 maart 2012 22:49 schreef totalvamp het volgende:
[..]
Dat wel, maar om dat een beginner te gaan leren alhoewel misschien is namespacing wel een goede start
Het nut is dat je nooit meer 2 dezelfde classes kan aanroepen. Aangezien er meerdere classes kunnen bestaan met dezelfde naamgeving is dat dus handig. Ook hoeft includen dus niet meer. voor mijn huidige applicatie is dit perfect!quote:Op woensdag 28 maart 2012 09:16 schreef Pakspul het volgende:
[..]
Ik zie het nut van namespaces bij PHP niet helemaal in. Je moet de bestanden toch includen dus die tijd ben je al kwijt. Als PHP goed omgaat met niet geheel inlezen van de bestanden totdat de namespace wordt aangeroepen, dan heeft het wel een voordeel aangezien hij dan pas gaat inlezen wat hij nodig heeft.
Enige wat ik trouwens van PHP zag dat nog een verbetering was is het gebruik van woord "static" n functies. Dat hij het afdwingt deze functies beter te gebruiken. Liever had ik punten gezien als:
• betere type casting $var1 = string en blijft een string, niet dat het halvewege de code ineens een integer kan worden.
• Return types in functie name, zodat je precies weet wat je terug krijgt.
• Verplicht parameter types opgeven
• Functie overloading
Hoe weet PHP dan waar de classes staan als includen niet meer hoeft?quote:Op woensdag 28 maart 2012 16:11 schreef totalvamp het volgende:
[..]
Het nut is dat je nooit meer 2 dezelfde classes kan aanroepen. Aangezien er meerdere classes kunnen bestaan met dezelfde naamgeving is dat dus handig. Ook hoeft includen dus niet meer. voor mijn huidige applicatie is dit perfect!
Weet ik, maar waar ik op doel is dat het volgende mogelijk is zonder foutmeldingquote:static methods bestaat al een tijdje hoor
1 2 3 4 5 6 7 8 9 10 11 | <?php class Foo { public function Bar() { echo "Foo::Bar!!!"; } } Foo::Bar(); ?> |
quote:Ik ben het wel eens met je dat method parameter types aangegeven moeten kunnen worden in een interface/abstract class.
Dit kan in PHP niet:quote:overloading bestaat al
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php class Foo { public function Bar(PrimaryClass $var) { // do something } public function Bar(SecondaryClass $var) { // do something } public function Bar(TertiaryClass $var) { // do something } } ?> |
Commentaar dwingt het niet af en dat zou wel ideaal zijn. Ook voor het opvoeden van de programmeur die wordt dan gedwongen om goed om te gaan met types.quote:waarom zou je return types in de functienaam willen? Je hoort gewoon iets terug te geven en dat zet je in een comment boven de functie.
Ik maak zelf gebruik van een autoloader (zoals je normaal ook zou hebben).quote:Op woensdag 28 maart 2012 19:37 schreef Pakspul het volgende:
Hoe weet PHP dan waar de classes staan als includen niet meer hoeft?
Dat is toch logisch? het voordeel van static is dat er geen instance gemaakt hoeft te worden van de class. Dit is gewoon zoals het hoort imo.quote:Weet ik, maar waar ik op doel is dat het volgende mogelijk is zonder foutmelding
[ code verwijderd ]
Dit mag niet, static moet er bij anders klopt het gewoon niet.
overloading houdt iets anders is.quote:Dit kan in PHP niet:
[ code verwijderd ]
Wat wel heel handig is.
Ik neem dan aan dat je zoiets zou willen:quote:Commentaar dwingt het niet af en dat zou wel ideaal zijn. Ook voor het opvoeden van de programmeur die wordt dan gedwongen om goed om te gaan met types.
1 2 3 4 5 | <?php function foo(int $int, @return string) { return 'het getal is: '.$int; } |
Dan worden de bestanden toch nog gewoon geinclude? Maar goed, dubbel class namen kan handig zijn.quote:Op woensdag 28 maart 2012 20:03 schreef totalvamp het volgende:
[..]
Ik maak zelf gebruik van een autoloader (zoals je normaal ook zou hebben).
Nee, want je static functie kan anders zijn dan je normale funtie. In je normale functie kun je gebruik maken van je $this variabel.quote:[..]
Dat is toch logisch? het voordeel van static is dat er geen instance gemaakt hoeft te worden van de class. Dit is gewoon zoals het hoort imo.
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 | <?php class String { public $Value; public function __construct($val) { $this->Value = $var; } public function ConCat(String $var) { return new String($this->Value . $var->Value); } public static function ConCat(String $v1, String $v2) { return new String($v1->Value . $v2->Value); } } $query = new String('SELECT '); $query = $query->ConCat(new String('FROM '); $query2 = String::ConCat(new String('SELECT '), new String('FROM ')); ?> |
Duidelijk dat PHP en OO wereld twee andere dingen bedoelen. Ik doel op hoe het in OO wereld hoort: http://en.wikipedia.org/wiki/Function_overloadingquote:
Liever op de c# manierquote:[..]
Ik neem dan aan dat je zoiets zou willen:
[ code verwijderd ]
dat zou inderdaad wel van pas komen.
1 | public int Drive(int miles, int speed) { return 0; } |
Ja maar het aanroepen van de class gaat dus anders Op namespace en niet op naam en die kijkt in een folder etc.quote:Op woensdag 28 maart 2012 20:13 schreef Pakspul het volgende:
[..]
Dan worden de bestanden toch nog gewoon geinclude? Maar goed, dubbel class namen kan handig zijn.
Je kunt in static functies gebruik maken van self::quote:Nee, want je static functie kan anders zijn dan je normale funtie. In je normale functie kun je gebruik maken van je $this variabel.
[ code verwijderd ]
Zo programmeer je static functies (niet kijken naar de classes, kon even niets beters verzinnen ), maar je niet zomaar een static functie als een normale functie gebruiken. Dan komt het overloaden verhaal weer om de hoek kijken.
Hmm interessant, ik kan begrijpen waarom je dat zou willen ja. Nu ik erover nadenk... waarom ik dat wel zou willenquote:Duidelijk dat PHP en OO wereld twee andere dingen bedoelen. Ik doel op hoe het in OO wereld hoort: http://en.wikipedia.org/wiki/Function_overloading
Ik zou het dan liever zo zien, ik vind het wel fijn als er ook echt function bij staatquote:Liever op de c# manier
[ code verwijderd ]
1 | public function int Drive() |
1 2 3 4 5 6 7 8 9 10 | <?php namespace Traffic\System\Core; function Autoloader($className) { //echo 'The following class was loaded:'. $className. '<br />'; $className = str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php'; require $className; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php require 'Traffic/System/Core/Autoloader.php'; spl_autoload_register('\\Traffic\\System\\Core\\Autoloader'); define('DIRSEP', DIRECTORY_SEPARATOR); // database test $db = new Traffic\System\Core\Database(); $view = new Traffic\Views; // New grid $grid = new Traffic\Grid(); $grid->addRoad(new Traffic\Roads\Sides\Topside, $coords = array(5,4)); $grid->addRoad(new Traffic\Roads\Sides\BottomSide, $coords = array(5,5)); // etc ?> |
Weet ik, maar dat zijn wel twee verschillende dingen en die gebruik je niet door elkaar heen. Als je statische functies gebruikt mag $this niet voorkomen en dat is in PHP nu wel mogelijk.quote:Op woensdag 28 maart 2012 20:21 schreef totalvamp het volgende:
[..]
Ja maar het aanroepen van de class gaat dus anders Op namespace en niet op naam en die kijkt in een folder etc.
[..]
Je kunt in static functies gebruik maken van self::
Extra type werk de ( ) geeft al aan dat het een functie isquote:[..]
Hmm interessant, ik kan begrijpen waarom je dat zou willen ja. Nu ik erover nadenk... waarom ik dat wel zou willen
[..]
Ik zou het dan liever zo zien, ik vind het wel fijn als er ook echt function bij staat
[ code verwijderd ]
Snap het idee, maar ben benieuwd of introductie van namespaces ook invloed heeft op performance.quote:Voorbeeldje van mijn autoloader:
[ code verwijderd ]
Hoe ik in bestanden iets aanroep:
[ code verwijderd ]
EDIT: de FoK! php highlight ondersteunt nog geen namespaces
Tja er kloppen wel meer dingen niet (qua logica) in PHP.quote:Op woensdag 28 maart 2012 20:26 schreef Pakspul het volgende:
[..]
Weet ik, maar dat zijn wel twee verschillende dingen en die gebruik je niet door elkaar heen. Als je statische functies gebruikt mag $this niet voorkomen en dat is in PHP nu wel mogelijk.
[..]
Extra type werk de ( ) geeft al aan dat het een functie is
[..]
Snap het idee, maar ben benieuwd of introductie van namespaces ook invloed heeft op performance.
1 2 3 | <?php final static public int function Foo(); ?> |
Ik zie niet zo snel het voordeel ervan in tegenover een eigen class maken.quote:Op woensdag 28 maart 2012 20:36 schreef Pakspul het volgende:
En als we dan toch nog even bezig zijn fields mogen ook toegevoegd worden.
http://msdn.microsoft.com/en-us/library/ms173118.aspx
Fokking ideaal!
Ik vind die code lelijk, maar dat komt vooral omdat functienamen en propertyname met een hoofdletter beginnen. Da's wel gebruikelijk voor class names, niet voor andere dingen. En die static functie heb je niet nodig als je dit kunt doen:quote:Op woensdag 28 maart 2012 20:13 schreef Pakspul het volgende:
[..]
Dan worden de bestanden toch nog gewoon geinclude? Maar goed, dubbel class namen kan handig zijn.
[..]
Nee, want je static functie kan anders zijn dan je normale funtie. In je normale functie kun je gebruik maken van je $this variabel.
[ code verwijderd ]
Zo programmeer je static functies (niet kijken naar de classes, kon even niets beters verzinnen ), maar je niet zomaar een static functie als een normale functie gebruiken. Dan komt het overloaden verhaal weer om de hoek kijken.
1 2 3 | <?php $query = new String('SELECT ')->concat(new String ('FROM ')) ?> |
In PHP kun je een functie maken die optionele parameters heeft. Dat is vergelijkbaar met je overloading voorbeeld.quote:Duidelijk dat PHP en OO wereld twee andere dingen bedoelen. Ik doel op hoe het in OO wereld hoort: http://en.wikipedia.org/wiki/Function_overloading
Ik vraag me af of er dynamically typed talen zijn waar dat in werkt.quote:Liever op de c# manier
[ code verwijderd ]
Je kunt checks uitvoeren op je class variabelen. Of readonly variabelen maken.quote:Op woensdag 28 maart 2012 20:40 schreef totalvamp het volgende:
[..]
Ik zie niet zo snel het voordeel ervan in tegenover een eigen class maken.
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 | class { protected DateTime _Birthday; public DateTime BirthDay { set { if ( value > DateTime.Now ) { // geboortedatum ligt in de toekomst dat kan niet throw new ArgumentOutOfRangeException(); } this._Birthday = value; } get { return this.Birthday; } } public int Age { get { TimeSpan diff = DateTime.Now - this._Bithday; return (int) Math.Floor(diff.Days / 365.25); } } } |
Dat is gewoon een hele andere programmeer style ineensquote:Op woensdag 28 maart 2012 21:00 schreef Pakspul het volgende:
[..]
Je kunt checks uitvoeren op je class variabelen. Of readonly variabelen maken.
[ code verwijderd ]
Uppercamelcase is lowercamelcase mag je gebruiken zoals je wil, als je maar consistent bent in het gebruik.quote:Op woensdag 28 maart 2012 21:00 schreef Light het volgende:
[..]
Ik vind die code lelijk, maar dat komt vooral omdat functienamen en propertyname met een hoofdletter beginnen. Da's wel gebruikelijk voor class names, niet voor andere dingen. En die static functie heb je niet nodig als je dit kunt doen:
[ code verwijderd ]
Het is weer zo'n afgeraffelde oplossing.quote:[..]
In PHP kun je een functie maken die optionele parameters heeft. Dat is vergelijkbaar met je overloading voorbeeld.
Dit maakt PHP ook een makkelijke taal, maar officieel moet het gewoon anders en dat zou wel mooi zijn als ze dat eens ingaan voeren. Want ze zijn al bezig om een volwassen taal te worden.quote:[..]
Ik vraag me af of er dynamically typed talen zijn waar dat in werkt.
Voorbeeld is geschreven in c#, maar dat werkt wel super goed. Readonly variabelen ook, soms kan dat best handig uitkomen.quote:Op woensdag 28 maart 2012 21:02 schreef totalvamp het volgende:
[..]
Dat is gewoon een hele andere programmeer style ineens
Komt vast ooit wel in PHP terecht.
Moet? mag PHP nog een eigen taal zijn, of moet het allemaal een pot nat zijn en allemaal hetzelfde?quote:Op woensdag 28 maart 2012 21:04 schreef Pakspul het volgende:
Dit maakt PHP ook een makkelijke taal, maar officieel moet het gewoon anders en dat zou wel mooi zijn als ze dat eens ingaan voeren.
Dat kan in PHP ook:quote:Op woensdag 28 maart 2012 21:00 schreef Pakspul het volgende:
[..]
Je kunt checks uitvoeren op je class variabelen. Of readonly variabelen maken.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php class Foo { private $birthDate; public function getBirthDate() { return $this->birthDate; } public function setBirthDate(DateTime $date) { if($date > new DateTime() { throw new InvalidArgumentException('Datum mag niet in de toekomst liggen'); } $this->birthDate = $date; } public function getAge() { $diff = $this->birthDate->diff(new DateTime()); $age = $diff->y; return $age; } } ?> |
Nou ja moet, zou leuk zijn als ze de standaarden volgen.quote:Op woensdag 28 maart 2012 21:09 schreef Sitethief het volgende:
[..]
Moet? mag PHP nog een eigen taal zijn, of moet het allemaal een pot nat zijn en allemaal hetzelfde?
Weet ik, maar die get/set functies in vind ik dan weer niet mooi c# en PHP lijken best voor op elkaar, maar als het op er aan komt dan kies ik toch voor c# en dan kijk ik niet naar mogelijkheden, maar puur naar opmaak.quote:Op woensdag 28 maart 2012 21:10 schreef Light het volgende:
[..]
Dat kan in PHP ook:
[ code verwijderd ]
Dat is het belangrijkste.quote:Op woensdag 28 maart 2012 21:04 schreef Pakspul het volgende:
[..]
Uppercamelcase is lowercamelcase mag je gebruiken zoals je wil, als je maar consistent bent in het gebruik.
Sinds PHP 5.4 kan het wel, iig als je twee haakjes toevoegt (en misschien ook zonder die extra haakjes):quote:Het was ook een voorbeeld en wat jij doet kan niet aangezien. PHP geeft dan een error.
1 2 3 | <?php $query = (new String('SELECT '))->concat(new String ('FROM ')) ?> |
Nee, het is een valide manier van werken, helemaal in de tijd dat typehinten in PHP nog niet mogelijk was.quote:[..]
Het is weer zo'n afgeraffelde oplossing.
PHP is dynamically typed, en dat heeft voor- en nadelen. Jouw idee over hoe dingen moeten, zijn niet altijd mogelijk. En als je een statically typed taal wilt, moet je geen PHP gebruiken.quote:[..]
Dit maakt PHP ook een makkelijke taal, maar officieel moet het gewoon anders en dat zou wel mooi zijn als ze dat eens ingaan voeren. Want ze zijn al bezig om een volwassen taal te worden.
Nadeel is dat de mensen dan heel veel code opnieuw moeten gaan schrijven.
Dan kun je nog altijd de magic funnctions __get en __set gebruiken.quote:Op woensdag 28 maart 2012 21:15 schreef Pakspul het volgende:
Weet ik, maar die get/set functies in vind ik dan weer niet mooi c# en PHP lijken best voor op elkaar, maar als het op er aan komt dan kies ik toch voor c# en dan kijk ik niet naar mogelijkheden, maar puur naar opmaak.
en _call en _callStaticquote:Op woensdag 28 maart 2012 21:28 schreef Light het volgende:
[..]
Dan kun je nog altijd de magic funnctions __get en __set gebruiken.
Bij de fields in C# bouw je ook methods. Je geeft ze alleen niet zo expliciet een naam.quote:Op woensdag 28 maart 2012 21:36 schreef Pakspul het volgende:
[..]
en _call en _callStatic
Opties zat, maar heb geen zin om methodes te bouwen om functionaliteiten na te bootsen.
thanks..iemand al ooit iets mee gedaan?quote:Op vrijdag 30 maart 2012 14:23 schreef KomtTijd... het volgende:
http://php.net/manual/en/function.exif-read-data.php
sommige fototoestellen nemen idd een rotatie op in de exif data.
even inloggen en dan kun je in de settings maintenance mode uit zetten als het goed is.quote:Op vrijdag 30 maart 2012 21:30 schreef Blue_Panther_Ninja het volgende:
O jah, nieuwe Joomla database gemaakt!!
hoe kan ik dit weghalen??
[ link | afbeelding ]
Even proberen!!quote:Op vrijdag 30 maart 2012 23:10 schreef stefanhaan het volgende:
[..]
even inloggen en dan kun je in de settings maintenance mode uit zetten als het goed is.
Tevens leuke hentai tab heb je open
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 | <?php /** * @package Joomla.Site * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // Set flag that this is a parent file. define('_JEXEC', 1); define('DS', DIRECTORY_SEPARATOR); if (file_exists(dirname(__FILE__) . '/defines.php')) { include_once dirname(__FILE__) . '/defines.php'; } if (!defined('_JDEFINES')) { define('JPATH_BASE', dirname(__FILE__)); require_once JPATH_BASE.'/includes/defines.php'; } require_once JPATH_BASE.'/includes/framework.php'; // Mark afterLoad in the profiler. JDEBUG ? $_PROFILER->mark('afterLoad') : null; // Instantiate the application. $app = JFactory::getApplication('site'); // Initialise the application. $app->initialise(); // Mark afterIntialise in the profiler. JDEBUG ? $_PROFILER->mark('afterInitialise') : null; // Route the application. $app->route(); // Mark afterRoute in the profiler. JDEBUG ? $_PROFILER->mark('afterRoute') : null; // Dispatch the application. $app->dispatch(); // Mark afterDispatch in the profiler. JDEBUG ? $_PROFILER->mark('afterDispatch') : null; // Render the application. $app->render(); // Mark afterRender in the profiler. JDEBUG ? $_PROFILER->mark('afterRender') : null; // Return the response. echo $app; |
dat kun je niet vanuit de index beschrijf even specifiek wat je wilquote:Op zaterdag 31 maart 2012 00:16 schreef Blue_Panther_Ninja het volgende:
index.php
[ code verwijderd ]
Welke moet ik weg hebben voor de site login in gedoe als het offline is?
Zie post 141.quote:Op zaterdag 31 maart 2012 00:21 schreef stefanhaan het volgende:
[..]
dat kun je niet vanuit de index beschrijf even specifiek wat je wil
Ja maar wil je alleen het inloggen weghalen of de hele under construction?quote:
alleen inloggen.quote:Op zaterdag 31 maart 2012 01:24 schreef stefanhaan het volgende:
[..]
Ja maar wil je alleen het inloggen weghalen of de hele under construction?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | SELECT TOP 1 t.IETS1, t.IETS2 FROM TABEL1 AS t WHERE t.ID='2' SELECT TOP 1 q.IETS3 FROM TABEL2 AS q WHERE q.ID='2' SELECT TOP 1 s.IETS4 s.IETS5 s.IETS6 FROM TABEL3 AS s WHERE s.ID='2' |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT TOP 1 t.IETS1, t.IETS2, q.IETS3, s.IETS4, s.IETS5, s.IETS6 FROM TABEL1 AS t TABEL2 AS q TABEL3 AS s WHERE t.ID='2' AND q.ID='2' AND s.ID='2' |
Ja zoiets vermoed ik ook al. Hij gaat, denk ik, een relatie zoeken waarmee de where clause overeenstemt. Dus hij zoekt ook in de lege tabel een record met ID='2', die dus niet bestaat en dus oneindig lang gaat zoeken?quote:Op dinsdag 3 april 2012 10:07 schreef Scorpie het volgende:
Volgens mij is je gebundelde query niet hetzelfde als je drie verschillende queries.
Dit.quote:Op dinsdag 3 april 2012 10:07 schreef Scorpie het volgende:
Volgens mij is je gebundelde query niet hetzelfde als je drie verschillende queries.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | SELECT TOP 1 t.IETS1, t.IETS2 FROM TABEL1 AS t WHERE t.ID='2' SELECT TOP 1 q.IETS3 FROM TABEL2 AS q WHERE q.ID='2' SELECT TOP 1 s.IETS4 s.IETS5 s.IETS6 FROM TABEL3 AS s WHERE s.ID='2' |
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 | SELECT veld1 veld2 FROM tabel1 WHERE id='2' LIMIT 1 UNION SELECT veld3 FROM tabel2 WHERE id='2' LIMIT 1 UNION SELECT veld4 veld5 veld6 FROM tabel3 WHERE id='2' LIMIT 1 |
quote:* The number of columns in each SELECT statement has to be the same .
* The data type of the column in the column list of the SELECT statement must be the same or at least convertible.
I know maar het was even handig nu met copy-paste en LIMIT wordt in mijn geval, MS SQL server, niet ondersteund. Maar evengoed datgene wat je post heb ik dus geprobeerd en werkt niet omdat het aantal kolommen niet gelijk is.quote:Op dinsdag 3 april 2012 10:16 schreef stefanhaan het volgende:
[..]
Dit.
Allereerst je tabel namen in een enkele query is nergens voor nodig. Dus maak het je niet onnodig lastig dat je alle velden vanuit je query via t.** moet benaderen maar gewoon **.
De TOP tag werkt alleen in SQL server (Dacht ik) dus kan je beter LIMIT gebruiken doet exact hetzelfde en is vrijwel overal ondersteunt.
[ code verwijderd ]
=>
[ code verwijderd ]
Alleen hou deze restricties in je achterhoofd:
[..]
Gedaan, had geen effect, hoewel ik wel idd dacht dat dit zou werken.quote:
Dan zou je net zo goed de 3 query's afzonderlijk kunnen doen of via een JOIN. Maar ik weet niet waarvoor je het wil gebruiken dus wat meer info misschien?quote:* The number of columns in each SELECT statement has to be the same .
* The data type of the column in the column list of the SELECT statement must be the same or at least convertible.
Klopt de drie queries kan ik ook afzonderlijk doen. Alleen wil ik het netwerkverkeer minimaliseren. Wat ik nu eerst dus wil doen is gewoon de resultaten van de 3 queries combineren, achter elkaar zetten dus. Zodat ik het resultaat daarna in 1 brok wordt verstuurd i.p.v. 3 brokken. Daarna gooi ik de boel nog in een storedprocedure.quote:Op dinsdag 3 april 2012 10:24 schreef stefanhaan het volgende:
Daarom poste ik ook dit.
[..]
Dan zou je net zo goed de 3 query's afzonderlijk kunnen doen of via een JOIN. Maar ik weet niet waarvoor je het wil gebruiken dus wat meer info misschien?
Sowieso als je alleen de top 5 resultaten terug laat sturen. Vind er vrijwel geen netwerkverkeer plaats omdat je maar 15 rows retourneerd ipv 15000 bv. Dus is het in dit geval wel verwaarloosbaar.quote:Op dinsdag 3 april 2012 10:33 schreef Dale. het volgende:
[..]
Klopt de drie queries kan ik ook afzonderlijk doen. Alleen wil ik het netwerkverkeer minimaliseren. Wat ik nu eerst dus wil doen is gewoon de resultaten van de 3 queries combineren, achter elkaar zetten dus. Zodat ik het resultaat daarna in 1 brok wordt verstuurd i.p.v. 3 brokken. Daarna gooi ik de boel nog in een storedprocedure.
Ik had net ook nog geprobeerd met een FULL OUTER JOIN maar daarbij zelfde resultaat.
True maar niet als er grofweg 10.000 pc's dit iedere 5 seconde gaan doenquote:Op dinsdag 3 april 2012 10:36 schreef stefanhaan het volgende:
[..]
Sowieso als je alleen de top 5 resultaten terug laat sturen. Vind er vrijwel geen netwerkverkeer plaats omdat je maar 15 rows retourneerd ipv 15000 bv. Dus is het in dit geval wel verwaarloosbaar.
Zelfs dan valt het nog mee mits goede server.quote:Op dinsdag 3 april 2012 10:38 schreef Dale. het volgende:
[..]
True maar niet als er grofweg 10.000 pc's dit iedere 5 seconde gaan doen
Die is er niet maar goed krijg ik nog een antwoord of blijft dit een ja-dit-ja-zus gesprek hahaha want ik wil de resultaten toch combineren.quote:Op dinsdag 3 april 2012 10:41 schreef stefanhaan het volgende:
[..]
Zelfs dan valt het nog mee mits goede server.
quote:
quote:en werkt niet omdat het aantal kolommen niet gelijk is.
Okee! En ja sorry ik heb het database schema niet gemaakt maar ander vraagje... Ik hou het dus gewoon bij 3 queries... Maar kan ik dan de resultaten in sql makkelijk mergen?quote:Op dinsdag 3 april 2012 10:50 schreef GlowMouse het volgende:
Andere oplossingen worden echt lelijk
hoofdletters als tabel-/kolomnamen zijn echt lelijk
SELECT t.IETS1,t.IETS2,q.IETS3,q.IETS4
FROM TABEL1 AS t
LEFT JOIN TABEL 2 AS q ON(q.ID=2)
WHERE t.ID=2
LIMIT 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ----------- | a1 | a2 | ----------- ---------------- | b1 | b2 | b3 | ---------------- ------ | c1 | ------ Wordt ------------------------------- | a1 | a2 | b1 | b2 | b3 | c1 | ------------------------------- |
Dat zou idd werken helaas merk ik net dat ik dan nog tegen een conversie fout aanloopquote:Op dinsdag 3 april 2012 10:54 schreef GlowMouse het volgende:
Het is mooier om, als je maar één kolom hebt en bij een andere twee kolommen, toch UNION te gebruiken en dan ipv select veld1 te doen: select veld1,0
Oke thanks. Dan gewoon maar een loopje en in de programmeertaal mergen.quote:Op dinsdag 3 april 2012 11:35 schreef GlowMouse het volgende:
Nee dat kan niet. De methode van joinen is het enige alternatief op union dat ik kan bedenken.
1 2 | $var = false; $arr = array("key" => $var['key']); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | SELECT TOP 1 t.iets1, t.iets2, NULL FROM tabel1 AS t WHERE t.id=2 UNION ALL SELECT TOP 1 q.iets3, NULL, NULL FROM tabel2 AS q WHERE q.id=2 UNION ALL SELECT TOP 1 s.iets4 s.iets5 s.iets6 FROM tabel3 AS s WHERE s.id=2 |
Dat lijkt me wel de beste oplossing. En het simpelst om te implementeren.quote:Op donderdag 5 april 2012 11:48 schreef Catch22- het volgende:
koppeltabel maken?
product_id | accessoire_id
?
en dan een gecombineerde sleutel maken
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | productentabel | id | productnaam | | 1 | Apparaat 1 | | 2 | Apparaat 2 | | 3 | Apparaat 3 | | 4 | Accessoire 1 | | 5 | Accessoire 2 | Dus als accessoire 1 bij product 2 en 3 hoort en accessoire 2 bij product 1 en 2 dan zal het als volgt moeten in een relatietabel? productenrelatiestabel | id | accessoire_id | gerelateerd_product_id | | 1 | 4 | 2 | | 2 | 4 | 3 | | 3 | 5 | 1 | | 4 | 5 | 2 | |
quote:Op donderdag 5 april 2012 13:06 schreef GlowMouse het volgende:
maar dan zonder id in de tweede tabel
Dus 'id' is niet verplicht in een tabel? Nou mooi, kan die weg.quote:Op donderdag 5 april 2012 13:09 schreef Catch22- het volgende:
en je maakt van accessoire_id en product_id (niet gerelateerd_product_id) een composite key. Hiermee dwing je uniqueness af.
Met een koppeltabel geef je aan welke 2 entiteiten bijelkaar horen. Deze combinatie is uniek. Dit stel je in door een composite key te gebruiken. Hierdoor heeft die rij niet nog een eigen id nodig, want zijn unique identifier is de composite keyquote:Op donderdag 5 april 2012 13:33 schreef Crutch het volgende:
[..]
[..]
Dus 'id' is niet verplicht in een tabel? Nou mooi, kan die weg.
En wat Catch22- zegt, bedoel je daarmee dat ik een kolom moet toevoegen waarin ik aangeef bij welk product(id) deze niet hoort?
Wat is daar het praktisch nut van?
Oh, lol. Die kolomnamen zijn hier puur ter illustratie.quote:Op donderdag 5 april 2012 13:55 schreef KomtTijd... het volgende:
hij bedoelt dat het woordje "gerelateerd" een beetje onzinnige toevoeging is aan de kolom-naam. Beter weglaten.
En als tweede bedoelt hij, dat je een key ook over meerdere kolommen kan defineren. Daarom is de kolom ID overbodig. Aangezien de combinatie [accessoire_id + product_id] sowieso al uniek is.
Je hebt 2 hoofdtabellen:quote:Op donderdag 5 april 2012 14:05 schreef Crutch het volgende:
Maar hoe werkt zo'n composite key?
Kan iemand mij een voorbeeld geven?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT Users.*, Rights.name FROM Users INNER JOIN UserRights ON UserRights.user_id = Users.id INNER JOIN Rights ON Rights.id = UserRights.right_id WHERE Users.id = 1 |
quote:Op donderdag 5 april 2012 14:05 schreef Crutch het volgende:
Maar hoe werkt zo'n composite key?
Kan iemand mij een voorbeeld geven?
1 2 3 4 5 6 | CREATE TABLE `user_rights` ( `user_id` INT NOT NULL , `right_id` INT NOT NULL , PRIMARY KEY(`user_id`, `right_id`) , INDEX (`right_id`) ); |
1 2 3 4 5 6 | SELECT parent.name AS parentName, products.* FROM nested_menu AS node, nested_menu AS parent, produkten AS products WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.menu_id = products.product_menu AND products.highlight=1 GROUP BY product_id ORDER BY parentName, first_price ASC |
1 | AND node.lft > parent.lft IF product_id <van deze rij> != product_id <vorige rij> |
Je kunt hier even kijken (al lijkt je query er al een beetje op)quote:Op donderdag 5 april 2012 23:07 schreef Swetsenegger het volgende:
Ik heb weer eens een query vraagje.
Ik heb een nested set model en nu wil ik van een bepaald groepjes nodes de parent naam achterhalen
[ code verwijderd ]
Dit werkt bijna Het gaat mis bij nodes die 2 niveaus diep zitten.
aan deze query moet een where worden toegevoegd:
[ code verwijderd ]
is dit uberhaupt mogelijk?
Is het niet makkelijker om te stellen dat node.id != parent.id ? Volgens mij ben je er al als je dat toeveoegt aan je query.quote:Op donderdag 5 april 2012 23:07 schreef Swetsenegger het volgende:
Ik heb weer eens een query vraagje.
Ik heb een nested set model en nu wil ik van een bepaald groepjes nodes de parent naam achterhalen
[ code verwijderd ]
Dit werkt bijna Het gaat mis bij nodes die 2 niveaus diep zitten.
aan deze query moet een where worden toegevoegd:
[ code verwijderd ]
is dit uberhaupt mogelijk?
Als je de indexen goed hebt, kun je behoorlijk grote query's nog snel uitvoeren. Meerdere query's maken kan ook, maar dat vereist weer extra logica in PHP en die kost ook tijd.quote:Op donderdag 5 april 2012 23:16 schreef totalvamp het volgende:
[..]
Je kunt hier even kijken (al lijkt je query er al een beetje op)
http://stackoverflow.com/(...)e-children-of-a-node
Eerlijk gezegd zet ik nooit alles in 1 grote query vaak maakt dit dingen alleen maar langzamer dan bijvoorbeeld een paar losse (niet altijd hoor).
Nee, zelfde probleem... als je maar 1 niveau diep bent klopt dat namelijk wel.quote:Op donderdag 5 april 2012 23:25 schreef Light het volgende:
[..]
Is het niet makkelijker om te stellen dat node.id != parent.id ? Volgens mij ben je er al als je dat toeveoegt aan je query.
Hmm... 't klinkt wel als een leuk probleemquote:Op vrijdag 6 april 2012 20:38 schreef Swetsenegger het volgende:
[..]
Nee, zelfde probleem... als je maar 1 niveau diep bent klopt dat namelijk wel.
Ik heb het maar opgelost door het hoogste niveau een tag te geven en op die tag te filteren.quote:Op vrijdag 6 april 2012 22:02 schreef Light het volgende:
[..]
Hmm... 't klinkt wel als een leuk probleem
Da's ook een optie natuurlijk. Maar ik wil wel proberen een nettere oplossing te vinden. Moet ik alleen eerst die tabelstructuur voor mezelf helder krijgen.quote:Op vrijdag 6 april 2012 22:05 schreef Swetsenegger het volgende:
[..]
Ik heb het maar opgelost door het hoogste niveau een tag te geven en op die tag te filteren.
Niet mooi zeker niet binnen de elegante nested set oplossing, wel effectief.
http://crisp.tweakblogs.n(...)-only-one-query.htmlquote:Op vrijdag 6 april 2012 22:05 schreef Swetsenegger het volgende:
[..]
Ik heb het maar opgelost door het hoogste niveau een tag te geven en op die tag te filteren.
Niet mooi zeker niet binnen de elegante nested set oplossing, wel effectief.
Ow maar mijn menu tree opbouwen doe ik ook met 1 query.quote:Op vrijdag 6 april 2012 22:32 schreef GlowMouse het volgende:
[..]
http://crisp.tweakblogs.n(...)-only-one-query.html
1 2 3 4 5 6 | SELECT parent.".$menuName." AS parentname, node.menu_id, node.".$menuName." AS name, node.lft, node.rgt, ( COUNT( parent.".$menuName." ) -1) AS depth FROM nested_menu AS node, nested_menu AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.menu_id ORDER BY node.lft |
Ow vast, maar ik heb nu een menu tree waar je zonder problemen items tussen kan voegen, kan deleten, op kan schuiven, etc.quote:Op vrijdag 6 april 2012 22:43 schreef GlowMouse het volgende:
Jouw query is lelijker omdat hij niet via indices gesorteerd kan worden.
1 | UPDATE image SET path = UPDATE(path, d:/dir/dir2,g:/dir/dir2); |
quote:Op zaterdag 7 april 2012 11:42 schreef smegmanus het volgende:
Ik wil een path veranderen (voor een applicatie die foto's weg schrijft naar een bepaalde dir) en gebruik het volgende command:
[ code verwijderd ]
Het werkt echter niet, wat doe ik verkeerd?
1 2 3 | UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value |
1 2 3 | UPDATE image SET path = "d:/dir/dir2" WHERE id=xx |
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 | <?php date_default_timezone_set('GMT'); function serverToGMTStamp() { // replaces time return time();//-((date("O") / 100)*60*60);// server timestamp to gmt timestmap } function userInputToGMTStamp($userStamp,$userTimeZone) { // to be saved to database return $userStamp-($userTimeZone*60*60);// user timestamp to gmt timestmap } function gmtToUserTime($gmtStamp,$userTimeZone,$format="d-m-Y H:i") { // displayed date /time in user timezone return date($format,$gmtStamp+($userTimeZone*60*60)); } function inputTimetoStamp($input){ if($input){ list($date, $time) = explode(' ',$input); list($hour, $minute) = explode(':',$time); list($month, $day, $year) = explode('/',$date); $input = mktime ($hour, $minute, 0, $day, $month, $year); return $input; } } $databaseDate = '04/06/2012 20:00'; //date in database already $userTimeZone = 1; //compared to gmt $databaseDateTimestamp = 1333742400; // gmt stamp from database $databaseDateTimestampToUser = $databaseDateTimestamp+($userTimeZone*60*60); // to user timezonestamp $serverToGMTStamp = serverToGMTStamp(); $serverToUserGMTtoUser = $serverToGMTStamp+($userTimeZone*60*60); // to user timezonestamp echo 'databaseDateTimestamp (gmt): '.$databaseDateTimestamp.'<br />'; echo 'databaseDateTimestamp date (gmt): '.date("m/d/Y, H:i",$databaseDateTimestamp).'<br /><br />'; echo 'databaseDateTimestamp (user): '.$databaseDateTimestampToUser.'<br />'; echo 'databaseDateTimestamp date (user): '.date("m/d/Y, H:i",$databaseDateTimestampToUser).'<br /><br />'; echo 'serverTimeStamp (gmt): '.$serverToGMTStamp.'<br />'; echo 'serverTimeStamp date (gmt): '.date("m/d/Y, H:i",$serverToGMTStamp).'<br /><br />'; //echo 'serverTimeStamp (user): '.$serverToUserGMTtoUser.'<br />'; //echo 'serverTimeStamp date (user): '.date("m/d/Y, H:i",$serverToUserGMTtoUser).'<br /><br />'; if($serverToUserGMTtoUser>$databaseDateTimestampToUser) { echo 'input time already past by '.(($serverToUserGMTtoUser-$databaseDateTimestampToUser)/(60*60)); } else{ echo 'input time not past'; } exit(); |
1 2 3 4 5 | <?php function serverToGMTStamp() { // replaces time return time(); } ?> |
Voordat je denkt dat je iets fout doet terwijl het niet zo is; momenteel is het voor ons GMT +2 omdat het zomertijd is.quote:Op zaterdag 7 april 2012 18:24 schreef Darkomen het volgende:
Heren,
Ik hoop dat jullie me weer eens kunnen helpen.
Ik ben iets aan het bouwen dat de usertabellen van vbullentin 4 gebruikt.
Hierin staat de usertimezone welke het verschil van hun tijd zone met GMT. bijvoorbeeld voor mijzelf +1
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $wallPosts = array(); $wallPosts=file('wallPost.txt', FILE_IGNORE_NEW_LINES); if(!in_array($_SESSION['uid'], $wallPost)) { $onload = "onload=\"postToWall();\""; $fp = fopen('wallPost.txt', 'a'); fwrite($fp, $_SESSION['uid']."\r\n"); fclose($fp); echo $onload; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $wallPosts = array(); $wallPosts=file('wallPost.txt', FILE_IGNORE_NEW_LINES); print_r($wallPosts); // dit geeft een array terug met de sessieID die HIERONDER geschreven wordt if(!in_array($_SESSION['uid'], $wallPost)) { $onload = "onload=\"postToWall();\""; // wordt niet uitgevoerd $fp = fopen('wallPost.txt', 'a'); //wordt wel uitgevoerd fwrite($fp, $_SESSION['uid']."\r\n"); //wordt wel uitgevoerd fclose($fp); // wordt wel uitgevoerd echo $onload; } ?> |
Nee hij is niet leeg, anders kan hij die ook niet schrijven naar de txt file op regel 8...quote:Op woensdag 11 april 2012 14:50 schreef GlowMouse het volgende:
$_SESSION['uid'] zal wel leeg zijn, maar dat is standaard debugwerk. Regel 2 is overbodig.
string(15) "100003526677056" NULLquote:Op woensdag 11 april 2012 15:01 schreef GlowMouse het volgende:
var_dump($_SESSION['uid'], $wallPost)
Ik delete alle history en browser gegevens tussen elke testquote:
Script loopt gewoon door. UID wordt in de txt file geschreven maar geen 'die'quote:Op woensdag 11 april 2012 15:26 schreef GlowMouse het volgende:
wijzig echo $onload; in die($onload), dan kun je hem niet missen
1 2 3 4 5 6 7 8 9 10 11 | <?php $wallPosts=file('wallPost.txt', FILE_IGNORE_NEW_LINES); if(!in_array($_SESSION['uid'], $wallPosts)) { $onload = "onload=\"postToWall();\""; $fp = fopen('wallPost.txt', 'a'); fwrite($fp, $_SESSION['uid']."\r\n"); fclose($fp); die($onload); } ?> |
Je bent gewoon genaaid weggooien en opnieuw starten.quote:Op woensdag 11 april 2012 19:42 schreef boem-dikkie het volgende:
Hehe ja weet ik wel maar ik had geen zin om voor één of twee keer gebruik dat te doen.
Maar goed, misschien maar wel gewoon doen.
http://php.net/manual/en/function.htmlentities.php zet double_encode op false.quote:Op zaterdag 14 april 2012 23:38 schreef Keiichi het volgende:
Ik ben nog verder met character encodings aan het kloten, ik heb nu het volgende.
De huidige pagina is ISO-8859-1. Ik ben er achter gekomen dat goede browsers automatisch UTF-8 of karakters buiten ISO omzet naar htmlentities. Hierdoor leek het altijd of UTF8 nooit een probleem geweest is. Probleem is dat ik de output uit de database overal door htmlentities ga afvangen, waardoor data onbruikbaar is (alle &'s worden vervangen door & waardoor eerder gemaakt htmlentities() letterlijk getoond worden. Daar kan niemand wat mee.
Is er een mogelijkheid om htmlentities die bestaan met rust laten en alle ander karakters die geen htmlentitiy vormen wel door htmlentities()
dat deed de truc.quote:Op zondag 15 april 2012 00:49 schreef Sitethief het volgende:
[..]
http://php.net/manual/en/function.htmlentities.php zet double_encode op false.
Ik weet niet wat voor veld je bedoelt, maar als ik jou was en je wil weten wat je mag toepassen , dan zou ik alle velden bijlangs gaan en een lijst met Karakters samenstellen die er wel in mogen. Om dit soort karakters te voorkomen.quote:Op zondag 15 april 2012 01:49 schreef Keiichi het volgende:
[..]
dat deed de truc.
Iets anders, welke karacters kunnen er in latin1 voorkomen? Ik heb een veld waar iemand gepresteerd heeft dit karakter in te zetten: http://www.fileformat.info/info/unicode/char/2018/index.htm
-edit-
Ik word vaak gebeten door karakter encoding nu ik alles naar UTF8 probeer te brengen.
Is die collation daar niet voor bedoeld om ongeldige karakters niet (of anders) op te slaan? Nu lijkt het alsof dat ene specifieke UTF8 geldige karakter gewoon in latin1 voor kan komen.quote:Op zondag 15 april 2012 03:23 schreef cablegunmaster het volgende:
[..]
Ik weet niet wat voor veld je bedoelt, maar als ik jou was en je wil weten wat je mag toepassen , dan zou ik alle velden bijlangs gaan en een lijst met Karakters samenstellen die er wel in mogen. Om dit soort karakters te voorkomen.
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 | <form id="contact-form" name="contact-form" method="post" action="submit.php"> <table width="100%" border="0" cellspacing="0" cellpadding="5"> <tr> <td width="15%"><label for="name">Naam</label></td> <td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="door" id="door" value="<?php=$_SESSION['post']['name']?>" /></td> <td width="15%" id="errOffset"> </td> </tr> <tr> </tr> <tr> <td valign="top"><label for="bericht">Bericht</label></td> <td><textarea name="bericht" id="bericht" class="validate[required]" cols="35" rows="5"><?php=$_SESSION['post']['message']?></textarea></td> <td valign="top"> </td> </tr> <tr> <td><label for="captcha"><?php=$_SESSION['n1']?> + <?php=$_SESSION['n2']?> =</label></td> <td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha" id="captcha" /></td> <td valign="top"> </td> </tr> <tr> <td valign="top"> </td> <td colspan="2"><input type="submit" name="button" id="button" value="Submit" /> <input type="reset" name="button2" id="button2" value="Reset" /> |
Je hebt nu het html gedeelte zelf af. de ACTION leid naar een php file. Deze zal je moeten aanmaken. Is dit de eerste keer met php? In dit bestand maak je de verwerking richting de DB en waar je de pagina daarna naartoe leid.quote:Op zondag 15 april 2012 19:03 schreef drumminggod het volgende:
Hoi.
Ik heb een gastenboek gemaakt. Alleen nu heb ik een probleempje. Ik heb 3 velden.
• Naam
• Bericht
• captcha code
Nu heb ik alles ingevoerd en moet hij naar mijn mysql gaan. Ik heb even een paar scripts bekeken maar wordt er niet wijzer van.
Moet dit met:
[ code verwijderd ]
?
Bvd
[ code verwijderd ]
Ik heb wel aardig ervaring met php. Maar dit wist ik niet!. Ik moet dus een .php maken. Daar naartoe linken en in de .php het gaan plaatsen in mijn database? (ik zal even op w3schools kijken van je linkje!)quote:Op zondag 15 april 2012 19:09 schreef cablegunmaster het volgende:
[..]
Je hebt nu het html gedeelte zelf af. de ACTION leid naar een php file. Deze zal je moeten aanmaken. Is dit de eerste keer met php? Waarin je de verwerking maakt met de Database. Je hebt nu een SQL insert query nodig , een verbinding met je SQL database.
Connect:
http://www.w3schools.com/php/php_mysql_connect.asp
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 | <form id="contact-form" name="contact-form" method="post" action="submit.php"> <table width="100%" border="0" cellspacing="0" cellpadding="5"> <tr> <td width="15%"><label for="name">Naam</label></td> <td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="door" id="door" value="<?php=$_SESSION['post']['name']?>" /></td> <td width="15%" id="errOffset"> </td> </tr> <tr> </tr> <tr> <td valign="top"><label for="bericht">Bericht</label></td> <td><textarea name="bericht" id="bericht" class="validate[required]" cols="35" rows="5"><?php=$_SESSION['post']['message']?></textarea></td> <td valign="top"> </td> </tr> <tr> <td><label for="captcha"><?php=$_SESSION['n1']?> + <?php=$_SESSION['n2']?> =</label></td> <td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha" id="captcha" /></td> <td valign="top"> </td> </tr> <tr> <td valign="top"> </td> <td colspan="2"><input type="submit" name="button" id="button" value="Submit" /> <input type="reset" name="button2" id="button2" value="Reset" /> <?php=$str?> <img id="loading" src="img/ajax-load.gif" width="16" height="16" alt="loading" /></td> </tr> </table> </form> <?php=$success?> </div> <div class="tutorial-info">. </div> </div> </body> </html> <?php mysql_connect("xxx",xxx,xxx); // zelf in te vullen mysql_select_db(gastenboek); // zelf in te vullen if(isset($_POST['door']) and isset($_POST['bericht']) and $_POST['door']!='Typ hier uw naam' and $_POST['bericht']!='Typ hier uw bericht!' ) { $bericht = $_POST['bericht']; $door = $_POST['door']; $datum = date("d-m-Y H:i:s", time()); $bericht = str_replace("\n", "<br>", $bericht); $query = "INSERT INTO gastenboek(bericht, door , datum) VALUES ('".$bericht."', '".$door."', '".$datum."')"; $sql=mysql_query($query) or die (mysql_error()); } $query = "SELECT * FROM gastenboek ORDER BY id DESC"; $sql=mysql_query($query) or die (mysql_error()); while ($obj=mysql_fetch_object($sql)) { $door = $obj->door; $datum = $obj->datum; $bericht = $obj->bericht; ?> |
Je kan het naar zichzelf laten verwijzen door de pagina naam het eigen te maken.quote:Op zondag 15 april 2012 19:13 schreef drumminggod het volgende:
[..]
Ik heb wel aardig ervaring met php. Maar dit wist ik niet!. Ik moet dus een .php maken. Daar naartoe linken en in de .php het gaan plaatsen in mijn database? (ik zal even op w3schools kijken van je linkje!)
Dit is mijn totale code:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 | <?php if(isset($_POST)){ echo " Dank u voor uw bijdrage"; }else{ ?> // Formulier <?php } ?> |
Goed punt : ) en daarom ook altijd: http://php.net/manual/en/function.mysql-real-escape-string.php om je variabelen die je invoert.quote:
Enkele simpele code en ik kon je DB verwijderen / Tabel verwijderen.quote:Op zondag 15 april 2012 19:20 schreef drumminggod het volgende:
Nou. Dan ben ik vanaf nu een eerste klas dummie.. Want ik zit nu dus echt totaal vast. Ik dacht data en gasennboekj wmet eeMicaptcha code een eitje was... Mijn beveiliging is dus zo lek als een mandje?
1 2 3 4 5 | <?php function esc($string){ return mysql_real_escape_string($string); } ?> |
Oei. Dat klinkt niet goed . Maar ik zit dus nu echt compleet vast.. Het formulier is verder wel goed en zo?quote:Op zondag 15 april 2012 19:22 schreef cablegunmaster het volgende:
[..]
Enkele simpele code en ik kon je DB verwijderen / Tabel verwijderen.
Om eerlijk gezegd te zijn ziet je code eruit als copy en paste van een online projectje.quote:Op zondag 15 april 2012 19:26 schreef drumminggod het volgende:
[..]
Oei. Dat klinkt niet goed . Maar ik zit dus nu echt compleet vast.. Het formulier is verder wel goed en zo?
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 | <form id="contact-form" name="contact-form" method="post" action="submit.php"> <table width="100%" border="0" cellspacing="0" cellpadding="5"> <tr> <td width="15%"><label for="name">Naam</label></td> <td width="70%"><input type="text" class="validate[required,custom[onlyLetter]]" name="door" id="door" value="<?php=$_SESSION['post']['name']?>" /></td> <td width="15%" id="errOffset"> </td> </tr> <tr> </tr> <tr> <td valign="top"><label for="bericht">Bericht</label></td> <td><textarea name="bericht" id="bericht" class="validate[required]" cols="35" rows="5"><?php=$_SESSION['post']['message']?></textarea></td> <td valign="top"> </td> </tr> <tr> <td><label for="captcha"><?php=$_SESSION['n1']?> + <?php=$_SESSION['n2']?> =</label></td> <td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha" id="captcha" /></td> <td valign="top"> </td> </tr> <tr> <td valign="top"> </td> <td colspan="2"><input type="submit" name="button" id="button" value="Submit" /> <input type="reset" name="button2" id="button2" value="Reset" /> <?php=$str?> <img id="loading" src="img/ajax-load.gif" width="16" height="16" alt="loading" /></td> </tr> </table> </form> <?php=$success?> </div> <div class="tutorial-info">. </div> </div> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // Submit.php <?php mysql_connect("xxx",xxx,xxx); // zelf in te vullen mysql_select_db(gastenboek); // zelf in te vullen if(isset($_POST['door']) && isset($_POST['bericht']) && $_POST['door'] !='Typ hier uw naam' && $_POST['bericht']!='Typ hier uw bericht!' ) { $bericht = $_POST['bericht']; $door = $_POST['door']; $datum = date("d-m-Y H:i:s", time()); $bericht = str_replace("\n", "<br>", $bericht); $query = "INSERT INTO gastenboek (bericht, door , datum) VALUES ('".esc($bericht)."', '".esc($door)."', '".esc($datum)."')"; $sql=mysql_query($query) or die (mysql_error()); } $query = "SELECT * FROM gastenboek ORDER BY id DESC"; $sql=mysql_query($query) or die (mysql_error()); while ($obj=mysql_fetch_object($sql)) { $door = $obj->door; $datum = $obj->datum; $bericht = $obj->bericht; } function esc($string){ return mysql_real_escape_string($string); } ?> |
Ik heb de basis van internet. Dat kloptquote:Op zondag 15 april 2012 19:29 schreef cablegunmaster het volgende:
[..]
Om eerlijk gezegd te zijn ziet je code eruit als copy en paste van een online projectje.
[ code verwijderd ]
[ code verwijderd ]
Dat maakt je niet meteen een PHP expert . meestal pak ik voor de datum eerder now() dan dat ik date pak. makkelijker om meteen in de DB te stoppen.quote:Op zondag 15 april 2012 19:33 schreef drumminggod het volgende:
[..]
Ik heb de basis van internet. Dat klopt
1 2 3 4 5 6 7 8 | <?php while ($obj=mysql_fetch_object($sql)) { $door = $obj->door; $datum = $obj->datum; $bericht = $obj->bericht; } ?> |
Het is verstandig om hem helemaal opnieuw te maken?quote:Op zondag 15 april 2012 19:34 schreef cablegunmaster het volgende:
[..]
Dat maakt je niet meteen een PHP expert . meestal pak ik voor de datum eerder now() dan dat ik date pak. makkelijker om meteen in de DB te stoppen.
1 2 3 | <?php if(isset($_POST['door']) && isset($_POST['bericht']) && $_POST['door'] !='Typ hier uw naam' && $_POST['bericht']!='Typ hier uw bericht!' ) { ?> |
1 2 3 | <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') ?> |
Antwoord staat er al tussen om post met standaard bericht te voorkomen.quote:Op zondag 15 april 2012 19:36 schreef Pakspul het volgende:
Waarom trouwens
[ code verwijderd ]
En niet gewoon:
[ code verwijderd ]
Zoek de php for dummies boek op , download XAMPP en ga daar mee bezig met experimenteren.quote:Op zondag 15 april 2012 19:39 schreef drumminggod het volgende:
Oke.. Ik begin helemaal overnieuw. Volgens mij is deze code echt bagger. Haha.
Ik snap de waarom vragen namelijk niet
Ik heb MAMP. Dat is ook een localhost server .quote:Op zondag 15 april 2012 19:40 schreef cablegunmaster het volgende:
[..]
Zoek de php for dummies boek op , download XAMPP en ga daar mee bezig met experimenteren.
Xampp is je localhost server. waarmee je op je eigen pc een website in php kan vertalen naar een normale webpagina. (webside scripting). Rest staat wel in het dummy boekje .
Ik ben zelf ook geen PHP-god, maar dit zinnetje in combinatie met jouw posts in dit topic deed me glimlachen .quote:
Ik werk er veel mee (school), maar blijkbaar snap ik er gewoon geen drol van. Altijd fijn als je denkt dat je het kan!quote:Op zondag 15 april 2012 19:59 schreef Sitethief het volgende:
[..]
Ik ben zelf ook geen PHP-god, maar dit zinnetje in combinatie met jouw posts in dit topic deed me glimlachen .
isset is wel mooier, anders krijg je een warning bij error_reporting(E_ALL);quote:Op zondag 15 april 2012 19:38 schreef cablegunmaster het volgende:
[..]
Antwoord staat er al tussen om post met standaard bericht te voorkomen.
De Isset is overbodig inderdaad. kan beter !empty zijn .
quote:Op zondag 15 april 2012 20:15 schreef drumminggod het volgende:
Oke. Ik heb nu iets. Alleen als ik nu mijn naam NIET heb ingevuld. Of een bericht niet. Dan moet er eigenlijk een foutmelding komen... Alleen nu plaatst hij gewoon lege vakken in mijn db.. Zal wel iets kleins zijn maar voor mij onvindbaar op ww3schools
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php If(!empty($_POST['VELDNAAM'])) { $error = "Er is geen BLABLABLABLA ingevuld"; } //Om je query heen invullen. if(!isset($error)){ // Insert Query uitvoeren. } //bij je formulier. if(!empty($error)){ echo $error; } ?> |
quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $errorlog = array(); if ( empty($_POST['veldnaam']) === false ) { $errorlog[] = "<li>error omschrijving</li>"; } if ( count($errorlog) == 0 ) { // do database work } else { echo "<ul>" . join("", $errorlog) . "</ul>"; } ?> |
Een string met alleen een spatie is niet empty.quote:Op zondag 15 april 2012 21:44 schreef totalvamp het volgende:
Ik zou geen empty gebruiken. Dan werkt een spatie alleen ook Doe een betere check met strlen
Nee dat is mijn punt. Je moet dus een adequate check doen op je POST. strlen() + trim() + weetikveel()quote:Op maandag 16 april 2012 21:17 schreef Light het volgende:
[..]
Een string met alleen een spatie is niet empty.
Maar voordat je iets gaat doen met een post-variable, moet je wel controleren of de variable bestaat. Dat voorkomt notices, en ook die moet je niet willen.quote:Op maandag 16 april 2012 23:53 schreef totalvamp het volgende:
[..]
Nee dat is mijn punt. Je moet dus een adequate check doen op je POST. strlen() + trim() + weetikveel()
Daarvoor gebruik je isset() niet empty. Zoals eerder aangegeven, maar alleen een isset is natuurlijk niet voldoende, net als empty dat niet is.quote:Op dinsdag 17 april 2012 00:13 schreef Light het volgende:
[..]
Maar voordat je iets gaat doen met een post-variable, moet je wel controleren of de variable bestaat. Dat voorkomt notices, en ook die moet je niet willen.
Yep. Volgens mij bedoelen we hetzelfde maar omschrijven we het anders.quote:Op dinsdag 17 april 2012 00:23 schreef totalvamp het volgende:
[..]
Daarvoor gebruik je isset() niet empty. Zoals eerder aangegeven, maar alleen een isset is natuurlijk niet voldoende, net als empty dat niet is.
Dit is inderdaad een belangrijk punt, tevens kun je controleren of je formulier wel goed over komt. Je kunt dus andere acties ondernemen als ze niet ge-set zijn. Dit kan betekenen dat er met het formulier is gerommeld.quote:Op dinsdag 17 april 2012 00:13 schreef Light het volgende:
[..]
Maar voordat je iets gaat doen met een post-variable, moet je wel controleren of de variable bestaat. Dat voorkomt notices, en ook die moet je niet willen.
Bedankt! Het werkt!quote:Op zondag 15 april 2012 20:47 schreef Pakspul het volgende:
[..]
[ code verwijderd ]
Zo kun je meerdere velden checken
1 | <input type="submit" value="Toevoegen" onClick=<a href="javascript:location.reload(true)" /> |
Wat is er mis mee? Dat je een tool nodig bent?quote:Op maandag 16 april 2012 13:58 schreef wipes66 het volgende:
Weet iemand nog een goede tool om php code mee te analyseren? Bv om ongebruikte variable/functies, foutieve opmaak etc mee te detecteren. Het liefst eentje met een webinterface (geen cli).
Na het schrijven naar de database de gebruiker doorsturen naar de goede pagina header("Location xxx"); ?quote:Op dinsdag 17 april 2012 10:31 schreef drumminggod het volgende:
[..]
Bedankt! Het werkt!
nog 1 resterend probleempje... Bij het herladen van mijn pagina verstuurd hij mijn berichtje net zo vaak als dat f5 wordt ingedrukt. Ik heb deze code:
[ code verwijderd ]
maar als ik op toevoegen heb geklikt en druk op f5 komt hij dus twee keer! (of meerdere malen)
Wat is er fout? Ik dacht aan buffer legen... alleen geen idee hoe dat netjes moet.
1. Simpelste oplossing is een redirect . Dan stuurt hij door naar de volgende pagina en dan mogen ze zo veel F5 drukken als ze willen maar dan herhaalt hij niet.quote:Op dinsdag 17 april 2012 10:31 schreef drumminggod het volgende:
[..]
Bedankt! Het werkt!
nog 1 resterend probleempje... Bij het herladen van mijn pagina verstuurd hij mijn berichtje net zo vaak als dat f5 wordt ingedrukt. Ik heb deze code:
[ code verwijderd ]
maar als ik op toevoegen heb geklikt en druk op f5 komt hij dus twee keer! (of meerdere malen)
Wat is er fout? Ik dacht aan buffer legen... alleen geen idee hoe dat netjes moet.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php function esc($string){ return mysql_real_escape_string($string); } //Dit eronder ff opzoeken hoe je het aanpakt maar het generale idee is er wel :). $test = $db->fetchAssoc($db->query("Select * from table where text = ".esc($_POST['text'])."")); if(empty($test[0]['text'])) { // execute insert query. } redirect("pagina.php"); ?> |
Headers mogen geen output daarvoor hebben dus een reeks html + vervolgens de header kan tot fouten leiden.quote:Op dinsdag 17 april 2012 11:39 schreef Pakspul het volgende:
[..]
Na het schrijven naar de database de gebruiker doorsturen naar de goede pagina header("Location xxx"); ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php //==== Redirect... Try PHP header redirect, then Java redirect, then try http redirect.: function redirect($url){ if (!headers_sent()){ //If headers not sent yet... then do php redirect header('Location: '.$url); exit; }else{ //If headers are sent... do java redirect... if java disabled, do html redirect. echo '<script type="text/javascript">'; echo 'window.location.href="'.$url.'";'; echo '</script>'; echo '<noscript>'; echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; echo '</noscript>'; exit; } }//==== End -- Redirect |
Liever gewoon code waarbij er niks wordt getoond tot op het einde als alles verwerkt is dan heb je die problemen ook nietquote:Op dinsdag 17 april 2012 11:40 schreef cablegunmaster het volgende:
[..]
1. Simpelste oplossing is een redirect . Dan stuurt hij door naar de volgende pagina en dan mogen ze zo veel F5 drukken als ze willen maar dan herhaalt hij niet.
2. een Check inbouwen dat als de text precies zo al voorkomt dat hij niet meer een Insert uitvoert maar doorgaat met redirecten.
[ code verwijderd ]
[..]
Headers mogen geen output daarvoor hebben dus een reeks html + vervolgens de header kan tot fouten leiden.
[ code verwijderd ]
Prefereer daarom liever Redirect
Dit, tussen door stukken al in elkaar zetten en op het laatste even layoutje er omheen rammen en er uit gooien. Dan kun je er zelf voor kiezen of er uberhaupt iets geprint moet worden en kun je veilig omgaan met header functies.quote:Op dinsdag 17 april 2012 12:09 schreef totalvamp het volgende:
[..]
Liever gewoon code waarbij er niks wordt getoond tot op het einde als alles verwerkt is dan heb je die problemen ook niet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php //pseudo code. om +1 te krijgen. function Switch_ID($id) { $sourceid = $db->Assocfetch($db->query("select * from categorie where id = " '.esc($id) .' " limit 1 " )); $id++; $target = $db->Assocfetch($db->query("select * from categorie where id = " '.esc($id) .' " limit 1" )); if(!isset($target)) { return false; }else{ $db->query("Update categorie set Variables = $sourceid[0] where id = " '.$id.' " limit 1" ); $id--; $db->query("Update categorie set Variables = $target[0] where id = " '.esc($id).' " limit 1" ); } } ?> |
Is dat niet het probleem opschuiven? Want dan zit je met een orderkolom met 1,2,3,4quote:Op dinsdag 17 april 2012 17:51 schreef Pakspul het volgende:
Gebruik een order kolom. Haal eerst oude order nummer op en zet die in de nieuwe nummer kun je berekenen door de richting.
opschuiven maakt toch niet uit, dan sorteer je toch gewoon op die kolom en heb je het allemaal goed. Als je ID nummers gaat veranderen dan begrijp je het idee van een primary key niet helemaal.quote:Op dinsdag 17 april 2012 17:57 schreef cablegunmaster het volgende:
[..]
Is dat niet het probleem opschuiven? Want dan zit je met een orderkolom met 1,2,3,4
en als je een groot aantal hebt. dan heb je dat probleem alsnog.
ff nadenken
Daarom moet je pas output richting browser sturen nadat alle logica is geweest. Dan heb je daar geen last van.quote:Op dinsdag 17 april 2012 11:40 schreef cablegunmaster het volgende:
[..]
1. Simpelste oplossing is een redirect . Dan stuurt hij door naar de volgende pagina en dan mogen ze zo veel F5 drukken als ze willen maar dan herhaalt hij niet.
2. een Check inbouwen dat als de text precies zo al voorkomt dat hij niet meer een Insert uitvoert maar doorgaat met redirecten.
[ code verwijderd ]
[..]
Headers mogen geen output daarvoor hebben dus een reeks html + vervolgens de header kan tot fouten leiden.
[ code verwijderd ]
Prefereer daarom liever Redirect
Bij de redirect code krijg ik dit:quote:Op dinsdag 17 april 2012 11:40 schreef cablegunmaster het volgende:
[..]
1. Simpelste oplossing is een redirect . Dan stuurt hij door naar de volgende pagina en dan mogen ze zo veel F5 drukken als ze willen maar dan herhaalt hij niet.
2. een Check inbouwen dat als de text precies zo al voorkomt dat hij niet meer een Insert uitvoert maar doorgaat met redirecten.
[ code verwijderd ]
[..]
Headers mogen geen output daarvoor hebben dus een reeks html + vervolgens de header kan tot fouten leiden.
[ code verwijderd ]
Prefereer daarom liever Redirect
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php if (mysql_num_rows($sql) == 0) { // Als er nog geen reacties geplaatst zijn echo 'We hebben nog geen reacties!'; } else { while($data = mysql_fetch_assoc($sql)) { // Als er wel reacties zijn geplaatst worden deze nu weergegeven echo '<b>Naam:</b> '.htmlspecialchars(stripslashes($data['door'])).'<br /> <b>Datum:</b> '.htmlspecialchars(stripslashes($data['datum'])).'<br /> <b>Bericht:</b><br />'.ubb($data['bericht']).'<br /><br /> <b>_________________________________________________________________________________________________________________________________________</b>'; } } { } redirect("gastenboek.php"); ?> |
natuurlijk! In de header moet het ook staan!quote:Op donderdag 19 april 2012 11:55 schreef boem-dikkie het volgende:
Je gebruikt een functie die niet gedefinieerd is. Heb je zelf een functie gemaakt die redirect heet? Je kunt mits je geen HTML voor je code hebt staan header('location: gastenboek.php'); gebruiken.
In de header moet je toch de funtie definieren?quote:
redirect() is niet een native functie van PHP, wat er bedoelt werd is http://php.net/manual/en/function.header.phpquote:Op donderdag 19 april 2012 11:51 schreef drumminggod het volgende:
[..]
Bij de redirect code krijg ik dit:
Fatal error: Call to undefined function redirect() in D:\xxx\UsbWebserver\UsbWebserver\Root\xxx\gastenboek.php on line 147
De pagina heet gastenboek en de code om line 147 is:
[ code verwijderd ]
Een noscript-tag in 2012? Really? Verwacht je veel bezoekers met Netscape 2?quote:Op dinsdag 17 april 2012 11:40 schreef cablegunmaster het volgende:
[..]
1. Simpelste oplossing is een redirect . Dan stuurt hij door naar de volgende pagina en dan mogen ze zo veel F5 drukken als ze willen maar dan herhaalt hij niet.
2. een Check inbouwen dat als de text precies zo al voorkomt dat hij niet meer een Insert uitvoert maar doorgaat met redirecten.
[ code verwijderd ]
[..]
Headers mogen geen output daarvoor hebben dus een reeks html + vervolgens de header kan tot fouten leiden.
[ code verwijderd ]
Prefereer daarom liever Redirect
failsafe .quote:Op donderdag 19 april 2012 13:58 schreef Tijn het volgende:
[..]
Een noscript-tag in 2012? Really? Verwacht je veel bezoekers met Netscape 2?
Gewoon lynx gebruikenquote:Op donderdag 19 april 2012 13:58 schreef Tijn het volgende:
[..]
Een noscript-tag in 2012? Really? Verwacht je veel bezoekers met Netscape 2?
Er bestaat ook nog zoiets als javascript uitschakelen of een javascript-blokker als plugin geinstalleerd hebben. Het is een kleine moeite om zo'n tag met een melding op te nemen, vooral voor webapplicaties die functioneel gezien vertrouwen op javascript.quote:Op donderdag 19 april 2012 13:58 schreef Tijn het volgende:
[..]
Een noscript-tag in 2012? Really? Verwacht je veel bezoekers met Netscape 2?
1 2 3 4 | RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*) index.php?p=$1 [L] |
1 2 3 4 5 6 7 | $p = $_GET["p"]; ... $query = "SELECT type,naam,url,id FROM artikelen WHERE naam='$p'"; ...etc |
1 2 3 4 | RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/(.*) index.php?x=$1&p=$2 [L] |
Dit is erg gevaarlijke code als je dit zo zou gebruiken.quote:Op vrijdag 20 april 2012 12:05 schreef JDx het volgende:
alles staat in een mapje: /artikel/
ik heb een .htacccess bestand met dit:
[ code verwijderd ]
en een index.php met dit:
[ code verwijderd ]
En dit werkt gewoon als ik dit doe: /artikel/appels
Maar eigenlijk wil ik die niet in een aparte map hebben, dat /artikel/ zou ook dynamisch moeten zijn.
Wat is er gevaarlijk aan dan?quote:Op vrijdag 20 april 2012 16:10 schreef totalvamp het volgende:
[..]
Dit is erg gevaarlijke code als je dit zo zou gebruiken.
Je escaped de variable $p niet die direct afkomstig is uit de GET array en dus door gebruikers van het script beïnvloedbaar is. Je script is in deze staat vatbaar voor SQL injecties.quote:
Dat iedereen kan doen wat 'ie wil met je gehele database.quote:
POST of GET maakt niks uit, het gaat erom dat je de input filtert voordat je het in je query stopt, omdat anders mensen zelf queries kunnen gaan invoeren en daarmee je database kunnen uitlezen en misschien zelfs veranderen.quote:Op zaterdag 21 april 2012 13:32 schreef JDx het volgende:
Wat vaag, dit heb ik ook gewoon van een tutorial en gebruik ik al jaren op al mijn sites, moet ik dan een post gebruiken?
1 2 3 4 5 | <?php 'SELECT * FROM `table` WHERE `string` = "'.mysql_real_escape_string($_GET['foo']).'" AND `number` = '.intval($_GET['bar']); ?> |
Zou het als ik jou was snel oplossen, de onderste site in je signature is al vatbaar daarvoor.quote:Op zaterdag 21 april 2012 13:32 schreef JDx het volgende:
Wat vaag, dit heb ik ook gewoon van een tutorial en gebruik ik al jaren op al mijn sites, moet ik dan een post gebruiken?
Sowieso niet erg handig om errors weer te geven.quote:Op zaterdag 21 april 2012 13:47 schreef themole het volgende:
[..]
Verander ?id=9 maar eens in ?id='; krijg je meteen een error.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |