1 2 3 4 5 6 7 8 9 10 11 12 13 | include("models/post.php"); class TVP extends Post { public static function makeTvp() { parent::makePost("TVP!"); } } TVP::makeTvp(); ?> |
Whehe, ja. Daar kunnen een hoop mensen de mist in gaan. empty kan ook toch?quote:Op woensdag 18 maart 2009 11:33 schreef Roy_T het volgende:
On topic: ik erger me nog steeds dood aan het feit dat "array() == null" in PHP naar true evalueertJa, ik kan === gebruiken, maar het gaat om het principe. Een lege array is niet "niets", het is een lege array.
1 2 3 4 5 6 7 8 9 10 11 | class TVP extends Post { public TVP() { parent::makePost("TVP!"); } } TVP(); |
Geen geldige constructor in PHP 5, officieel :Pquote:
1 2 3 4 5 6 7 8 9 10 11 | class TVP extends Post { public function __construct() { parent::__construct("TVP!"); } } new TVP(); ?> |
Ja, dat kan. Maar dat is symptoombestreiding: het is gewoon onlogisch om een lege array "null" te vinden.quote:Op woensdag 18 maart 2009 11:52 schreef Scorpie het volgende:
Whehe, ja. Daar kunnen een hoop mensen de mist in gaan. empty kan ook toch?
En een lege array is niks. Je ergert je zeker ook aan het feit dat $var = 0 ook failed met isempty().quote:Op woensdag 18 maart 2009 11:33 schreef Roy_T het volgende:
On topic: ik erger me nog steeds dood aan het feit dat "array() == null" in PHP naar true evalueertJa, ik kan === gebruiken, maar het gaat om het principe. Een lege array is niet "niets", het is een lege array.
Hoezo?quote:Op woensdag 18 maart 2009 12:16 schreef Roy_T het volgende:
[..]
Ja, dat kan. Maar dat is symptoombestreiding: het is gewoon onlogisch om een lege array "null" te vinden.
Er is een array "object" gemaakt, het zou er imo niet toe moeten doen of hier wel of niet iets in staat. Hetzelfde geldt overigens voor een lege string, de integer 0, etc.quote:Op woensdag 18 maart 2009 13:44 schreef slacker_nl het volgende:
Hoezo?
De array heeft wat memory toegewezen gekregen is bevat verder geen enkele waarde, aka NULL.
1 2 3 4 5 6 7 8 9 | feeds.*, feeds_items.* FROM feeds INNER JOIN feeds_items ON feeds_items.feed_id = feeds.id |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ---------------------------------- 1 | bla 1 | Blalala 1 | lalal 1 | blalala 1 | Blalala 1 | Bla 2 | Lalala 2 | Tralala 2 | Lalalala 2 | Joehoe 2 | Bla 2 | Blalala 2 | Blala 3 | Joehoe 3 | Hello 3 | Daag |
1 2 3 4 5 6 7 8 | ---------------------------------- 1 | bla 1 | Blalala 2 | Lalala 2 | Tralala 3 | Joehoe 3 | Hello |
Het is geen object, aangezien ik niet $array->functie() kan aanroepen. Zoals je wel kan met java met String.toLower, python idem. Dat zijn echte objecten.quote:Op woensdag 18 maart 2009 13:52 schreef Roy_T het volgende:
Er is een array "object" gemaakt, het zou er imo niet toe moeten doen of hier wel of niet iets in staat. Hetzelfde geldt overigens voor een lege string, de integer 0, etc.
Noem er eens eentje.quote:Zo onlogisch is mijn denkwijze overigens niet, want in tig andere talen is een lege array niet null, net zo min als een lege string of het getal 0 :)
Perl ziet een lege array ook als false:quote:In PHP is ervoor gekozen om het te doen zoals het gedaan is (PHP is niet de enige taal), maar dat neemt niet weg dat ik het stom, onlogisch en irritant vind :P
1 2 3 4 5 6 7 | if (@array) { print "found something\n"; } else { print "found nothing\n"; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | include_once('sys_db.inc'); $resultaat = mysql_query("SELECT COUNT(*) AS count FROM todo WHERE ". "Soort = 'l' OR Soort = 'v';") or die(mysql_error()); $gegevens = mysql_fetch_assoc($resultaat); $count = $gegevens["count"]; if ($count==0) exit(0); else exit(1); ?> |
Het ligt trouwens niet aan de sys_db.inc want andere programma's waar ik dat in gebruik werken wel zonder problemen. Dus wie o wie kan mij vertellen waarom dit imbeciel simpele programmaatje ervoor zorgt dat PHP constant crasht?quote:$ ./klaar.php
Segmentation fault
$ ./klaar.php
$ ./klaar.php
$ ./klaar.php
$ ./klaar.php
Segmentation fault
$ ./klaar.php
$ ./klaar.php
Segmentation fault
$ ./klaar.php
$ ./klaar.php
Segmentation fault
$ ./klaar.php
$
hmz.. misschien ff een memtest doen?quote:Segmentation fault can also occur under following circumstances:
a) A buggy program / command, which can be only fixed by applying patch.
b) It can also appear when you try to access an array beyond the end of an array under C programming.
c) Inside a chrooted jail this can occur when critical shared libs, config file or /dev/ entry missing.
d) Sometime hardware or faulty memory or driver can also create problem.
e) Maintain suggested environment for all computer equipment (overheating can also generate this problem).
isempty() bestaat niet, empty() en isset() wel.quote:Op woensdag 18 maart 2009 13:30 schreef slacker_nl het volgende:
[..]
En een lege array is niks. Je ergert je zeker ook aan het feit dat $var = 0 ook failed met isempty().
1 2 3 4 5 | $var = 0; var_dump(empty($var)); var_dump(isset($var)); ?> |
Ja, php en z'n naming conventions.. Dat vind ik nou bloedje irritant van php.quote:Op woensdag 18 maart 2009 21:45 schreef Light het volgende:
[..]
isempty() bestaat niet, empty() en isset() wel.
Eensquote:Op donderdag 19 maart 2009 00:15 schreef slacker_nl het volgende:
[..]
Ja, php en z'n naming conventions.. Dat vind ik nou bloedje irritant van php.
Ik ook inderdaadquote:Op donderdag 19 maart 2009 07:59 schreef Tuvai.net het volgende:
Ik heb voor PHP altijd die cheat sheet klaar liggen.Zelfs ik vergeet af en toe (de volgorde van) parameters van functies/methoden, terwijl ik al bijna 10 jaar met PHP werk.
$haystack, $needle. $needle, $haystack.
Note de aanhalingstekens rond "object" in mijn post. Ik weet dat het geen object is in PHP.quote:Op woensdag 18 maart 2009 18:12 schreef slacker_nl het volgende:
Het is geen object, aangezien ik niet $array->functie() kan aanroepen. Zoals je wel kan met java met String.toLower, python idem. Dat zijn echte objecten.
Dat is nog geen reden om er blij mee te zijn toch?quote:Een lege string is emtpy, een 0 is een boolean false waarde, dus het is logisch in een loose typed taal dit als "empty" ziet.
Nou, eentje dan: Ruby.quote:Noem er eens eentje.
Er zit dan ook echt geen lijn inquote:Op donderdag 19 maart 2009 07:59 schreef Tuvai.net het volgende:
Zelfs ik vergeet af en toe (de volgorde van) parameters van functies/methoden, terwijl ik al bijna 10 jaar met PHP werk.
quote:Op donderdag 19 maart 2009 09:00 schreef Catch22- het volgende:
je kan ook eclipse proberen (dat is een beetje als anale sex, daar moet je wel van houden)
Een array is daar net zoals in Java een echt object als ik dit zo lees:quote:Op donderdag 19 maart 2009 08:25 schreef Roy_T het volgende:
Note de aanhalingstekens rond "object" in mijn post. Ik weet dat het geen object is in PHP.
[..]
Dat is nog geen reden om er blij mee te zijn toch?
[quote]
Nou, eentje dan: Ruby.
Ja, dat klopt helemaal. En ik stoor me er dus aan dat dat in PHP niet zo is, omdat je daardoor onlogisch gedrag krijgt. Jij misschien niet, maar er zijn natuurlijk geen argumenten waarom ik dat niet zou mogenquote:Op donderdag 19 maart 2009 14:04 schreef slacker_nl het volgende:
Een array is daar net zoals in Java een echt object als ik dit zo lees:
http://www.techotopia.com/index.php/Understanding_Ruby_Arrays
1 2 3 4 5 6 7 8 | method makeTime(){ $queryTime = 1; $this->time = $queryTime; echo $queryTime; echo $this->time; } ?> |
Probeer eens self:: i.p.v. $this->.quote:Op donderdag 19 maart 2009 15:39 schreef Scorpie het volgende:
Hm. Als ik in een singleton class het volgende doe:
[ code verwijderd ]
Dan krijg ik 1,0 te zien. Moet ik variabelen in een singleton class anders definieren ?
Zal het eens ff proberen.quote:Op donderdag 19 maart 2009 15:53 schreef Tuvai.net het volgende:
[..]
Probeer eens self:: i.p.v. $this->.
Dit lijkt me wel mooier omdat de pagina dan niet opnieuw geladen dient te worden, maar daar heb ik nog minder kaas van gegeten.quote:
quote:Op donderdag 19 maart 2009 15:53 schreef Tuvai.net het volgende:
[..]
Probeer eens self:: i.p.v. $this->.
TCPDF (gebaseerd op FPDF, maar dan met unicode en html-support).quote:Op donderdag 19 maart 2009 23:31 schreef qu63 het volgende:
Hoe kan je nou een PDF-document netjes opmaken dmv PHP? Ik wil een soort van orderbevestiging/facturen systeem maken, waarbij er dus PDF's aangemaakt moeten worden inclusief logo's etc. Welke class is nou het makkelijkst/beste om te gebruiken?
Thanks!quote:Op vrijdag 20 maart 2009 09:17 schreef Tiemie het volgende:
[..]
TCPDF (gebaseerd op FPDF, maar dan met unicode en html-support).
Hm...moet ik eerst constante variable definieren ofzo........quote:Op donderdag 19 maart 2009 22:44 schreef Scorpie het volgende:
[..]
Werkt niet. Heb de hele code hier staan: http://pastebin.com/m37ccfcc0
Database class, extended class MySQL , en dan singleton pattern. Geen idee wat er mis gaat though.
1 2 3 | $sql = "SELECT id, startdate, enddate, eventname, place, country, eventtype, subscribedate, organizer, print FROM agenda ORDER BY startdate ASC, enddate ASC, subscribedate ASC LIMIT 8"; ?> |
Dat moet aan je overige code liggen.quote:Op vrijdag 20 maart 2009 23:04 schreef poepeneesje het volgende:
Iemand enig idee waarom bij onderstaande code de boel niet werkt? Bij het veranderen van de eerst ASC naar DESC toont hij wel iets, maar niet het goede. Het verwijderen van LIMIT of de notatie LIMIT 0,8 geeft ook geen verandering.
[ 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | include "./database/mysql-database-connect.php"; $sql = "SELECT id, startdate, enddate, eventname, place, country, eventtype, subscribedate, organizer, print FROM agenda ORDER BY startdate ASC, enddate ASC, subscribedate ASC LIMIT 8"; $query = mysql_query($sql) or die (mysql_error ()); while($request = mysql_fetch_array($query)) { $id = $request["id"]; $startdate = $request["startdate"]; $enddate = $request["enddate"]; $eventname = $request["eventname"]; $place = $request["place"]; $country = $request["country"]; $eventtype = $request["eventtype"]; $subscribedate = $request["subscribedate"]; $organizer = $request["organizer"]; $print = $request["print"]; $startday = date("d", strtotime($startdate)); $startmonth = date("m", strtotime($startdate)); $startyear = date("Y", strtotime($startdate)); $endday = date("d", strtotime($enddate)); $endmonth = date("m", strtotime($enddate)); $endyear = date("Y", strtotime($enddate)); $subscribeday = date("d", strtotime($subscribedate)); $subscribemonth = date("m", strtotime($subscribedate)); $subscribeyear = date("Y", strtotime($subscribedate)); if(($print == 1) && ($enddate >= date("Y-m-d"))) { $year = date("Y"); $nextyear = $year + 1; if(($startyear == $year) && ($endyear == $year)) { if($startmonth < 13) { if($startday == $endday) { if(strlen($eventname) > 45) { $shortEventname = trim(substr($eventname, 0, 42)); echo "<div class=\"date\">$startday/$endmonth/$endyear</div><div class=\"event\">$shortEventname...</div>"; } else { echo "<div class=\"date\">$startday/$endmonth/$endyear</div><div class=\"event\">$eventname</div>"; } } else { if(strlen($eventname) > 45) { $shortEventname = trim(substr($eventname, 0, 42)); echo "<div class=\"date\">$startday-$endday/$endmonth/$endyear</div><div class=\"event\">$shortEventname...</div>"; } else { echo "<div class=\"date\">$startday-$endday/$endmonth/$endyear</div><div class=\"event\">$eventname</div>"; } } } } } } include "./database/mysql-database-disconnect.php"; ?> |
De 8 die je opvraagt voldoen niet aan de IF, klaar. En 'een hele lijst met data' kun je prima met je query filteren.quote:Op vrijdag 20 maart 2009 23:21 schreef poepeneesje het volgende:
Zou met LIMIT gewoon moeten kunnen lijkt mij. Ik zie trouwens ook niet echt iets fout gaan in de IF's...
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 | function getrecords(){ $sql = "SELECT * from SPELERS"; $db = mysql_pconnect('localhost'); if(!db){ echo 'fout: kreeg geen verbinding met de database'; exit; } mysql_select_db('zaalvoetbal'); $result=mysql_query($sql); if (!$result){ echo 'fout: sql statement niet correct'; exit; } return $result; } function queryString ($id,$a,$b,$c,$d){ return htmlspecialchars('spelers_id='.$id.'spelers_voornaam='.$a.'spelers_achternaam='.$b.'spelers_gsm='.$c.'spelers_punten='.$d); } $result = getrecords(); $num_results = mysql_num_rows($result); echo 'aantal records:'.$num_results.'<BR><BR>'."\n"; echo '<table border=1>'; for ($i=0; $i < $num_results;$i++){ $row = mysql_fetch_array($result); $spelers_id = $row['spelers_id']; $spelers_voornaam = $row['spelers_voornaam']; $spelers_achternaam = $row['spelers_achternaam']; $spelers_gsm = $row['spelers_gsm']; $spelers_punten = $row['spelers_punten']; echo '<tr><td>'; echo $spelers_id; echo '</td><td>'; echo $spelers_voornaam; echo '</td><td>'; echo $spelers_achternaam; echo '</td><td>'; echo $spelers_gsm; echo '</td><td>'; echo $spelers_punten; echo '</td><td>'; echo '<a href="spelers_edit.php?'; echo queryString($spelers_id,$spelers_voornaam,$spelers_achternaam,$spelers_gsm,$spelers_punten); echo '">edit</a>'; echo '</td></tr>'."\n"; } echo '</table>'; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php $spelers_id = $HTTP_GET_VARS['spelers_id']; $spelers_voornaam = $HTTP_GET_VARS['spelers_voornaam']; $spelers_achternaam = $HTTP_GET_VARS['spelers_achternaam']; $spelers_gsm = $HTTP_GET_VARS['spelers_gsm']; $spelers_punten = $HTTP_GET_VARS['spelers_punten']; ?> <?php echo $spelers_voornaam?>; <form method="post" action="spelersUpdateRecord.php"> <input type="hidden" name="spelers_id" value="<?php echo $spelers_id?>"> Voornaam:<br> <input type="Text" name="spelers_voornaam" size=20 value="<?php echo $spelers_voornaam?>"><br><br> achternaam:<br> <input type="Text" name="spelers_achternaam" size=20 value="<?php echo $spelers_achternaam?>"><br><br> gsm:<br> <input type="Text" name="spelers_gsm" size=20 value="<?php echo $spelers_gsm?>"><br><br> punten:<br> <input type="Text" name="spelers_punten" size=20 value="<?php echo $spelers_punten?>"><br><br> <input type="submit" name="bewaren" value="bewaren"> </form> |
ten eerste thx voor de tips! ik ben net begonnen en heb een boek gelezen die (net gekeken) in 2005 is uitgekomen. Ik ga een nieuw boek aanschaffen.quote:Op zondag 22 maart 2009 12:48 schreef GlowMouse het volgende:
1. Je wilt geen verbinding maken met de database in een algemene functie.
2. mysql_pconnect kost lekker veel verbindingen wanneer je veel apache workerthreads hebt.
3. gebruik geen for én mysql_fetch_array($result), maar het kortere while($row = mysql_fetch_array($result)) { }
4. gebruik urlencode
5. gebruik $_GET['varname'] ipv $HTTP_GET_VARS['varname']
6. zoek eens op XSS (cross site scripting)
7. gebruik templates om code en opmaak te scheiden
heb de$HTTP..vervangen door $_GET. Nog steeds wordt in invulvelden de waarde niet gevuld. Weet je waaraan het kan liggen?quote:Op zondag 22 maart 2009 12:48 schreef GlowMouse het volgende:
1. Je wilt geen verbinding maken met de database in een algemene functie.
2. mysql_pconnect kost lekker veel verbindingen wanneer je veel apache workerthreads hebt.
3. gebruik geen for én mysql_fetch_array($result), maar het kortere while($row = mysql_fetch_array($result)) { }
4. gebruik urlencode
5. gebruik $_GET['varname'] ipv $HTTP_GET_VARS['varname']
6. zoek eens op XSS (cross site scripting)
7. gebruik templates om code en opmaak te scheiden
Nee, heb je een linkje?quote:Op zondag 22 maart 2009 13:57 schreef jakees het volgende:
[..]
heb de$HTTP..vervangen door $_GET. Nog steeds wordt in invulvelden de waarde niet gevuld. Weet je waaraan het kan liggen?
nee ik werk alleen lokaal nog. Site is nog niet up zeg maar. Als ik in mijn spelers_edit.phpquote:
1 |
1 |
ik heb een scherm waarin spelers wil wijzigen één voor één. ik selecteer een speler in een scherm waarna ik in het wijzig scherm kom. Ik wil dan dat de waardes van de tabel in de velden gevuld zijn. Dus bij voornaam staat dan al bijvoorbeeld "piet". Deze tekst kan worden overschreven door hetgeen ik intyp in het veld.quote:Op zondag 22 maart 2009 14:05 schreef GlowMouse het volgende:
Puntkomma's moeten sowieso voor de ?> komen. Het statement is 'echo $spelers_voornaam', en dat moet je afsluiten met een puntkomma.
Je post begrijp ik niet.
Dan moet je je variablen vullen door middel van een database query, niet met een GET request.quote:Op zondag 22 maart 2009 15:04 schreef jakees het volgende:
[..]
ik heb een scherm waarin spelers wil wijzigen één voor één. ik selecteer een speler in een scherm waarna ik in het wijzig scherm kom. Ik wil dan dat de waardes van de tabel in de velden gevuld zijn. Dus bij voornaam staat dan al bijvoorbeeld "piet". Deze tekst kan worden overschreven door hetgeen ik intyp in het veld.
<?= $bla ?> werkt prima zonder ; hoor (idem voor het langere <?php echo $bla ?>)quote:Op zondag 22 maart 2009 14:05 schreef GlowMouse het volgende:
en dat moet je afsluiten met een puntkomma.
Eensch. Daarnaast zou een topic voor de wat meer onderlegde PHP-ers onder ons geen kwaad kunnen.quote:Op maandag 23 maart 2009 08:39 schreef Roy_T het volgende:
Eens met Catch22. Het is dan wel voor dummies, maar dat wil niet zeggen dat iets van het niveau "ik wil iets, heb gehoord dat het met PHP kan en nu vraag ik jullie om een klant en klaar script" veel bijdraagt.
Eens. De ingewikkeldere vragen zijn leuker dan de 'help, ik heb iets gejat en het werkt niet' vragen.quote:Op maandag 23 maart 2009 08:53 schreef Catch22- het volgende:
naja ik heb persoonlijk geen zin om newbies te helpen die nog niet weten hoe ze een formulier moeten posten en ik denk dat dat voor meer mensen geldt.
Als het leuke vragen zijn die getuigen van iets aan eigen inzet wil ik er best even over nadenken
Niemand verplicht je om vragen te beantwoorden, als jij ergens een vraag ziet waarvan je denkt, dat ga ik niet beantwoorden, doe het vooral ook niet.quote:Op maandag 23 maart 2009 08:53 schreef Catch22- het volgende:
naja ik heb persoonlijk geen zin om newbies te helpen die nog niet weten hoe ze een formulier moeten posten en ik denk dat dat voor meer mensen geldt.
Als het leuke vragen zijn die getuigen van iets aan eigen inzet wil ik er best even over nadenken
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Werknemers ----------- id name [meer info] ------------------ specialiteiten ------------------ werknemer_id specialiteit_naam waarde ------------------ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | werknemers ------------ 1 - Mark 23 - Pieter 45 - Hans 54 - Willem -------------------------------------- specialiteiten -------------------------------------- 1 - OperatingSystems - Windows 1 - OperatingSystems - Linux 1 - ProgrammingLanguages - PHP 23 - OperatingSystems - MAC 23 - ProgrammingLanguages - ASP 45 - ProgrammingLanguages - JavaScript 45 - ProgrammingLanguages - PHP 45 - ProgrammingLanguages - ASP.NET 54 - OperatingSystems - Windows 54 - ProgrammingLanguages - ASP.NET -------------------------------------- |
1 2 3 4 5 | FROM werknemers w, specialiteiten s WHERE w.id = s.werknemer_id AND (s.specialiteit_naam = 'OperatingLanguages' AND s.waarde IN ('Windows', 'Mac')) AND (s.specialiteit_naam = 'ProgrammingLanguages' AND s.waarde IN ('ASP', 'PHP')) |
1 2 3 4 | FROM werknemers w, specialiteiten s WHERE w.id = s.werknemer_id AND (s.specialiteit_naam = 'OperatingLanguages' AND s.waarde IN ('Windows', 'Mac')) |
De namen van de medewerkers die kunnen werken met Windows en MAC én gespecialiseerd zijn in PHP en ASP wil ik er uit halen..quote:Op dinsdag 24 maart 2009 16:08 schreef Tuvai.net het volgende:
Wat moet uitgebreider? Wat wil je precies uit je database laten rollen? Je huidige queries zijn overigens erg slordig, probeer met (LEFT / RIGHT OUTER) JOINs te werken waar het mogelijk is in plaats van 2 hele tabellen leeg te trekken en daar vervolgens een filtering op toe te passen.
Je voorbeeld-data voldoet niet aan je where. Daarom krijg je 0 results.quote:Op dinsdag 24 maart 2009 16:15 schreef markiemark het volgende:
[..]
De namen van de medewerkers die kunnen werken met Windows en MAC én gespecialiseerd zijn in PHP en ASP wil ik er uit halen..
Gaat het werken wanneer ik left/right/inner joins ga gebruiken? Nooit gedaan namelijk...
Thnx! Hier ga ik ff mee aan de slag!quote:Op dinsdag 24 maart 2009 16:19 schreef Tiemie het volgende:
[..]
Je voorbeeld-data voldoet niet aan je where. Daarom krijg je 0 results.
vind zelf onderstaande netter.
[ code verwijderd ]
zie editquote:Op dinsdag 24 maart 2009 16:20 schreef markiemark het volgende:
[..]
Thnx! Hier ga ik ff mee aan de slag!
1 2 3 4 5 6 7 8 | w.Naam FROM medewerkers w RIGHT OUTER JOIN specialiteiten s ON s.werknemer_id = w.id WHERE s.specialiteit_naam = 'OperatingSystems' AND s.waarde = 'Windows' |
1 2 3 4 5 6 7 8 | w.Naam FROM specialiteiten s LEFT OUTER JOIN werknemers w ON w.id = s.werknemer_id WHERE s.specialiteit_naam = 'OperatingSystems' AND s.waarde = 'Windows' |
Dat sowieso. Een specialiteiten tabel, een gebruikers tabel en een koppeltabel tussen die 2 is voldoende, meerdere vermeldingen in die koppeltabel -> meer specialiteiten.quote:Op dinsdag 24 maart 2009 16:33 schreef Catch22- het volgende:
He?
Sla je nu in een aparte tabel een specialiteit op met een id, naam en waarde?
Ik zou dit toch anders oplossen. Het liefst een tussenentiteit (de kans is groot dat je ooit meerdere specialiteiten wil kunnen toekennen aan iemand) of een veld in de werknemer.
quote:Op dinsdag 24 maart 2009 16:39 schreef Catch22- het volgende:
Juist. En het kan nu voor komen dat je bij een entry 'OperatingSystems' hebt, en 'Operating Systems' en 'Opareating systems'. Die zal je niet bijelkaar kunnen rapen.
Dus, normaliseren!
1 2 3 4 5 | FROM fotoboek_comments GROUP BY foto ORDER BY datum DESC LIMIT 0 , 2 |
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.dit ga ik nog even aan de binnekant van mij ogen bekijken
Ik kan niet zien wanneer het plaatje aangepast is helaasquote:Op dinsdag 24 maart 2009 18:44 schreef GlowMouse het volgende:
Kijken wanneer het plaatje voor het laatst is aangepast, en indien lang genog, een ander plaatje tonen?
SELECT distinct(id), date, comment FROM `fotoboek_comments` order by date limit 0,2quote:Op dinsdag 24 maart 2009 18:19 schreef qwox het volgende:
heb een mysql vraagje, je waarschijnelijk simpel maar ik snap het niet
Onderbouwde uitspraak, vooral omdat je z'n datamodel ook zo goed kan achterhalen bij het zien van 1 SQL statement..quote:Op dinsdag 24 maart 2009 18:33 schreef GlowMouse het volgende:
De performance met jouw datamodel is wel om te janken.
Ziet er leuk uit, maar wekt niet. DISTINCT gaat over een rij.quote:Op dinsdag 24 maart 2009 18:48 schreef slacker_nl het volgende:
[..]
SELECT distinct(id), date, comment FROM `fotoboek_comments` order by date limit 0,2
Daar heb ik voor geleerd. Met dit datamodel krijgt hij die query onmogelijk snel tenzij er slechts een beperkt aantal records in de tabel zit.quote:Op dinsdag 24 maart 2009 18:55 schreef slacker_nl het volgende:
[..]
Onderbouwde uitspraak, vooral omdat je z'n datamodel ook zo goed kan achterhalen bij het zien van 1 SQL statement..
Wat bedoel je met een subquery by wherequote:Je wilt reacties waarvan id (of tijd) gelijk is aan het maximum id (of tijd) bij die persoon. Dat kun je in je WHERE zetten met een mooie subquery. De performance met jouw datamodel is wel om te janken.
Je kunt bijvoorbeeld zeggen: WHERE id = (SELECT max(id) FROM fotoboek_comments WHERE ...)quote:Op dinsdag 24 maart 2009 19:06 schreef qwox het volgende:
[..]
Wat bedoel je met een subquery by where
PHP/MySQL?quote:Op dinsdag 24 maart 2009 19:24 schreef Scorpie het volgende:
Welk pattern gebruiken jullie om objecten aan te maken binnen jullie applicatie? Voor domain objecten lijkt mij een DomainObjectFactory class handig, die elke keer 1 instantie van een object retourneert?
Of gebruiken jullie een generieke oplossing voor al jullie objecten?
Ik heb het over design patterns voor mijn project in PHP, zie ook http://www.fluffycat.com/PHP-Design-Patterns, zulke patterns heb ik het over. Wilde eens wat ervaringen polsen.quote:
1. Ik snap even niet.quote:Op dinsdag 24 maart 2009 19:10 schreef GlowMouse het volgende:
[..]
Je kunt bijvoorbeeld zeggen: WHERE id = (SELECT max(id) FROM fotoboek_comments WHERE ...)
Flaccid:
1. Domtree of regex, kies maar
2. Wat is per entry? je wilt van élk record 2 velden? Dat is snel maar je moet geen duizenden records hebben.
3. Zoek eens op xmlHttpRequest, er komt wat JavaScript en PHP bij kijken
Hoezo zou het niet werken? Werkt bij mij anders perfect...quote:Op dinsdag 24 maart 2009 18:59 schreef GlowMouse het volgende:
[..]
Ziet er leuk uit, maar wekt niet. DISTINCT gaat over een rij.
Knappe studiebol ben je dat je aan de hand van 1 table kan zien hoe zijn datamodel eruit ziet. Jij hebt zeker de glazen bol gejat die iedereen mist (zie OP).quote:Daar heb ik voor geleerd. Met dit datamodel krijgt hij die query onmogelijk snel tenzij er slechts een beperkt aantal records in de tabel zit.
Uit nieuwsgierigheid, wat is je query en waar kunnen we het resultaat zien?quote:Op dinsdag 24 maart 2009 19:59 schreef qwox het volgende:
ik heb me probleem weten op de lossen met een subquery, volgens mij is die niet optimaal maar dat maakt niet uit.
Het is een script op de website van een studentenvereniging, ik weet 100% zeker dat er slechtere code te vinden is op die site.
bedankt voor de hulp
thanks, je hebt me op een idee gebracht die ook nog werkt..quote:Op dinsdag 24 maart 2009 18:44 schreef GlowMouse het volgende:
Kijken wanneer het plaatje voor het laatst is aangepast, en indien lang genog, een ander plaatje tonen?
En welk idee is dat?quote:Op dinsdag 24 maart 2009 23:48 schreef bassiedekloon het volgende:
thanks, je hebt me op een idee gebracht die ook nog werkt..
het is niet super maar werkt wel goed![]()
http://dev.mysql.com/doc/refman/5.1/en/select.htmlquote:Op dinsdag 24 maart 2009 19:59 schreef slacker_nl het volgende:
[..]
Hoezo zou het niet werken? Werkt bij mij anders perfect...
Daar heb je geen glazen bol voor nodig. Ik zal je de algemene regel schenken: wanneer je wilt sorteren op kolom A en slechts één A wilt bij iedere unieke waarde uit kolom B (met B ongelijk A) dan kan MySQL die query niet efficiënt uitvoeren.quote:Knappe studiebol ben je dat je aan de hand van 1 table kan zien hoe zijn datamodel eruit ziet. Jij hebt zeker de glazen bol gejat die iedereen mist (zie OP).
Subqueries zie ik ook liever niet, maar die zijn er niet voor niks. Als de functionaliteit van de applicatie iets vereist dat alleen met subqueries op te lossen is, dan kom je er in sommige gevallen niet onderuit.quote:Op woensdag 25 maart 2009 12:36 schreef GlowMouse het volgende:
Daar heb je geen glazen bol voor nodig. Ik zal je de algemene regel schenken: wanneer je wilt sorteren op kolom A en slechts één A wilt bij iedere unieke waarde uit kolom B (met B ongelijk A) dan kan MySQL die query niet efficiënt uitvoeren.
Als je 30k reacties hebt en je query heeft 60+ seconden nodig, dan staan je indices niet goed. Misschien moet je ook de query zelf aanpassen, maar goed geplaatste indices doen heel veel.quote:Op woensdag 25 maart 2009 13:01 schreef GlowMouse het volgende:
Websites moeten snel zijn omdat dat fijn is voor de gebruikeren omdat je server dan meer bezoekers aan kan. Voor je back-end zijn subqueries minder erg en kunnen ze soms leuke statistieken tevoorschijn toveren.
Per geval kun je nadenken wat je het beste kunt doen. Soms valt de query iets te herschrijven. Hier is dat niet mogelijk, dus zul je het resultaat moeten cachen.
Deze query gaat er bij een wat grotere dataset seconden over doen (benchmark: 60+ seconden bij 30k reacties) en dat is onacceptabel. MySQL kan hem slecht cachen omdat de reactietabel vaak geüpdatet wordt. Dus dan moet je applicatie maar helpen.
Je hebt gelijk, subquery met LIMIT en een tweetal indices doet wonderen hier. Blijft een relatief langzame query, maar het is nu te overzien (paar honderdsten van een seconde, afhankelijk van waar de laatste reacties geplaatst zijn).quote:Op woensdag 25 maart 2009 13:12 schreef Tuvai.net het volgende:
Sowieso is je voorbeeld erg overdreven. Op iets eenvoudigs als een reactie-tabel, kun je toch snelle queries draaien waar subqueries in zitten. Sowieso haal je in geval van reacties altijd maar een bepaald aantal op (hee, LIMIT), en zit er in die reactie-tabel een veld dat verwijst naar de bovenliggende tabel (hee, een INDEX
). Als er honderdduizenden records in die reactie tabel zitten dan zal die ietsjes langzamer zijn dan wanneer er maar 10 records in zitten, maar 60+ seconden?
Kom op zeg.
Extra veld in de rubriektabel.quote:Ik geef je eens een ander voorbeeld. Stel je hebt een webshop met rubrieken. Die rubrieken zijn dusdanig opgezet dat je onbeperkt diep child-rubrieken kunt aanmaken onder bestaande rubrieken. Van elke rubriek wil je het actuele aantal producten in diezelfde rubriek en diens onderliggende rubrieken hebben. Hoe zou jij dat oplossen?
Zo 'relatief' langzaam dat de gebruiker er niks van merkt. Ook in geval van honderdduizenden records niet. Die paar milliseconden op zo veel records zijn verwaarloosbaar, vooral als dat de schaalbaarheid, overzichtelijkheid en flexibiliteit van de broncode ten goede doet.quote:Op woensdag 25 maart 2009 13:38 schreef GlowMouse het volgende:
Je hebt gelijk, subquery met LIMIT en een tweetal indices doet wonderen hier. Blijft een relatief langzame query, maar het is nu te overzien (paar honderdsten van een seconde, afhankelijk van waar de laatste reacties geplaatst zijn).
Dus elke keer wanneer een product toegevoegd of verwijdert wordt ga je alle rubrieken (en subrubrieken, en diens subrubrieken, enz) nalopen, het aantal producten in die rubriek (en subrubrieken, en diens subrubrieken) met een COUNT(*) ophalen en die waarde wegschrijven? Waar leg je die functionaliteit en hoe doe je dat dan?quote:Op woensdag 25 maart 2009 13:38 schreef GlowMouse het volgende:
Extra veld in de rubriektabel.
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 | - - A A - - - A A A - - - A A B - - - A A C - - A B - - - A B A - - - A B B - - - A B C - - A C - - - A C A - - - A C B - - - A C C - - A D - - - A D A - - - A D B - - - A D C - - A E - - - A E A - - - A E B - - - A E C - - A F - - - A G A - - - A G B - - - A G C |
1 2 3 4 5 6 7 8 9 | $lines = array("<td>{=test}</td>", "<td>{te=st}</td>", "<td>{test=}</td>"); $regexp = '/(\{)(\w+)?=?(\w+)?(\})/'; foreach ($lines as $v) { print preg_replace($regexp, '\1\2\3\4', $v); } ?> |
Beter bij het updaten dan bij het opvragen. Bij een webwinkel gebeurt dat laatste veel vaker. En als je voor je site die getallen veel nodig hebt, dan ga je denormaliseren. Gebeurt ook veel in fora, bijvoorbeeld de berichtenteller, zie phpbb, zie vbulletin, zie myreact.quote:Op woensdag 25 maart 2009 13:48 schreef Tuvai.net het volgende:
Stel je verwijdert een product in rubriek '- - - A E C', dan zal het productaantal van rubriek '- A' ook actueel moeten worden. Erg veel COUNT(*) query`tjes zeg.
Dan bouw je een knop in waarmee alle tellers opnieuw berekend worden.quote:Wat doe je overigens als een DBA in 'geval van nood' een product via de database moet verwijderen of 'recoveren'?
Nee, maar jouw methode houdt wel in dat je op gigantisch veel plekken in je applicatie herhaaldelijke en overbodige code gaat neer plempen. Je hebt producten die besteld worden (en dus in aantal krimpen), beheermodules waar producten toegevoegd en verwijderd kunnen worden, en tig andere situaties die de aantallen in kwestie beïnvloeden en waar jij dus in je broncode stukjes voor moet gaan plaatsen om die aantallen bij te houden. Nog even afgezien van het feit dat DBA`ers 'in geval van nood' (recovery) of uit pure gemakszucht ook nog wel eens zo je database in gaan om e.e.a. aan te passen, buiten de applicatie om. Ja, je kunt een knopje maken waarmee je wederom wéér letterlijk alles na moet gaan lopen (dus ook de rubrieken die niet ter sprake zijn) en berekenen, maar da's ook niet echt lekker voor daadwerkelijk actuele cijfers (want hoe vaak moet jij deze zware functie niet gaan uitvoeren om je cijfers daadwerlelijk actueel te houden?quote:Op woensdag 25 maart 2009 17:47 schreef GlowMouse het volgende:
Mooie code is niet altijd het criterium.
1 2 3 | $fp = fopen ("online/room101.txt","r+"); ?> |
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 | <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>online</title> <META HTTP-EQUIV="refresh" CONTENT="5"> </head> <body> <? //simple user's online script $ip = $_SERVER['REMOTE_ADDR']; $time = time(); $cutoff = 15; //online cut of time $exists = 0; $users = 0; $user = ""; $fp = fopen ("online/room$_GET['room'].txt","r+"); //if the file exists open it while (!feof($fp)) { $user[] = chop(fgets($fp,65536)); } fseek($fp,0,SEEK_SET); foreach ($user as $line) { list($oldip,$oldtime) = explode('|',$line); if ($oldip == $ip) {$oldtime = $time;$exists = 1;} //check to see if the user is already in the text file if ($time < $oldtime + ($cutoff * 60)) //see if the last time the user visited is past the cut off time { fputs($fp,"$oldip|$oldtime\n"); //write the old data to the text file $users = $users + 1; // add one to the user count } } if ($exists == 0) //if the user isn't in the text file already: { fputs($fp,"$ip|$time\n"); //write the new data to the text file $users = $users + 1; //add one to the user count } fclose ($fp); //close the text file print "$users"; //display the number of users online ?> </body> </html> |
quote:
YES het werktquote:Op woensdag 25 maart 2009 20:46 schreef Roy_T het volgende:
Je code is zo insecure als de pest, maar { en } om $_GET['room'] lost het op
Het is in principe mogelijk met dat script iedere willekeurige tekstfile te lezen. (Het besturingssysteem kan nog wel beperkingen opleggen, maar iemand anders kan die rechten ook weer aanpassen. Daar moet je dus niet op vertrouwen.)quote:Op woensdag 25 maart 2009 20:53 schreef bassiedekloon het volgende:
[..]
YES het werkt![]()
Thnx voor de snelle reactie, maar hoe bedoel je insecure?
Ik hoef daar toch alleen rekening mee te houden als ik een database gebruik?
Die gebruik ik nog niet omdat ik nog niet weet hoe.
Kan. Maar fopen() geeft ook gewoon false terug als het bestand niet bestaat.quote:Op woensdag 25 maart 2009 22:02 schreef Catch22- het volgende:
eerst ff een file_exists op de gevraagde filename doen dus
@ voor de functie aanroep,niet echt een nette oplossing,maar het kan...quote:Op woensdag 25 maart 2009 22:07 schreef Light het volgende:
[..]
Kan. Maar fopen() geeft ook gewoon false terug als het bestand niet bestaat.
1 2 | { spul } |
Ik zal deze vandaag eens testenquote:Op woensdag 25 maart 2009 14:24 schreef slacker_nl het volgende:
Beetje simpele variant, kan volgens mij wel mooier:
[ code verwijderd ]
Ok, cool, werkt goed, maar nu wil ik mijn zoekopdracht meer specificeren, dus: mensen die gespecialiseerd zijn in operating system windows of mac en in programming language PHP of ASP.quote:Op dinsdag 24 maart 2009 16:22 schreef Tuvai.net het volgende:
Voorbeeldje om namen op te halen van mensen die gespecialiseerd zijn in OperatingSystem Windows:
[ code verwijderd ]
OF
[ code verwijderd ]
Kort samengevat: Met een LEFT OUTER JOIN ga je vanuit de 'diepere' tabel werken, met RIGHT OUTER JOIN ga je vanuit de bovenliggende tabel werken. Voor de rest is het in jouw geval simpelweg met de WHERE clausule spelen om de goede filtering toe te passen.
1 2 3 4 5 6 7 8 9 10 11 12 | w.name FROM werknemer w RIGHT OUTER JOIN specialiteiten s ON s.werknemer_id = w.id WHERE s.specialiteit_naam = 'OperatingSystems' AND s.waarde IN ('MAC', 'Windows') AND s.specialiteit_naam = 'ProgrammingLanguage' AND s.waarde IN ('PHP', 'ASP') ; |
Dan zul je toch e.e.a. met de WHERE clausule moeten goochelen, je statements met AND / OR aanvullen en eventueel in aparte 'blokjes' zetten, voorbeeld:quote:Op donderdag 26 maart 2009 10:27 schreef markiemark het volgende:
[..]
Ok, cool, werkt goed, maar nu wil ik mijn zoekopdracht meer specificeren, dus: mensen die gespecialiseerd zijn in operating system windows of mac en in programming language PHP of ASP.
[ code verwijderd ]
Hoe doe ik dat dan?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | w.name FROM werknemer w RIGHT OUTER JOIN specialiteiten s ON s.werknemer_id = w.id WHERE ( s.specialiteit_naam = 'OperatingSystems' AND ( s.waarde = 'MAC' OR s.waarde = 'Windows' ) ) AND ( s.specialiteit_naam = 'ProgrammingLanguage' AND ( s.waarde = 'PHP' OR s.waarde = 'ASP' ) ) |
quote:Op donderdag 26 maart 2009 10:52 schreef Tuvai.net het volgende:
[..]
Dan zul je toch e.e.a. met de WHERE clausule moeten goochelen, je statements met AND / OR aanvullen en eventueel in aparte 'blokjes' zetten, voorbeeld:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 | w.name FROM werknemer w RIGHT OUTER JOIN specialiteiten s ON s.werknemer_id = w.id WHERE ( s.specialiteit_naam = 'OperatingSystems' AND ( s.waarde = 'MAC' OR s.waarde = 'Windows' ) ) |
Kun je een tipje van de sluier oplichten wat betreft subqueries?quote:Op donderdag 26 maart 2009 11:27 schreef Tuvai.net het volgende:
EDIT: Ah klopt, ik had er even geen rekening mee gehouden dat het over een one-to-many tabel ging.Je selecteert in dit geval immers elke keer een losse 'specialiteiten' record. Je zult vrees ik toch e.e.a. met subqueries moeten doen.
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 | w.naam FROM werknemer w WHERE ( SELECT COUNT(*) FROM specialiteiten s WHERE s.werknemer_id = w.id AND s.specialiteit_naam = 'OperatingSystems' AND s.waarde IN ('MAC', 'Windows') ) > 0 AND ( SELECT COUNT(*) FROM specialiteiten s WHERE s.werknemer_id = w.id AND s.specialiteit_naam = 'ProgrammingLanguages' AND s.waarde IN ('PHP', 'ASP') ) > 0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | w.naam FROM werknemer w WHERE ( SELECT COUNT(*) FROM specialiteiten s WHERE s.werknemer_id = w.id AND ( (s.specialiteit_naam = 'OperatingSystems' AND s.waarde IN ('MAC', 'Windows')) OR (s.specialiteit_naam = 'ProgrammingLanguages' AND s.waarde IN ('PHP', 'ASP')) ) ) = 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 | <FORM METHOD="post" ACTION="mail.php"> <INPUT TYPE="hidden" NAME="to" VALUE="naam@domein.com"> <p> <INPUT TYPE="hidden" NAME="subject" VALUE="Voorbeeldformulier Handleiding HTML"> <strong>Naam*:</strong> <br><INPUT NAME="name" SIZE="45"> <br><strong>E-mail adres*:</strong> <br><INPUT NAME="email" SIZE="45"> <br><strong>Telefoonnummer*:</strong> <br><INPUT NAME="phone" SIZE="45"> <br><strong>Bericht/vraag:</strong> <br><INPUT TYPE="hidden" NAME="required_fields" VALUE="name, from, phone"> <TEXTAREA NAME="message" ROWS="3" COLS="45"></TEXTAREA> <br> <img class="rde_img_smiley" src="http://i.fok.nl/s/shiny.gif" width="15" height="15" alt="" /> svp invullen <br><br> <INPUT TYPE="reset" VALUE="Verwijder invoer"> <INPUT TYPE="submit" VALUE="Verzend gegevens"> </p> </FORM> ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $name=$_POST['name']; $email=$_POST['email']; $phone=$_POST['phone']; $message=$_POST['message']; $ToEmail = "naam@domein.com"; $ToSubject = "Contact Form from domein.com"; $EmailBody = "Name: $name\n Email: $email\n Phone: $phone\n Message: $message\n"; $Message = $EmailBody; $headers .= "Content-type: text; charset=iso-8859-1\r\n"; $headers .= "From:".$email."\r\n"; mail($ToEmail,$ToSubject,$Message, $headers); header( "Location: contact2.html" ); ?> |
EDIT: snap hem al...quote:Op donderdag 26 maart 2009 12:13 schreef SuperRembo het volgende:
Die kan je ook samenvoegen:
[ code verwijderd ]
Ik denk dat er niet veel regels zijn waarbij specialiteit_naam = 'OperatingSystems' en specialiteit_naam = 'ProgrammingLanguages' is.quote:Op donderdag 26 maart 2009 13:05 schreef markiemark het volgende:
[..]
Kan ik daar ook dit van maken?
[ code verwijderd ]
* AND ipv OR
Hehe nee ik snap hem al..quote:Op donderdag 26 maart 2009 13:26 schreef SuperRembo het volgende:
[..]
Ik denk dat er niet veel regels zijn waarbij specialiteit_naam = 'OperatingSystems' en specialiteit_naam = 'ProgrammingLanguages' is.
Ik heb hem gelimit op 5, en dat duurt 6 seconden... Hoe kan dat?quote:Op donderdag 26 maart 2009 13:27 schreef markiemark het volgende:
[..]
Hehe nee ik snap hem al..
Je geeft denk ik een goede oplossing voor mij, maar mijn mysql server lijkt het niet te slikken...
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 | function addWatermark($image, $opacity) { if (!imageistruecolor($image)) die('addWatermark: Input image should be true color.'); // Load watermark image $wmFileName = 'images/watermark.png'; $wm = imagecreatefrompng($wmFileName); if (!$wm) die('Watermark image not found. '.$wmFileName); if (!imageistruecolor($wm)) die('addWatermark: Watermark image should be true color.'); $wmWidth = imagesx($wm); $wmHeight = imagesy($wm); // Lower right corner, with padding $destX = imagesx($image) - $wmWidth - 5; $destY = imagesy($image) - $wmHeight - 5; // Copy watermark to image imagecopymerge($image, $wm, $destX, $destY, 0, 0, $wmWidth, $wmHeight, $opacity); //imagecopy($image, $wm, $destX, $destY, 0, 0, $wmWidth, $wmHeight); // Clean up imagedestroy($wm); } ?> |
imagecopymerge verneukt inderdaad al de 'bestaande' transparency in een PNG. Met http://nl2.php.net/manual/en/function.imagecopyresampled.php imagecopy schijnt het met wat omweggetjes mogelijk te zijn wat jij wil. Ik heb het zelf eerlijk gezegd ook nog nooit geprobeerd daar ik deze situatie nog nooit ben tegengekomen, maar als ik de reacties op beide pagina's lees is het wel degelijk mogelijk.quote:Op donderdag 26 maart 2009 15:50 schreef SuperRembo het volgende:
Ik heb ook eens een vraag
Ik heb een functie om een watermark aan een plaatje toe te voegen. Dat werkt op zich prima, alleen zou ik de opacity van de watermark makkelijk willen kunnen aanpassen.
[ code verwijderd ]
Het probleem is dat imagecopymerge alle transparatie uit het watermark plaatje zelf weggooit. Met imagecopy blijft die informatie wel behouden, maar dan kan ik er dus niets aan tweaken via php.
gebruik het zend framework welke in zich heel veel gebruikt maakt van patterns oa singeltons, factory's,chain of command, mvc.quote:Op dinsdag 24 maart 2009 19:24 schreef Scorpie het volgende:
Welk pattern gebruiken jullie om objecten aan te maken binnen jullie applicatie? Voor domain objecten lijkt mij een DomainObjectFactory class handig, die elke keer 1 instantie van een object retourneert?
Of gebruiken jullie een generieke oplossing voor al jullie objecten?
1 |
1 2 3 4 | $sql = "SELECT website, www_website, http_www_website, cat_1 FROM ww WHERE cat_1 LIKE'cat1%'"; $resultaat = mysql_query($sql); ?> |
1 2 3 | echo "<a target='blank' rel='nofollow' href='".$row["http_www_website"]."'>".$row["website"]."</a><br />"; ?> |
1 2 3 | echo "<a target='blank' rel='nofollow' href='".$row["http_www_website"]."' onClick='javascript: pageTracker._trackPageview('/outgoing/auto_accessoires/".$row["www_website"]."'")">".$row["website"]."</a><br />"; ?> |
Moet dit worden:quote:Op donderdag 26 maart 2009 17:39 schreef klusmeister het volgende:
1
2
3<?php
echo "<a target='blank' rel='nofollow' href='".$row["http_www_website"]."' onClick='javascript: pageTracker._trackPageview('/outgoing/auto_accessoires/".$row["www_website"]."'")">".$row["website"]."</a><br />";
?>
1 2 3 4 5 6 7 | echo "<a target='blank' rel='nofollow' href='".$row["http_www_website"] . "' onClick='javascript: pageTracker._trackPageview('/outgoing/auto_accessoires/" . $row["www_website"]. "')>" .$row["website"]. "</a><br />"; ?> |
Het werkt! Bedankt!quote:Op donderdag 26 maart 2009 17:55 schreef slacker_nl het volgende:
[..]
Moet dit worden:
[ code verwijderd ]
1 |
Hmm.. Hij werkt wel (je ziet hem op de site) maar de klik wordt niet vastgelegd door analytics.quote:Op donderdag 26 maart 2009 17:55 schreef slacker_nl het volgende:
[..]
Moet dit worden:
[ code verwijderd ]
De fout zit niet bij de ( maar bij de ' erna. Daar moet een \ voor. Ook voor de ' aan het eind van die url moet een \ en na de ) moet nog een '.quote:Op donderdag 26 maart 2009 19:59 schreef klusmeister het volgende:
[..]
Hmm.. Hij werkt wel (je ziet hem op de site) maar de klik wordt niet vastgelegd door analytics.
Het gaat volgens firefox fout bij het onClick='javascript: pageTracker._trackPageview('/outgoing/auto_accessoires/www.carfantasy.nl')>
gedeelte (vanaf /outgoing en verder wordt het rood aangegeven)
Ik ga nog even proberen.
[ afbeelding ]
edit : Ik kan na bij (' de ' wel weglaten maar dan wordt de uitgaande klik niet meer vastgelegd
Als ik je aanwijzing opvolg krijg ik hem zo:quote:Op donderdag 26 maart 2009 20:16 schreef Light het volgende:
[..]
De fout zit niet bij de ( maar bij de ' erna. Daar moet een \ voor. Ook voor de ' aan het eind van die url moet een \ en na de ) moet nog een '.
1 |
ik zit een beetje met de " (de dubbele versie ivm gebruik php).quote:Op donderdag 26 maart 2009 20:26 schreef qu63 het volgende:
maak er eens onClick="javascript: pageTracker._trackPageview('/outgoing/auto_accessoires/www.carfantasy.nl')"> van?
1 2 3 | echo "<a target='blank' rel='nofollow' href='".$row["http_www_website"]."' onClick='javascript: pageTracker._trackPageview('/outgoing/auto_accessoires/".$row["www_website"]."')>".$row["website"]."</a><br />"; ?> |
Nee, die dingen moet je niet weghalen.quote:Op donderdag 26 maart 2009 20:26 schreef klusmeister het volgende:
[..]
Als ik je aanwijzing opvolg krijg ik hem zo:
[ code verwijderd ]
Maar dan werkt het ook niet, moet ik de ''s dan weghalen?
Ja, dat hele stuk in het rood geeft dus aan dat het nog niet goed is.quote:Op donderdag 26 maart 2009 20:32 schreef klusmeister het volgende:
[..]
ik zit een beetje met de " (de dubbele versie ivm gebruik php).
[ code verwijderd ]
Dit is de code nu, maar legt de klik niet vast resultaat:
[ afbeelding ]
1 2 3 | echo '<a target="blank" rel="nofollow" href="'.$row['http_www_website'].'" onClick="javascript: pageTracker._trackPageview(\'/outgoing/auto_accessoires/'.$row['www_website'].'")\'>'.$row['website'].'</a><br />'; ?> |
quote:Op donderdag 26 maart 2009 20:34 schreef Light het volgende:
[..]
Nee, die dingen moet je niet weghalen.
Als je bij die attributen altijd ".." gebruikt en bij javascript '..' dan heb je geen conflicten met begin en einde van een string. En dan krijg je dus iets zoals wat qu63 schrijft.
1 2 3 | echo "<a target='blank' rel='nofollow' href='".$row["http_www_website"]."' onClick="javascript: pageTracker._trackPageview('/outgoing/auto_accessoires/".$row["www_website"]."')">".$row["website"]."</a><br />"; ?> |
quote:
Oh dank je, dit is code die ik zelf geschreven hebquote:Op donderdag 26 maart 2009 16:20 schreef Catch22- het volgende:
ik zou even een kant en klaar scriptje zoeken, die image classes zijn echt brak vaak.
Je kunt ook eerst php afsluiten, dan je html doen, en dan php weer openen. Scheelt je een hoop gedoe met " en 'quote:Op donderdag 26 maart 2009 21:06 schreef klusmeister het volgende:
[..]in html is het voor mij geen probleem, maar in php krijg ik het (nog
) niet voor elkaar om ze om te draaien, krijg continue parse error expected enz
Mijn probleem heeft niet specifiek iets met watermarks te maken.quote:Op donderdag 26 maart 2009 21:17 schreef Catch22- het volgende:
@Superrembo, ik ben daar ook eens mee bezig geweest. Is echt vrij gaar om te doen. Helemaal als je met verschillende bestandsformaten werkt.
http://www.hotscripts.com/listing/image-resize-and-watermark/
is dat wat? googlede ik zo even
ja, maar vaak gaan die standaardscripts uit van transparante pngs voor een watermerk, dus dan zit je gelijkt goedquote:Op donderdag 26 maart 2009 22:34 schreef SuperRembo het volgende:
[..]
Mijn probleem heeft niet specifiek iets met watermarks te maken.
Het probleem is dat imagecopymerge de alpha-transparantie weg gooit. Imagecopy doet het wel goed, maar daar heb je niet de mogelijkheid om de transparantie van het hele plaatje aan te passen.
dit is gewoon basissemantiek hoor.quote:Op donderdag 26 maart 2009 21:06 schreef klusmeister het volgende:
[..]in html is het voor mij geen probleem, maar in php krijg ik het (nog
) niet voor elkaar om ze om te draaien, krijg continue parse error expected enz
Alleen als "weer" een constante is. Het is iig geen variabele, want er staat geen $ voor. En het is geen functie, want er staat geen () achter. Het is ook geen string, want die moet tussen quotjes staan.quote:Op donderdag 26 maart 2009 23:56 schreef Dawnbreaker het volgende:
nvm opgelost:
<a href="<?php echo $siteurl.weer;?>"> linkje </a> is de correcte php code
1 |
Idd, maar op 1 pagina komen 100derden links, dan wordt het qua code erg onoverzichtelijk..quote:Op donderdag 26 maart 2009 21:17 schreef Light het volgende:
[..]
Je kunt ook eerst php afsluiten, dan je html doen, en dan php weer openen. Scheelt je een hoop gedoe met " en '
Thanks, ga wel eens ff kijken!quote:Op donderdag 26 maart 2009 16:43 schreef hoerezooi het volgende:
[..]
gebruik het zend framework welke in zich heel veel gebruikt maakt van patterns oa singeltons, factory's,chain of command, mvc.
1 2 3 | echo '<a target="blank" rel="nofollow" href="'.$row['http_www_website'].'" onClick="javascript: pageTracker._trackPageview(\'/outgoing/auto_accessoires/'.$row['www_website'].')"\'>'.$row['website'].'</a><br />'; ?> |
Als je door de enorm lange code niet meer ziet wat je aan het doen bent, breek het dan gewoon op in begrijpelijke stukken! Zo ziet je code er uit als je het opbreekt in een paar logische stukken:quote:Op vrijdag 27 maart 2009 09:41 schreef klusmeister het volgende:
Met deze code:
[ code verwijderd ]
komt het er zo:
[ afbeelding ]
uit te zien.. bijna(?) dus, iemand nog een idee wat ik kan proberen om de uitgaande klik goed te kunnen meten?
1 2 3 4 5 6 | $url = $row['http_www_website']; $onclick = 'javascript: pageTracker._trackPageview(\'/outgoing/auto_accessoires/'.$row['www_website'].')'; $linkText = $row['website']; echo '<a target="blank" rel="nofollow" href="'.$url.'" onClick="'.$onclick.'"\'>'.$linkText.'</a><br />'; ?> |
Ook dan blijf ik met het ' verhaal zitten.quote:Op vrijdag 27 maart 2009 11:07 schreef Roy_T het volgende:
Met Rembo eens. Wel een typo op regel 5: een \' die er niet hoort(na de onclick)
En net omdat ik de fout niet kan ontdekken kwam ik hier voor hulp..quote:Op vrijdag 27 maart 2009 11:25 schreef SuperRembo het volgende:
Ik heb de code alleen opgeknipt in logische stukken. Alle fouten staan er inderdaad nog in.
Maar dat kan je toch ook in je voordeel gebruiken, door de broncode uit FF te kopieren? Want die is dan al "gefixed" of werkt dat niet?quote:Op vrijdag 27 maart 2009 10:16 schreef ralfie het volgende:
je moet de laatste 'en " nog omdraaien
Mag ik je een tip geven? als je broncode wil controleren, doe dit nooit in Firefox (als het gaat om quotes ed). Sure, het ziet er overzichtelijker uit, maar Firefox heeft de neiging om de broncode her en der al wat te fixen, door elementen en quotes en dergelijke toe te voegen en weg te halen. Ben er al vaker ingetuind, uren mn php doorgespit waar dat ene element of quoteje nou vandaan komt...
De broncode van Firefox is niet 100% dat wat de browser van de server krijgt, dat van bijvoorbeeld internet explorer is dat altijd wel. Ik gebruik IE nooit, behalve voor broncode's...
Nee helemaal niet, integendeel, soms is een zet in de goede richting erg fijn, ik ben alweer een stuk verder gekomen door eerder advies hier.quote:Op vrijdag 27 maart 2009 11:31 schreef SuperRembo het volgende:
Wil je een paar tips om fouten op te sporen en in de toekomst te voorkomen, of heb je liever dat iedereen telkens al je typfoutjes komt fixen
Firebug wel, maar Firefox "view source" niet.quote:Op vrijdag 27 maart 2009 10:16 schreef ralfie het volgende:
Sure, het ziet er overzichtelijker uit, maar Firefox heeft de neiging om de broncode her en der al wat te fixen, door elementen en quotes en dergelijke toe te voegen en weg te halen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Modules { var $modules = array(); function __construct() { $dir = opendir("../modules"); while (false !== ($file = readdir($dir))) { if (is_dir("../modules/$file") && !preg_match("/\.\.?/", $file)) { $mod = new Module($file); array_push($this->modules, $mod); } } } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Module { var $templatedir; var $linkname; function __construct($name) { $this->templatedir = "../modules/".$td."/templates"; if(file_exists("../modules/$name/$name.php")) require("../modules/$name/$name.php"); if(file_exists("../modules/$name/$name_admin.php")) require("../modules/$name/$name_admin.php"); } function getModuleByName($name) { foreach($this->modules as $module) { if ($module->name == $name) { return $module; } } } } ?> |
1 2 3 | $modules->getModuleByName("agenda")->index($args); ?> |
Maak de Module class een extensie van een abstracte class met daarin functies die je extended class moet implementeren. Maak elke module class een unique naam, en instanieer deze. Dan hoef je alleen nog maar $modulenaam->index() te doen, zonder dat je via de getModuleByname() iets hoeft te doen.quote:Op vrijdag 27 maart 2009 14:18 schreef daReaper het volgende:
Ik zit wat te klooien met OO-programmeren, maar ik kom ergens niet helemaal uit.
Ik heb een site gemaakt, en aan die site wil ik modules kunnen toevoegen. Dit is enkel een directory met bestandjes, die je alleen maar aan de modules-directory hoeft toe te voegen, en het werkt al.
Nou heb ik een bestand modules.php met daarin de klasse Modules. Deze klasse kijkt in de modules directory om te zien welke modules er zijn.
[ code verwijderd ]
Zoals je daar ziet, wordt voor elke module weer een nieuw object aangemaakt van de klasse Module
[ code verwijderd ]
in deze module gaat het echter niet helemaal goed.
In die includes wordt ten eerste $this->linkname bepaald, wat geen probleem is. Er staat (staan) echter ook functies in, in elk geval de functie index($args). Hoe kan ik er nou voor zorgen dat deze functies gewoon onderdeel worden van het nieuw aangemaakte object? Beetje moeilijk uit te leggen allemaal, maar uiteindelijk wil ik in het hoofdscript het volgende stukje script gebruiken:
[ code verwijderd ]
Ik hoop dat het een beetje begrijpelijk is... Hoe kan ik dit oplossen?
Ik vrees dat ik het niet helemaal snap :@ Ben nog een beetje een beginner met OOP.quote:Op vrijdag 27 maart 2009 14:23 schreef Scorpie het volgende:
[..]
Maak de Module class een extensie van een abstracte class met daarin functies die je extended class moet implementeren. Maak elke module class een unique naam, en instanieer deze. Dan hoef je alleen nog maar $modulenaam->index() te doen, zonder dat je via de getModuleByname() iets hoeft te doen.
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 | class Modules implements IteratorAggregate { var $modules = array(); function __construct() { $dir = opendir("../modules"); while (false !== ($file = readdir($dir))) { if (is_dir("../modules/$file") && !preg_match("/\.\.?/", $file)) { if(file_exists("../modules/$file/$file.php")) require("../modules/$file/$file.php"); if(file_exists("../modules/$file/$file_admin.php")) require("../modules/$name/$name_admin.php"); $mod = new $file(); array_push($this->modules, $mod); } } } public function getIterator() { return new MyIterator($this->modules); } function getModuleByName($name) { foreach($this->modules as $module) { if ($module->name == $name) { return $module; } } } } $modules = new Modules(); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Module { var $templatedir; var $linkname; var $name; function __construct($name) { $this->templatedir = "../modules/".$td."/templates"; $this->name = $name; } } ?> |
1 2 3 4 5 6 7 8 9 | $this->linkname = "Agenda"; class agenda implements Module { function index($args) { [...] } } ?> |
Een interface is wat anders dan een abstrace class.quote:Op vrijdag 27 maart 2009 14:51 schreef daReaper het volgende:
[..]
Ik vrees dat ik het niet helemaal snapBen nog een beetje een beginner met OOP.
Die getModuleByName() wil ik eigenlijk wel houden. Ik heb zojuist ook een functie op php.net gevonden die ik in mijn Modules klasse kon stoppen, zodat ik een foreach() op de $modules kan gooien, waarbij $modules dan elke keer een nieuwe module returnt.
Ik snap alleen niet zo goed wat dat eerste is, wat je daar zegt. Mijn Modules klasse ziet er nu zo uit:
[ code verwijderd ]
de Module klasse ziet er zo uit:
[ code verwijderd ]
Agenda.php:
[ code verwijderd ]
Maar dit geeft een error: Fatal error: agenda cannot implement Module - it is not an interface in C:\severjanin\modules\agenda\agenda.php on line 4
Zoals ik al zei: ik ben nog een beetje een beginneling hierin. Wat houdt dat "interface" in?
Waarom zou je dat willen houden? Het is een dure operatie die eigenlijk onnodig is, aangezien je al de naam weet van de module die je wilt aanspreken. Dan heeft het geen zin om IEDERE keer weer die modules lijst op te halen en aan te spreken, roep dan direct de controller van de module zelf aan.quote:Op vrijdag 27 maart 2009 14:51 schreef daReaper het volgende:
[..]
Ik vrees dat ik het niet helemaal snapBen nog een beetje een beginner met OOP.
Die getModuleByName() wil ik eigenlijk wel houden. Ik heb zojuist ook een functie op php.net gevonden die ik in mijn Modules klasse kon stoppen, zodat ik een foreach() op de $modules kan gooien, waarbij $modules dan elke keer een nieuwe module returnt.
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 | interface ModFuncs { public function index($args); } abstract class Module implements ModFuncs { var $templatedir; var $linkname; var $name; function __construct() { $this->name = get_class($this); $this->templatedir = "../modules/".$this->name."/templates"; } } class Modules implements IteratorAggregate { var $modules = array(); function __construct() { $dir = opendir("../modules"); while (false !== ($file = readdir($dir))) { if (is_dir("../modules/$file") && !preg_match("/\.\.?/", $file)) { if(file_exists("../modules/$file/$file.php")) require("../modules/$file/$file.php"); if(file_exists("../modules/$file/$file_admin.php")) require("../modules/$name/$name_admin.php"); $mod = new $file(); array_push($this->modules, $mod); } } } public function getIterator() { return new MyIterator($this->modules); } function getModuleByName($name) { foreach($this->modules as $module) { if ($module->name == $name) { return $module; } } } } $modules = new Modules(); ?> |
1 2 3 4 5 6 7 8 9 10 | $this->linkname = "Agenda"; class agenda extends Module { function index($args) { [...] } } ?> |
Nu ik er over na denk is die functie ook niet meer van toepassing. $modules wordt aangemaakt en in het hoofdscript komt het volgende stukje script voorbij:quote:Op vrijdag 27 maart 2009 15:13 schreef Scorpie het volgende:
[..]
Waarom zou je dat willen houden? Het is een dure operatie die eigenlijk onnodig is, aangezien je al de naam weet van de module die je wilt aanspreken. Dan heeft het geen zin om IEDERE keer weer die modules lijst op te halen en aan te spreken, roep dan direct de controller van de module zelf aan.
De rest heeft Tiemie al verteld
quote:Op vrijdag 27 maart 2009 15:15 schreef daReaper het volgende:
[..]
Nu ik er over na denk is die functie ook niet meer van toepassing. $modules wordt aangemaakt en in het hoofdscript komt het volgende stukje script voorbij:
foreach($modules as $mod) {
array_push($menuitems, array($mod->name, $mod->linkname));
if ($page == $mod->name) {
$content = $mod->index($args);
}
}
Dat getModuleByName() heb ik bij nader inzien dus helemaal niet nodig.
Beeld->paginabron heb ik het over. Firebug heb ik niet eens geinstalleerd.quote:Op vrijdag 27 maart 2009 12:17 schreef Roy_T het volgende:
[..]
Firebug wel, maar Firefox "view source" niet.
Dan weet ik niet welke Firefox jij gebruikt, maar de mijne past echt niets aan de in de source vziwquote:Op vrijdag 27 maart 2009 16:43 schreef ralfie het volgende:
Beeld->paginabron heb ik het over. Firebug heb ik niet eens geinstalleerd.
Heb het effe zitten uitzoeken, maar het blijkt mijn overactieve 'view selection source' te zijn. Deze code is natuurlijk al min of meer geparsed...quote:Op vrijdag 27 maart 2009 17:37 schreef Roy_T het volgende:
[..]
Dan weet ik niet welke Firefox jij gebruikt, maar de mijne past echt niets aan de in de source vziw
Heb je een testcase?
1 2 3 4 5 6 7 8 9 10 11 12 | user SET usrUsername = 'leroyXXX', usrPassword = 'e10adc3949ba59abbe56e057f20f883e', usrGender = 'M', usrLastname = null, usrInitials = 'LHM', usrInsertion = null, usrEmail = 'info@blabla.com' WHERE usrId = 1 |
Ja ja, ik heb al Gegoogled. Ik vind echter maar één site waar het daadwerkelijk over dit probleem gaat, maar daar is geen antwoord op gegeven. De rest gaat allemaal over lui die problemen hebben met hun sytaxis het invoeren van een MySQL NULL waarde vanuit hun PHP code.quote:Op zondag 29 maart 2009 23:10 schreef GlowMouse het volgende:
http://www.google.nl/search?hl=nl&safe=off&q=+site:lists.evolt.org+mysql+update+null
1 |
En nu? Tijd voor Java voor dummies?quote:Op zondag 29 maart 2009 16:57 schreef cablegunmaster het volgende:
mn eerst werkende java Jar file
http://cablegunmaster.nl/test666.php
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 | <html> <head> <meta http-equiv="Generator" content="TigerII MiniPad (C)2001"> <title>Ticketservice</title> </head> <body> <style type="text/css"> <!-- .body { font-family: "Trebuchet MS"; font-size: 12px; } .style1 {color:#ffaa00;} .style2 {color:#dddddd; font-family: "Trebuchet MS";} --> </style> <form name="Ticketservice.html"> <table> <span class="style2"> <tr>Voornaam: <input type="text" name="voornaam"></tr> <tr>Tussenvoegsel: <input type="text" name="tussenvoegsel"></tr> <tr>Achternaam: <input type="text" name="achternaam"></tr> <tr>Geboortedatum: <input type="text" name="Geboortedatum"></tr> <tr>Email adres: <input type="text" name="emailadres"></tr> </table> </span> <br> <span class="style1"><I>Hoeveel kaarten wil je kopen?:</I><BR> <I>De standaard ticketprijs is ¤7.50</I><BR> Let op je moet minimaal 16 zijn om op deze feesten binnen te komen.</span> <br> <SELECT NAME="aantal"> <OPTION>1</option> <OPTION>2</OPTION> <OPTION>3</OPTION> <OPTION>4</OPTION> <OPTION>5</OPTION> <OPTION>6</OPTION> </SELECT> </span> </FORM> <hr> <form action="Bevestigen.html"> <input type="submit" value="Verder"> </form> </body> </html> ?> |
[Java] voor dummies - Deel 2.quote:Op dinsdag 31 maart 2009 11:07 schreef cablegunmaster het volgende:
[..]
opzich en dan alleen de beginselenwant verder kan ik ook niet helpen
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 | if (isset($_POST['voornaam'])){ if (empty($_POST['voornaam']) || empty($_POST['achternaam']) || empty($_POST['geboorteplaats']) || empty($_POST['emailadres'])) { header ('Location:###FOUTPAGINA###'); } else { header ('Location:bevestigen.html'); } ?> <html> <head> <meta http-equiv="Generator" content="TigerII MiniPad (C)2001"> <title>Ticketservice</title> </head> <style type="text/css"> .body {font-family:"Trebuchet MS";font-size:12px;} .style1 {color:#ffaa00;} .style2 {color:#dddddd;font-family:"Trebuchet MS";} </style> <body> <form name="Ticketservice" action="" method="post"> <table> <span class="style2"> <tr>Voornaam: <input type="text" name="voornaam"></tr> <tr>Tussenvoegsel: <input type="text" name="tussenvoegsel"></tr> <tr>Achternaam: <input type="text" name="achternaam"></tr> <tr>Geboortedatum: <input type="text" name="Geboortedatum"></tr> <tr>Email adres: <input type="text" name="emailadres"></tr> </table> </span> <br> <span class="style1"><I>Hoeveel kaarten wil je kopen?:</I><BR> <I>De standaard ticketprijs is ¤7.50</I><BR> Let op je moet minimaal 16 zijn om op deze feesten binnen te komen.</span> <br> <SELECT NAME="aantal"> <OPTION>1</option> <OPTION>2</OPTION> <OPTION>3</OPTION> <OPTION>4</OPTION> <OPTION>5</OPTION> <OPTION>6</OPTION> </SELECT> </span> <input type="submit" value="Verder"> </FORM> </body> </html> <?php } ?> |
Divs zijn handig, maar hier kun je wel iets beters gebruiken natuurlijk om je form te stylen (fieldsets, labels, etc).quote:Op dinsdag 31 maart 2009 16:58 schreef prodygee het volgende:
Niet getest. Maar ik zie hier geen fouten in. Gebruik iig divjes.. en leer je code beter schrijven. Good luck.
cutenewsquote:Op woensdag 1 april 2009 16:19 schreef Darkomen het volgende:
Gezocht:
Gratis CMS
- Calender
- User Magement/groups
- Makkelijk te schrijven plugins
Uitleg, ik moet voor een internet een cms voor documentatie opzetten.
De artikelen moeten zichtbaar zijn voor bepaalde groepen, andere niet.
Ook moet er een kalender in zitten waarbij je events kan toevoegen, sommige die terugkomen, sommige voor enkele dagen/uren.
Als dit voor mezelf zou zijn, zou ik zelf gaan schrijven, waardoor het dus enkele maanden tot een jaar zou duren
Maar aangezien dit gratis is ga ik dus niet die moeite doen en tevens moet het snel opgezet worden.
De huidige beheerder heeft een joomla cms opgezet, leuk maar onbruikbaar en voor bijna alle plugins zoals usergroups en een kalender moet je betalen.
Nu heb ik wel gezocht maar kom ik steeds bij betaalde cmsen of halfgare zonder de juiste opties.
PHP is voor mij een hobby, misschien dat jullie wat meer goede cmsen kennen
het heeft nu categorieenquote:Op woensdag 1 april 2009 16:37 schreef Darkomen het volgende:
Cutenews, damn dat is lang geleden!
Die heb ik vroeger ook nog op mn site gehad/aangepast!
maar dat is puur een news/blog systeem, geen cms met categorieen en artiekelen.
Zal mn post nog ff aanpassen.
Maak daar ff een nieuw topic voor. Anders staat dit topic zo vol met "je moet $cms nemen" posts.quote:
Waarom meen je dat er ook maar enig verband tussen die twee zaken zitquote:Op zaterdag 4 april 2009 16:26 schreef new_guy1 het volgende:
Zou het mogelijk zijn om met een bepaald query resultaat een audio file te openen...?
wat is er mis met een simpel if statement?quote:Op zaterdag 4 april 2009 17:42 schreef new_guy1 het volgende:
Ik heb een database in MySQL. Met PHP tel ik hoevaak iets voorkomt in die database. Zodra dit meer dan X keer is, wil ik eigenlijk dat er een geluidssignaal word gegeven...
1 2 3 4 5 6 7 8 9 10 11 12 | class Users { private $users = array(); public function __get($id) { if (is_numeric($id)) { if (!isset($this->users[$id])) $this->users[$id] = new User($id); return $this->users[$id]; } } } ?> |
1 2 3 4 | $users = new Users; $eenofandereuser = $users[1]; // levert de foutmelding op dat ik object van Users niet als array kan gebruiken ?> |
de __get is voor dingen als:quote:Op zondag 5 april 2009 21:24 schreef daReaper het volgende:
is er een manier om een object als een array te gaan gebruiken? Ik heb deze klasse:
[ code verwijderd ]
Nou hoopte ik het volgende stukje script te kunnen gebruiken, maar dat gaat dus mis:
[ code verwijderd ]
Hoe los ik dit mooi op?
1 2 3 | $eenofandereuser = $user->bestaatlekkerniet ?> |
1 2 3 4 5 6 7 8 | class User { public static function construct_from_id($id) { # error checking enzo return new User($id); } } ?> |
1 2 3 | $eenofandereuser = user::construct_from_id(1); ?> |
Waarom zou je een static functie gebruiken die (mi) geen toegevoegde waarde heeft? De constructor moet een id accepteren, dus kun je gewoon doen:quote:Op dinsdag 7 april 2009 00:00 schreef Thomass het volgende:
[..]
de __get is voor dingen als:
[ code verwijderd ]
Dus als je een niet bestaande member variable probeert te accessen roept ie __get aan
Wat je beter kan doen, mijns insziens is:
[ code verwijderd ]
en dan kan je doen
[ code verwijderd ]
Dit alles onder voorbehoud enzo, het is laat :s)
1 2 3 | $eenofandereuser = new User($id); ?> |
Je hebt een server nodig met PHP-ondersteuning. Die kun je gewoon op je eigen computer installeren, da's voldoende voor een testomgeving.quote:Op maandag 6 april 2009 23:52 schreef jeweetz17 het volgende:
weten jullie hoe ik een php script in een html bestand kan zetten.
Ik ben bezig met het maken van een site in html en een default.css opmaak.
ik heb nu een php script wat op de site wil weergeven.
alleen hoe doe ik dat. Ik gebruik dreamweaver cs 4. Ik kan dan namelijk gemakkelijk zien hoe het eruit komt te zien door bestand-preview in brouwser te gaan. helaas krijg ik tijdens het proberen ook de volgende melding: to preview pages containing server -side code, you need a testting server. would you like to specify one now. IK heb al geprobeert het php script in zijn geheel te kopieeren naar het html bestand en hem tussen de body te plaatsen en vervolgens het html bestand naar php te vernoemen maar zonder succes. iemand?
&eur; doet niets. Met een o erbij wordt het €quote:Op dinsdag 7 april 2009 15:01 schreef Catch22- het volgende:
is het trouwens niet &eur; ?
http://www.phpfreakz.nl/forum.php?forum=1&iid=902766&print=1
htmlentities()? Maar waarom zou je dat willen?quote:Op dinsdag 7 april 2009 14:29 schreef aardappel het volgende:
Heeft php een functie dat ik die tekens kan omzetten naar html codes?
1 |
1 2 3 | corresponds to your MySQL server version for the right syntax to use near 'LIKE '%%' ORDER BY id DESC' at line 1 |
hmm, de code is nu zo:quote:Op dinsdag 7 april 2009 23:33 schreef SuperRembo het volgende:
Het moet zijn "WHERE album LIKE '%foo%' OR name LIKE '%foo%'", je bent "name" vergeten.
whehehe mijn fout, ik deed 'name' ipv 'naam'quote:Op woensdag 8 april 2009 00:06 schreef SuperRembo het volgende:
Ja dan zal het "naam" moeten zijn ofzo. Je weet toch wel hoe die tabel er uit ziet
1 2 3 4 5 6 7 | $Tekst=" <div class=\"entry\"> Tekst. </div> "; ?> |
1 2 3 4 5 6 | define("_BBC_PAGE_NAME", "Test"); define("_BBCLONE_DIR", "bbclone/"); define("COUNTER", _BBCLONE_DIR."mark_page.php"); if (is_readable(COUNTER)) include_once(COUNTER); ?> |
Ik weet dus niet hoe ik die dubbele quotes moet aanpassen in de code van BBClone...quote:Parse error: syntax error, unexpected T_STRING in /var/www/vhosts/test.php on line 5
1 2 3 4 5 6 7 8 9 10 11 | $Tekst=" define("_BBC_PAGE_NAME", "Test"); define("_BBCLONE_DIR", "bbclone/"); define("COUNTER", _BBCLONE_DIR."mark_page.php"); if (is_readable(COUNTER)) include_once(COUNTER); <div class=\"entry\"> Tekst. </div> "; ?> |
1 2 3 4 5 6 7 8 9 10 11 | $Tekst="define('_BBC_PAGE_NAME', 'Test'); define('_BBCLONE_DIR', 'bbclone/'); define('COUNTER', _BBCLONE_DIR.'mark_page.php'); if (is_readable(COUNTER)) include_once(COUNTER); <div class=\'entry\'> Tekst. </div> "; ?php ?> |
Dank je wel, maar single quotes had ik al geprobeerd.quote:Op woensdag 8 april 2009 07:44 schreef GI het volgende:
[ code verwijderd ]
Zou moeten werken
Met " geef je aan dat je een stukje string wil definieren. Als je daarna die " ook in de string stopt denkt de compiler dat je klaar bent met je stukje string.
Ik wil met BBClone statistieken bijhouden.quote:Op woensdag 8 april 2009 08:30 schreef GI het volgende:
Ik had het begin van je post niet goed gelezen.
Zonder je op deze oplossing te richten vertel eens wat je precies wil doen ?
1 2 3 | define("_BBC_PAGE_NAME", $_GET["pagina"].$_GET["taal"); ?> |
quote:Op woensdag 8 april 2009 09:12 schreef GI het volgende:
Is het dan niet makkelijker de include gewoon in de index.php te houden en
[ code verwijderd ]
te gebruiken ?
of gewoon de variabale van de switch te gebruiken om de page_name van BBC te gebruiken.
1 2 3 4 5 6 7 | define("_BBC_PAGE_NAME", $_GET["taal"].": ".$_GET["pagina"]); define("_BBCLONE_DIR", "bbclone/"); define("COUNTER", _BBCLONE_DIR."mark_page.php"); if (is_readable(COUNTER)) include_once(COUNTER); ?> |
Ik zal kijken hoe sessies precies werken. Dank je voor de suggestie.quote:Op woensdag 8 april 2009 09:22 schreef Catch22- het volgende:
taal kan je beter in de sessie zetten trouwensdie wordt 1x geselecteert meestal en je kan hem dan uit de sessie halen + je kan niet vergeten hem mee te geven
Graag gedaanquote:Op woensdag 8 april 2009 09:27 schreef Shiringa het volgende:
Nu ik dit gebruik, hoef ik het niet meer in elke pagina te plaatsen. Hartstikke bedankt, GI.
Waardoor iemand die op de site komt via een bookmark, zoekmachine, etc altijd de default taal te zien krijgt. Dat is precies waarom de taal imo wel in de URL zou moeten zitten (ik gebruik altijd example.com/<taal>/.....).quote:Op woensdag 8 april 2009 09:22 schreef Catch22- het volgende:
taal kan je beter in de sessie zetten trouwensdie wordt 1x geselecteert meestal en je kan hem dan uit de sessie halen + je kan niet vergeten hem mee te geven
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 | $naar = "email@email.nll"; $email = $_POST['email']; if(isset($_POST['verzend'])) { if($_POST['naam'] == '') { echo "U heeft geen naam ingevuld!<br />"; echo "<a href='javascript:history.back();' style='color: black; text-decoration:none;'>Klik hier om terug te gaan!</a>"; } elseif($_POST['email'] == '') { echo "U heeft geen e-mail adress ingevuld!<br />"; echo "<a href='javascript:history.back();' style='color: black; text-decoration:none;'>Klik hier om terug te gaan!</a>"; } elseif($_POST['bericht'] == '') { echo "U heeft geen bericht ingevuld!<br />"; echo "<a href='javascript:history.back();' style='color: black; text-decoration:none;'>Klik hier om terug te gaan!</a>"; } elseif($_POST['onderwerp'] == '') { echo "U heeft geen onderwerp ingevuld!<br />"; echo "<a href='javascript:history.back();' style='color: black; text-decoration:none;'>Klik hier om terug te gaan!</a>"; } else { if(!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", $_POST["email"])) { echo "U heeft geen geldig e-mail adress ingevuld!<br />"; echo "<a href='javascript:history.back();' style='color: black; text-decoration:none;'>Klik hier om terug te gaan!</a>"; } else { $bericht = " <html> <head> <title>Contact</title> </head> <body> Beste ".$_POST['naam']."<br>U heeft vandaag het volgende bericht Gestuurd. <br> <br> <hr width='100%'> <table border='0' width='100%'> <tr> <td width='20%'>Het onderwerp:</td> <td>".$_POST['onderwerp']."</td> </tr> <tr> <td width='20%'>Het Bericht:</td> <td>".$_POST['bericht']."</td> </tr> </table> <hr width='100%'> </body> </html> "; $headers = "MIME-Version: 1.0\r\n"; $headers.= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers.= "From: ".$_POST['naam']." <".$_POST['email'].">\r\n"; if(mail($naar, $_POST['onderwerp'],$bericht,$headers)) { echo 'Uw Bericht is naar de naar de webmaster verstuurd!<br>'; } else { echo 'Uw bericht is helaas niet verstuurd.'; } $ond = "Uw bericht"; if (mail($email,$ond,$bericht,$headers)) { echo 'We hebben een e-mail naar u terug gestuurd!'; } else // Anders { echo 'Er is helaas niks naar u gestuurd.'; } } } } else { <!-- Formulier weergeven --> <table border='0' width='100%'> <form method='post'> <tr> <td width='33%'>Naam:</td> <td width="67%"><input type='text' name='naam' /></td> </tr> <tr> <td width='33%'>E-mail adress:</td> <td><input type='text' name='email' /></td> </tr> <tr> <td width='33%'>Het onderwerp:</td> <td><input type='text' name='onderwerp' /></td> </tr> <tr> <td width='33%'>Het Bericht:</td> <td><textarea name='bericht' cols="40" rows="5"></textarea></td> </tr> <tr> <td colspan='2' align='center'><input type='submit' value='Verzend' name='verzend' /></td> </tr> </form> </table> } ?> |
1 |
1 |
1 2 3 4 5 6 7 8 9 10 | +----+----------+ | id | title | +----+----------+ | 5 | Inloggen | | 48 | Forum | | 49 | Agenda | | 51 | Home | | 52 | Foto's | +----+----------+ |
1 2 3 4 5 6 7 8 9 10 | +----+----------+ | id | title | +----+----------+ | 1 | Inloggen | | 2 | Forum | | 3 | Agenda | | 4 | Home | | 5 | Foto's | +----+----------+ |
Omdat die menu items dynamisch toegevoegd en verwijderd kunnen worden. Op een gegeven moment wordt het dan zo'n zooitje... Maar heel erg is het denk ik ook nietquote:Op donderdag 9 april 2009 16:09 schreef Roy_T het volgende:
Waarom zou je dat willen
En ja, je kan er natuurlijk iets voor scripten.
1 2 3 4 5 6 7 8 9 10 11 | if($moveid = $_POST['moveup']) { $query = "SELECT MAX(id) FROM menu WHERE id < $moveid"; } else if($moveid = $_POST['movedown']) { $query = "SELECT MIN(id) FROM menu WHERE id > $moveid"; } if ($query) { $res = mysql_query($query); list ($newid) = mysql_fetch_array($res); mysql_query("UPDATE menu SET id=-1 WHERE id=$newid"); mysql_query("UPDATE menu SET id=$newid WHERE id=$moveid"); mysql_query("UPDATE menu SET id=$moveid WHERE id=-1"); } ?> |
Het is helemaal niet erg zelfsquote:Op donderdag 9 april 2009 16:24 schreef daReaper het volgende:
Omdat die menu items dynamisch toegevoegd en verwijderd kunnen worden. Op een gegeven moment wordt het dan zo'n zooitje... Maar heel erg is het denk ik ook niet![]()
Je kunt ook een extra veld toevoegen, puur voor de sortering. En die hoeft dan ook niet uniek te zijn. (Iig niet uniek volgens de database, je kunt het in php wel regelen natuurlijk.)quote:Op donderdag 9 april 2009 16:24 schreef daReaper het volgende:
[..]
Omdat die menu items dynamisch toegevoegd en verwijderd kunnen worden. Op een gegeven moment wordt het dan zo'n zooitje... Maar heel erg is het denk ik ook niet
[ code verwijderd ]
Daarbij moet dus gezegd worden dat het menu wordt gesorteerd op id
Heel slecht ideequote:Op donderdag 9 april 2009 16:24 schreef daReaper het volgende:
Daarbij moet dus gezegd worden dat het menu wordt gesorteerd op id
Dank je welquote:Op donderdag 9 april 2009 01:07 schreef Catch22- het volgende:
.htaccess aanmaken in je site root en dan een rewriteurl aanmaken
is niet zo gek moeilijk
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
http://phphulp.nl/php/tutorials/8/146/
RewriteRule ^php/tutorials/(.*)/(.*)/ php/tutorials.php?cat=$1&id=$2
dus
RewriteRule ^/(.*)/(.*) index.php?taal=$1&pagina=$2
ofzo, ff googlen en dan kom je er wel uit.
voor je vindbaarheid kan het goed zijn om zon soort layout te maken
site.tld/paginas/en/2/paginatitel.html
Je moet in het script sowieso de invoerwaarden controleren, ook de taal. Iemand kan immers ook direct de link naar index.php?lang=de aanroepen.quote:Op vrijdag 10 april 2009 09:42 schreef Roy_T het volgende:
Je gaat er alleen even aan voorbij dat je niet-bestaande talen dan af moet vangen in je script (dus alsnog hardcoden of dynamisch, maar dan niet in 1 regel), terwijl dat nu met 1 regel in de htaccess kan.
In deze opzet wel jaquote:Op vrijdag 10 april 2009 09:47 schreef Light het volgende:
Je moet in het script sowieso de invoerwaarden controleren, ook de taal. Iemand kan immers ook direct de link naar index.php?lang=de aanroepen.
Dat heb ik al geprobeerd, maar als ik dat doe, werkt site.ext/css/style.css of site.ext/img/bg.jpg bijvoorbeeld niet meer. of /js ofzo. Daarom de talen helemaal vooraan geplaatst, zodat site.ext/xxx/ wel werkt.quote:Op vrijdag 10 april 2009 08:50 schreef Catch22- het volgende:
je kan dat misschien beter dynamisch doen, mocht je ooit een taal toevoegen...
1 2 3 4 5 6 | $variable = " Tekstteksteskteskt include("pagina.php") "; ?> |
Wat je kunt doen, is het bestand dat je gaat includen iets laten teruggegeven met return;quote:Op zaterdag 11 april 2009 03:51 schreef Shiringa het volgende:
Hoe kan ik een include in een variable stoppen?
Dus ik wil bijvoorbeeld include("pagina.php"); in $variable stoppen.
Dit werkt niet:
[ code verwijderd ]
Ik heb ook met echo en backslash/escape etc. geprobeerd, maar geen resultaat.
1 2 3 4 | $var = 'abc'; return $var; ?> |
1 2 3 | echo include(includeme.php); ?> |
Waarom zou je dat willen?quote:Op zaterdag 11 april 2009 03:51 schreef Shiringa het volgende:
Hoe kan ik een include in een variable stoppen?
Dus ik wil bijvoorbeeld include("pagina.php"); in $variable stoppen.
Dit werkt niet:
[ code verwijderd ]
Ik heb ook met echo en backslash/escape etc. geprobeerd, maar geen resultaat.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //If is defined URL variable 'aboutme' if(isset($_GET['aboutme'])){ // include page about me include('include/in-aboutme.php'); //else if is defined URL variable 'interests' }else if(isset($_GET['interests'])){ // include page interests include('include/in-interest.php'); // in all other cases include the home page } else { include('include/in-home.php'); } ?> |
Ik denk dat je van wereld beter een singleton kunt maken.. anders creeer je steeds een parallelle wereldquote:Op vrijdag 10 april 2009 16:29 schreef Catch22- het volgende:
($worldVariable->OutsideTemp > 20) ? this->DrinkBier("Terras");
Laat je nou het terras bier consumeren? Da's verspilling, je kunt het beter zelf opdrinken.quote:Op zaterdag 11 april 2009 20:39 schreef Intrepidity het volgende:
[..]
Ik denk dat je van wereld beter een singleton kunt maken.. anders creeer je steeds een parallelle wereld
if(World::getInstance()->outsideTemp > 20) { $this->terras->consume(new Bier("Amstel")); }
Cheers
Maar terras is geen functie, er staat geen () achter.quote:Op zondag 12 april 2009 09:58 schreef slacker_nl het volgende:
denk dat $this van het object Intrpidey is en dat hij zijn terras functie aanroept waarbij ie consume implementeerd.. (ik neem aan dat bij dat terras zomersgeklede hoogwaardige dames zitten, anders kan ie net zo goed gewoon consumeren)
1 2 3 4 5 | BBB: <input type="text" name="bbb" /> CCC:: <input type="text" name="ccc" /> DDD:: <input type="text" name="ddd" /> <input type="submit" /> |
1 2 3 4 5 6 7 8 9 | $ccc = $_REQUEST['ccc']; $bbb = $_REQUEST['bbb']; echo " - " . $ccc . " - " . $bbb . " - \n<br><br>\n"; echo "<img src='url" . $ccc."/url/" . $bbb. "/" . $j . ".jpg' />\n<br><br>\n"; ?> |
Maar wat zal de else constructie bevatten?quote:Op zaterdag 11 april 2009 20:39 schreef Intrepidity het volgende:
[..]
Ik denk dat je van wereld beter een singleton kunt maken.. anders creeer je steeds een parallelle wereld
if(World::getInstance()->outsideTemp > 20) { $this->terras->consume(new Bier("Amstel")); }
Cheers
Iets met open(new Topic()), denk ikquote:Op zondag 12 april 2009 13:17 schreef Scorpie het volgende:
[..]
Maar wat zal de else constructie bevatten?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |