1 2 3 4 5 6 | |ID|Catagorie| +--+---------+ |1 |Eten | |2 |Sport | |3 |Studie | |4 |etc, etc | |
1 2 3 4 5 6 7 | |ID|Catagorie|Item |Naam | +--+---------+---------+------+ |1 |Eten |Montignac|Arie | |2 |Sport |Voetbal! |Tinus | |3 |Studie |PHP |Kees | |4 |Eten |Moermans |Bertus| |5 |etc |etc |etc | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $query="SELECT * FROM catagorie"; $result=mysql_query($query); while($row=mysql_fetch_assoc($result)){ echo"<div>".$row[catagorie]."<br />"; $query_item="SELECT * FROM item WHERE catgorie='".$row['catgorie']."' LIMIT 3"; $result_item=mysql_query($query_item); while($record=mysql_fetch_assoc($result_item)){ echo $record[item]."<br />"; } echo"</div>"; } ?> |
Volgens mij haal ik dan gewoon de laatste 3 records van 1 categorie uit de tabel. EN ik moet 17 maal de laatste 3 hebben.quote:Op woensdag 28 september 2005 20:46 schreef Nevermind het volgende:
Volgens mij kun je het in één query doen door een LEFT JOIN te doen op `Catagorie`.
stiekem heb ik helemaal geen tabel catagorie of categorie, maar heeft deze een compleet andere naam. Dit was echter makkelijker uitleggenquote:categorie overigens?
Subqueries zijn vanaf mysql 4.1 mogenlijk.quote:Op woensdag 28 september 2005 20:50 schreef Chandler het volgende:
best pittig trouwens, kun je ook queries in queries doen? anders lijkt me dit heel erg omslachtig en zul je idd aan die 18 queries blijven zitte
1 2 3 4 5 6 7 | SELECT c.CategoryID, c.CategoryName, p.ProductID, p.ProductName FROM products p INNER JOIN categories c ON c.CategoryID = p.categoryID INNER JOIN products p2 ON p2.CategoryID = c.CategoryID AND p2.ProductName <= p.ProductName GROUP BY p.ProductID, p.ProductName, c.CategoryID, c.CategoryName HAVING COUNT(p2.ProductID) <= 5 ORDER BY c.CategoryName, p.ProductName |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CategoryID CategoryName ProductID ProductName 1 Beverages 1 Chai 1 Beverages 2 Chang 1 Beverages 39 Chartreuse verte 1 Beverages 38 Côte de Blaye 1 Beverages 24 Guaraná Fantástica 2 Condiments 3 Aniseed Syrup 2 Condiments 4 Chef Anton's Cajun Seasoning 2 Condiments 5 Chef Anton's Gumbo Mix 2 Condiments 15 Genen Shouyu 2 Condiments 6 Grandma's Boysenberry Spread 3 Confections 48 Chocolade 3 Confections 26 Gumbär Gummibärchen 3 Confections 49 Maxilaku 3 Confections 25 NuNuCa Nuß-Nougat-Creme 3 Confections 16 Pavlova |
Ik ga 'm zometeen ff uitproberenquote:Op woensdag 28 september 2005 22:14 schreef SuperRembo het volgende:
bevat de producten die boven het product staan
Ja, hij is wat lastig om zo ff kort uit te leggen. Wat ook nog belangrijk is, is dat de joinconditie van de 2e products tabel (p2.CategoryID = c.CategoryID AND p2.ProductName <= p.ProductName) en de sortering van het resultaat (ORDER BY c.CategoryName, p.ProductName) bij elkaar horen. Misschien moet je zelf ff spelen met de query, en 'm eens uitvoeren met de COUNT(p2.ProductID) in 't resultaat of een keerte zonder group bij.quote:Op woensdag 28 september 2005 22:22 schreef Swetsenegger het volgende:
Sterker nog, ik begrijp geen moer van je query
Dat is om het kort en overzichtelijk te houden. Ik gebruik ook 2 x de tabel products, dus ik moet wel een alias gebruiken.quote:Even kijken, in ieder geval ga je met tabel aliassen werken.
Ai, ik hoopte dat dat bij het vereenvoudigde voorbeeld hoordequote:Hmz, eens even kijken hoe ik dat voor mijn probleem ga gebruiken. Plus ook dat ik in mijn tabel item niet de categorie id heb opgeslagen, maar echt de catagorie naam
Ja ik ben al aan het experimenteren, want het gaat niet helemaal goed.quote:Op woensdag 28 september 2005 22:35 schreef SuperRembo het volgende:
[..]
Ja, hij is wat lastig om zo ff kort uit te leggen. Wat ook nog belangrijk is, is dat de joinconditie van de 2e products tabel (p2.CategoryID = c.CategoryID AND p2.ProductName <= p.ProductName) en de sortering van het resultaat (ORDER BY c.CategoryName, p.ProductName) bij elkaar horen. Misschien moet je zelf ff spelen met de query, en 'm eens uitvoeren met de COUNT(p2.ProductID) in 't resultaat of een keerte zonder group bij.
[..]
Dat is om het kort en overzichtelijk te houden. Ik gebruik ook 2 x de tabel products, dus ik moet wel een alias gebruiken.
[..]
Ai, ik hoopte dat dat bij het vereenvoudigde voorbeeld hoorde
1 2 3 4 5 6 7 | SELECT g.genre, a.title, a.ad_id FROM genre g INNER JOIN ad a ON a.genre = g.genre INNER JOIN ad a2 ON a2.genre = g.genre AND a2.ad_id <= a.ad_id GROUP BY a.title HAVING COUNT(a2.ad_id) <= 3 ORDER BY g.genre, a.ad_id DESC |
1 2 3 4 5 6 7 | SELECT g.genre, a.title, a.ad_id FROM genre g INNER JOIN ad a ON a.genre = g.genre INNER JOIN ad a2 ON a2.genre = g.genre AND a.ad_id <= a2.ad_id GROUP BY a.title HAVING COUNT(a2.ad_id) <= 3 ORDER BY g.genre, a.ad_id DESC |
1 2 3 4 5 6 7 8 9 | SELECT c.CategoryID, c.CategoryName, p.ProductID, p.ProductName, FROM products p INNER JOIN categories c ON c.CategoryID = p.categoryID WHERE ( SELECT COUNT(*) FROM products p2 WHERE p2.CategoryID = c.CategoryID AND p2.ProductName <= p.ProductName ) <= 5 ORDER BY c.CategoryName, p.ProductName |
Het verbaast me altijd dat ik voor echt complexe queries en vraagstukken hier WEL een antwoord of een goed idee krijg van mensen als SuperRembo en Roonaan, terwijl op phpfreakz.nl, bij uitstek de php vraagbaak, meestal niet.quote:Op donderdag 29 september 2005 07:26 schreef Chandler het volgende:
SuperRembo, dat ziet er weer eens super Topf uit man!... wat een knowledge
Yups, ik dank ook veel aan hunquote:Op donderdag 29 september 2005 09:42 schreef Swetsenegger het volgende:
[..]
Het verbaast me altijd dat ik voor echt complexe queries en vraagstukken hier WEL een antwoord of een goed idee krijg van mensen als SuperRembo en Roonaan, terwijl op phpfreakz.nl, bij uitstek de php vraagbaak, meestal niet.
Ik zeg, we maken een walk of fame in de OPquote:Op donderdag 29 september 2005 10:16 schreef Darkomen het volgende:
[..]
Yups, ik dank ook veel aan hun
Van de tweakers heb ik ook een aantal keren goede suggesties gehad.quote:Op donderdag 29 september 2005 11:35 schreef JeRa het volgende:
Altijd baas boven baas, hepersoonlijk ga ik met PHP-problemen (if any) altijd op Fok! zoeken en problemen in andere talen vuur ik wel op Tweakers af
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 | <?php if($_GET['id'] == 'link') { include("link.php"); } elseif($_GET['id'] == 'news') { include("news.php"); } elseif($_GET['id'] == 'ticket') { include("ticket.php"); } elseif($_GET['id'] == 'contact') { include("contact.php"); } elseif($_GET['id'] == 'link_add') { include("link_add.php"); } elseif($_GET['id'] == 'link_edit') { include("link_edit.php"); } else { include("main.php"); } ?> |
1 2 3 4 5 6 7 8 9 10 | <?php $files = array("bestand1", "bestand2", "bestand3"); if(isset($_GET['file'] && in_array($_GET['file'], $files)){ include($_GET['file'] . ".php"); } else { include("main.php"); } ?> |
Of met een switchquote:Op vrijdag 30 september 2005 11:55 schreef Lamme_Sterfkanarie het volgende:
ik zou het trouwens zo oplossen:
[ code verwijderd ]
mogelijke bugs daargelaten, niet getest
je hebt nu trouwens ook 2x id in je url staan. dat gaat ook niet werken vandaar dat ik de eerste id hernoemd naar file heb.
1 | if(empty($bericht)) |
1 2 3 4 5 6 7 8 9 10 11 12 | <?php //Bericht in variabele stoppen $bericht = $_POST['bericht']; //Whitespaces voor en na het bericht weghalen $bericht = trim($bericht); //Check of het bericht wel is ingevuld (en een redelijke lengte heeft) if (strlen($bericht) < 6) { ... } ?> |
Best raar eing. want hier zou je toch minder / slechtere reacties verwachten hehe. Maar goed denk dat alleen maar de mensen met meer dan begin basis reageren dan daar op phpfreakz, daar is het een komen en gaan van ppl die snel ff hun oplossing willen weten (veel noobz) enzo, heb je hier nietquote:Op donderdag 29 september 2005 09:42 schreef Swetsenegger het volgende:
[..]
Het verbaast me altijd dat ik voor echt complexe queries en vraagstukken hier WEL een antwoord of een goed idee krijg van mensen als SuperRembo en Roonaan, terwijl op phpfreakz.nl, bij uitstek de php vraagbaak, meestal niet.
Het aanmaken van de directories gaat wel goed, ik kan alleen daarna niks meer met die mappen doen via een FTP programma, omdat ik de rechten niet heb. Kan ze niet weggooien, niks uploaden, niks aanpassen...quote:Op vrijdag 30 september 2005 18:40 schreef JeRa het volgende:
Die gallery gaat met de rechten van Apache draaien. Zorg er dus voor dat je in je script die directory aanmaakt en 'm goed chmod(). Dit hoef je als het goed is dus maar een keer te doen, en dan staan de rechten goed
Overigens, als je in FTP de rechten op 777 zet maakt het niet uit wat de gebruikersnaam is, want dan kan Apache er ook bij. Dan hoef je alleen nog maar te hopen dat je niet op een shared webhost zit waarbij iedereen kan rondkijken
Dan moet je die bestanden ná het uploaden en verplaatsen naar die directory ook de goede rechten (777 waarschijnlijk) geven. Dan kun je ze ook via FTP wijzigen/verwijderen/whatever. De rechten die je aan een directory geeft zijn namelijk alleen voor die node, de directory dus, van toepassingquote:Op vrijdag 30 september 2005 19:04 schreef wonderer het volgende:
[..]
Het aanmaken van de directories gaat wel goed, ik kan alleen daarna niks meer met die mappen doen via een FTP programma, omdat ik de rechten niet heb. Kan ze niet weggooien, niks uploaden, niks aanpassen...
Dat HAVING(COUNT()) gedoe, ik wist niet dat je dat als LIMIT kon gebruiken?quote:Op woensdag 28 september 2005 22:58 schreef Swetsenegger het volgende:
Ok Ik heb SR's query nu zover dat hij de EERSTE 3 per catagorie pakt
(Hij pakte eerst 'willekeurig' omdat ik op een title aan het sorteren wasDan krijg je gewoon de titels welke beginnen met A, vervolgens met B per categorie terug natuurlijk, dom dom dom
)
Nu nog de LAATSTE 3.
De query is nu dit (met de orignele tabel namen. genre is gelijk aan categorie en ad is gelijk aan item.)
[ code verwijderd ]
-edit
Swets..., de volgende keer ff dieper nadenken
[ code verwijderd ]
Bedankt voor het meedenken!
Ik kan ze al niet eens uploaden, laat staan veranderen. En ik heb juist mijn eigen gallery geschreven omdat ik het een voor een toevoegen van images zo irritant vond. Hij leest nou gewoon de directory uit.quote:Op vrijdag 30 september 2005 19:22 schreef JeRa het volgende:
[..]
Dan moet je die bestanden ná het uploaden en verplaatsen naar die directory ook de goede rechten (777 waarschijnlijk) geven. Dan kun je ze ook via FTP wijzigen/verwijderen/whatever. De rechten die je aan een directory geeft zijn namelijk alleen voor die node, de directory dus, van toepassingen niet op de onderliggende directories of bestanden.
Of je maakt natuurlijk een adminpanel in je gallery
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 | <?php function create_gallery($code,$name,$fotograaf,$email,$date,$user) { if(!is_dir($code)){ mkdir($code,0777); mkdir($code.'/images',0777); mkdir($code.'/thumbnails',0777); mkdir($code.'/caps',0777); $file=$code.'/header.txt'; copy('under.jpg',$code.'/thumbnails/first.jpg'); $entry=$name."\n"; if($email!=''){ $entry.='<a href="mailto:'.$email.'">'.$fotograaf.'</a>'."\n"; } else{ $entry.=$fotograaf."\n"; } $entry.=$date."\n"; $entry.=$user."\n"; if (!$handle = fopen($file, 'w+')) { $msg='Fout! Kan het bestand '.$file.' niet openen.'; exit; } if (!fwrite($handle, $entry)) { $msg='Fout! Kan het bestand '.$file.' niet beschrijven.'; exit; } fclose($handle); } else{ $msg='Deze galerie bestaat al, kies een andere naam!'; } return $msg; } ?> |
Ik gok dat dat niet van toepassing is op chmod()quote:The mode is also modified by the current umask, which you can change using umask().
1 2 3 4 5 6 7 8 9 10 11 | <html> <head> <title>Upload test form</title> </head> <body> <form action="getfile.php" method="post"><br> File: <input type="file" name="uploadFile"><br> <input type="submit" value="Upload File"> </form> </body> </html> |
1 2 3 4 5 6 7 8 9 10 | <html> <head> <title>Upload test</title> </head> <body> <?php move_uploaded_file($_FILES['uploadFile'] ['tmp_name'], "../uploads/{$_FILES['uploadFile'] ['name']}") ?> </body> </html> |
bedankt. dat waren de twee fouten! het werkt nu!quote:Op zaterdag 1 oktober 2005 09:47 schreef SuperRembo het volgende:
Er horen in ieder geval geen spaties tussen $_FILES['uploadFile'] en ['tmp_name'].
Volgens mij hoort er nog enctype="multipart/form-data" in de form-tag.
Ik wil deze winnen eigenlijk, dus ik crosspost 'm hier.quote:Op zaterdag 1 oktober 2005 17:31 schreef Swetsenegger het volgende:
Voor de echte nerds
http://www.phpfreakz.nl/forum.php?forum=5&page=1
De kortste geldige oplossing staat op dit moment op 66 karakters. Standaard instellingen, dus Notices staan uit, super globals staan uit.quote:Beste PHP-ers,
--[ PHP Golf
Een nieuwe editie van PHP Golf!
--[ Wat is PHP Golf?
De bedoeling is een PHP script te maken met zo min mogelijk karakters.
Dus zo min mogelijk letters, nummers, spaties, newlines en dergelijke.
Met het script moet je een doelstelling bereiken.
We gaan ervan uit dat je de recenste PHP 4.x, op het moment 4.4,
versie hebt en standaard php.ini configuratie. Tenzij anders vermeld.
(Standaard: register_globals = off)
Het script moet op UNIX-gebaseerde en Windows systemen werken.
--[ Voor wie is PHP Golf?
De competitie is voor iedereen toegankelijk.
--[ Inzendingen
Je kunt je oplossing sturen naar:
phpgolf [at] gmail.com
(Disclaimer: je e-mail zal niet worden gebruikt voor
spam of worden doorgegeven aan derden)
--[ Doelstelling
Je moet de input veranderen in hoofdletters en in kleine letters, maar met
een twist. We gaan het camel-talk stijl doen. We gaan ervan uit dat de input
alleen uit A-Za-z bestaat. De input komt van een formulier vandaan.
Dit is het formulier:
1
2
3
4
5
6
7
8
9
10
11
12
13<html>
<head>
<title>PHP Golf #5</title>
</head>
<body>
<form method="POST" action="camel.php">
<input type="hidden" name="dummy">
<input type="text" name="string">
<input type="submit" name="submit">
</form>
</body>
</html>
Het doel is de input te veranderen in camel-style.
Voorbeeld input:
"PHPFreakz heeft een community"
output:
"PhPfReAkZ hEeFt EeN cOmMuNiTy"
De output moet beginnen met een hoofdletter. Iedere tweede letter is een
een hoofdletter. Spaties tellen dus niet mee als karakters (zie voorbeeld hierboven).
Nu mag jij camel.php programmeren en liefst zo kort mogelijk.
--[ Deadline:
De deadline is over 6 dagen.
Donderdag 19:00 6 oktober 2005
-----
Post in dit topic vragen/suggesties.
GEEN OPLOSSINGEN!
Mocht je een oplossing hebben, dan mag je gerust je karakter aantal posten.
Dit om andere te stimuleren![]()
Diegene die het minste karakters heeft gebruikt, wint!
Veel succes,
Tri Pham
1 2 3 | <?php preg_replace('/[a-z]+/ie', '\'$0\' ^ str_pad(\'\', strlen(\'$0\'), \' \')', $input); ?> |
Als je hier nou meteen naar het juiste topic had gelinkt, dan had ik 'm meteen gesnapt.quote:Op zaterdag 1 oktober 2005 17:31 schreef Swetsenegger het volgende:
Voor de echte nerds
http://www.phpfreakz.nl/forum.php?forum=5&page=1
Altijd userinput checkenquote:Op zondag 2 oktober 2005 13:00 schreef SuperRembo het volgende:
[..]
Als je hier nou meteen naar het juiste topic had gelinkt, dan had ik 'm meteen gesnapt.
Vanavond weer eens kijken, maar 66 tekens is echt bizar weinig.quote:Op zondag 2 oktober 2005 13:18 schreef SuperRembo het volgende:
Ik zit nu op 9177 tekens met een preg_replace, 103102 tekens met een loop.
Nog een flinke weg te gaan naar de 66 (of minder tekens)
Dan moet er wel weer een ; achter. Dan zit ik nu op 67.quote:Op zondag 2 oktober 2005 15:31 schreef Swetsenegger het volgende:
[..]
Vanavond weer eens kijken, maar 66 tekens is echt bizar weinig.
niet vergeten dat je de laatste ?> mag weglaten he
Dat zal ik maar doen.quote:Op zondag 2 oktober 2005 15:38 schreef SuperRembo het volgende:
[..]
Dan moet er wel weer een ; achter. Dan zit ik nu op 67.
63!
Zal dan maar ff reggen op dat forum
notices staan standaard uit, en is dus geldigquote:Op zondag 2 oktober 2005 15:43 schreef SuperRembo het volgende:
Ik krijg wel 2 + (aantal niet-spaties) notices
Maar dat lukt me niet, en deze:quote:Replacement may contain references of the form \\n or (since PHP 4.0.4) $n, with the latter form being the preferred one. Every such reference will be replaced by the text captured by the n'th parenthesized pattern. n can be from 0 to 99, and \\0 or $0 refers to the text matched by the whole pattern. Opening parentheses are counted from left to right (starting from 1) to obtain the number of the capturing subpattern.
Zal toch ook enig lucht moeten geven in het aantal gebruikte karakters.quote:The precise effect of "\cx" is as follows: if "x" is a lower case letter, it is converted to upper case. Then bit 6 of the character (hex 40) is inverted. Thus "\cz" becomes hex 1A, but "\c{" becomes hex 3B, while "\c;" becomes hex 7B.
1 2 3 | $a=$_POST['string'];for($b=0;$b<strlen($a);$b++){$c=ord(substr($a,$b,1)); if($c!=32){$e++;$g=($e%2!=0)?(($c<91)?chr($c):chr($c-32)):(($c<91)?chr($c+32): chr($c));$f.=$g;}else{$f.=" ";}}echo $f; |
1 2 3 | $a=$_POST['string'];for($b=0;$b<strlen($a);$b++){$c=substr($a,$b,1); if($c!=" "){$d.=($e%2==0)?strtoupper($c):strtolower($c);$e++;}else $d.=" ";} echo $d; |
Ik ben er ook niet goed in, maar je leert er wel een hoop handiheidjes meequote:Op zondag 2 oktober 2005 18:14 schreef Nevermind het volgende:
Dankje, de accollades had ik ook net bedacht, en daarmee kom ik op 133. Nu verder met ? :
Erg leuk om te doen trouwens, ook al ben ik er niet erg goed in
-edit- 124
quote:Op zondag 2 oktober 2005 17:54 schreef SuperRembo het volgende:
In plaats van $c=substr($a,$b,1) zou je $c=$a{$b} kunnen gebruiken.
Inderdaad, bedankt voor de tip trouwensquote:Op zondag 2 oktober 2005 18:18 schreef Swetsenegger het volgende:
[..]
Ik ben er ook niet goed in, maar je leert er wel een hoop handiheidjes mee
De verkorte if notatie bijvoorbeeld
1 2 | $a=$_POST[string];for($c=0;$c<strlen($a);print($a{$c}!=" " ?$c%2==0?strtoupper($a{$c}):strtolower($a{$c}):" "),$c++); |
klopt, met print kan je het resultaat van een functie printen, met echo nietquote:Op zondag 2 oktober 2005 19:20 schreef Nevermind het volgende:
Ik kwam er achter dat je in for-loops ook direct resultaat kan teruggeven, weer wat geleerd. Daarmee kom ik op
[ code verwijderd ]
Nog steeds veel te veel, maar het is weer een paar tekens minder
Maar als ik het goed begrijp kun je alleen het print-commando gebruiken? Zelfs echo werkt niet.
Maar je doet '& 0', dus ik mag aannemen dat $c een integer is? Of is het een character?quote:Op zondag 2 oktober 2005 19:27 schreef Swetsenegger het volgende:
[..]
Ongeacht de waarde van $c geeft hij dus altijd 0 terug (en met chr() dus een spatie)
Ik wil niet vervelden doen, maar klopt je output wel? Je moet wel rekening houden met de spaties.quote:Op zondag 2 oktober 2005 19:20 schreef Nevermind het volgende:
Ik kwam er achter dat je in for-loops ook direct resultaat kan teruggeven, weer wat geleerd. Daarmee kom ik op
[ code verwijderd ]
Nog steeds veel te veel, maar het is weer een paar tekens minder
Maar als ik het goed begrijp kun je alleen het print-commando gebruiken? Zelfs echo werkt niet.
1 2 3 | input = "PHPFreakz heeft een community" output = "PhPfReAkZ hEeFt EeN cOmMuNiTy" // Goed output = "PhPfReAkZ HeEfT EeN CoMmUnItY" // Fout |
$c & 0 is altijd 0, net als $c and false altijd false is.quote:Op zondag 2 oktober 2005 19:27 schreef Swetsenegger het volgende:
[..]
Ongeacht de waarde van $c geeft hij dus altijd 0 terug (en met chr() dus een spatie)
hoe moet ik dan AND'ten met 0quote:Op zondag 2 oktober 2005 19:32 schreef SuperRembo het volgende:
[..]
$c & 0 is altijd 0, net als $c and false altijd false is.
Die bitwise operaties werken ook met tekens, maar dan moet je wel aan beide kanten een character gebruiken. Dat het verschil tussen hoofdletter en kleine letter altijd een spatie is, dat veronderstel ik bekendquote:Op zondag 2 oktober 2005 19:28 schreef Swetsenegger het volgende:
[..]
klopt, met print kan je het resultaat van een functie printen, met echo niet
en je kan die strtolower en strtoupper nog vervangen door een bitwise operatie. Hoewel dat bij tot op heden nog niet lukt
Ja ik vat 'm nu, moet dus $c=$c&' ' zijn.quote:Op zondag 2 oktober 2005 19:35 schreef Light het volgende:
[..]
Er zit verschil tussen 'a' & 0 en 'a' & '0'.
1 2 3 | <?php $a=strtolower($_POST[string]);$a=preg_replace('/\w\s?\w?/e','ucfirst("$0")',$a); ?> |
Hij doet het niet.quote:Op zondag 2 oktober 2005 19:41 schreef JeRa het volgende:
[ code verwijderd ]
Verder dan dat kom ik op het moment niet. 84 tekens inclusief <? en ?>
1 2 3 | <?php $a=strtolower($_POST[string]);echo preg_replace('/\w\s?\w?/e','ucfirst("$0")',$a); ?> |
Maak er danquote:
1 | <?=preg_replace('/\w\s?\w?/e','ucfirst("$0")',strtolower($_POST[string])); |
In mijn afgunst van die constructie was ik 'm gewoon helemaal vergetenquote:Op zondag 2 oktober 2005 19:51 schreef Nevermind het volgende:
[..]
Maak er dan
[ code verwijderd ]
van, heb je 74
Case insensitive maken is makkelijk (i-modifier), maar de bron lowercase maken is een ander verhaalquote:Op zondag 2 oktober 2005 19:56 schreef Nevermind het volgende:
Kun je niet iets toevoegen aan de pattern zodat ie case insensitive wordt en je het "strtolower"-stukje weg kan laten?
case insensitive preg_replace is geen probleem (ipv /e wordt het /ie), maar... wat doe je dan als de input een hoofdletter is en het een kleine letter moet worden?quote:Op zondag 2 oktober 2005 19:56 schreef Nevermind het volgende:
Kun je niet iets toevoegen aan de pattern zodat ie case insensitive wordt en je het "strtolower"-stukje weg kan laten?
quote:Op zondag 2 oktober 2005 19:57 schreef Swetsenegger het volgende:
ucfirst maakt van het eerste karakter van een string een hoofdletter.
Ik begrijp je regexp niet
1 | \w\s?\w? |
Je hebt gelijk, ik zat even mee te denken, maar ik heb veel te weinig ervaring met regexp om iets zinnigs toe te voegenquote:Op zondag 2 oktober 2005 19:58 schreef Swetsenegger het volgende:
[..]
case insensitive preg_replace is geen probleem (ipv /e wordt het /ie), maar... wat doe je dan als de input een hoofdletter is en het een kleine letter moet worden?
Ach fuck, natuurlijk. ? is 0 of 1, dus je $0 wordt letter+letter of letter+spatie+letter, waarbij de eerste van $0 hoofdletter wordtquote:Op zondag 2 oktober 2005 19:59 schreef JeRa het volgende:
[..]
[ code verwijderd ]
Woord-karakter, eventuele whitespace, eventueel woord-karakter.
Deze string matched ie telkens (2 bij 2, bij een spatie 3, bij het laatste teken eventueel 1) en dan maakt ie van het eerste teken een uppercase
Dus:
blaat blaat blaat
Maar het is kennelijk niet dé oplossingquote:Op zondag 2 oktober 2005 20:01 schreef Swetsenegger het volgende:
[..]
Ach fuck, natuurlijk. ? is 0 of 1, dus je $0 wordt letter+letter of letter+spatie+letter, waarbij de eerste van $0 hoofdletter wordtDeze zocht ik al.
Die wil ik ook wel zienquote:
1 | <?=preg_replace('/\w/e','++$u%2?$0&~" ":$0|" "',$_POST[string]); |
Hmmm, ja. Heb 'm weer weggehaald. Had niet verwacht dat dat zo snel gevonden zou wordenquote:Op zondag 2 oktober 2005 20:07 schreef JeRa het volgende:
SuperRembo, klopt het dat jouw code op je site staat?
Hele mooie oplossing, maar daar kunnen er nog 3 vanafquote:Op zondag 2 oktober 2005 20:06 schreef Light het volgende:
[ code verwijderd ]
Ik heb er nog 65 van weten te maken
quote:Op zondag 2 oktober 2005 20:06 schreef Light het volgende:
[ code verwijderd ]
Ik heb er nog 65 van weten te maken
1 | '++$u%2?$0&~" ":$0|" "' |
Voor elke character wordt deze code ge-evalled:quote:
1 | ++$u % 2 ? $0 & ~" " : $0 | " " |
Een tilde is een bit inverse / NOT-operator. 1011 wordt dus 0100.quote:Op zondag 2 oktober 2005 20:21 schreef Swetsenegger het volgende:
[..]
Met uitleg graag
[ code verwijderd ]
++$u%2
Hier kijk je in ieder geval of iets even is. het 'iets' ontgaat me alleen.
Zoja, dan vervang je door $0&~" " dus het karakter ga je AND'en met tilde spatie
Zo nee, dan vervang je door $0|" " dus het karakter ga je orren met spatie.
wat de neuk is ++$u?quote:Op zondag 2 oktober 2005 20:28 schreef JeRa het volgende:
[..]
Een tilde is een bit inverse / NOT-operator. 1011 wordt dus 0100.
++$u wordt 1, 2, 3, 4 en met % 2 wordt dat dus 1, 0, 1, 0 omdat % een modulus-operator is
$u = 0;quote:
Ja ik begrijp ++ ervoor en erachter wel.quote:Op zondag 2 oktober 2005 20:31 schreef JeRa het volgende:
[..]
$u = 0;
$a = $u++;
echo $a;
$u = 0;
$a = ++$u;
echo $a;
Voer deze code eens uit++ achter de variabele geeft de oude waarde terug, ++ voor de variabele geeft de nieuwe waarde terug. ++ voor de variabele is tevens iets sneller omdat de oude waarde niet onthouden hoeft te worden
Als in PHP een variabele nog niet bestaat, en je doet er een integer-operatie op (++), dan is ie standaard nulquote:Op zondag 2 oktober 2005 20:33 schreef Swetsenegger het volgende:
[..]
Ja ik begrijp ++ ervoor en erachter wel.
Maar waar komt $u vandaan
Ik begreep het toen ik 'm overlasquote:Op zondag 2 oktober 2005 20:34 schreef JeRa het volgende:
[..]
Als in PHP een variabele nog niet bestaat, en je doet er een integer-operatie op (++), dan is ie standaard nul
Dus dit als eerste statement in een PHP-bestand:
$u++;
Is hetzelfde als dit:
$u = 0;
$u++;
$u bestond dus gewoonweg nog niet
Dit is een A: 10000001quote:Op zondag 2 oktober 2005 20:44 schreef JeRa het volgende:
in PHP is vrijwel alles true, behalve 0 wat naar false evalueert.
Dat wat jij gevonden hebt is maar vaag, want je moet namelijk de spatie setten of unsetten
Ik ben toch wel benieuwd waar er dan nog 3 weg zouden kunnen.quote:Op zondag 2 oktober 2005 20:13 schreef JeRa het volgende:
[..]
Hele mooie oplossing, maar daar kunnen er nog 3 vanaf*niet zegt waar*
Sterker nogquote:Op zondag 2 oktober 2005 21:13 schreef Light het volgende:
[..]
Ik ben toch wel benieuwd waar er dan nog 3 weg zouden kunnen.
Klopt, ik had 'm iets aangedragen waardoor het geheel twee tekentjes kleiner kon, maar ik vond het nogal triviaalquote:Op zondag 2 oktober 2005 21:16 schreef Swetsenegger het volgende:
[..]
Sterker nog
SR zegt op phpfreakz 'm in 59 te hebben
Mjah, voor die van light kan er misschien nog een masker verzonnen worden waardoor je bij het eerste karakter maar 1 bitwise manipulatie nodig hebt (inverse spatie XOR'en ofzo), maar daar winnen we maar 1 karakter meequote:Op zondag 2 oktober 2005 21:18 schreef JeRa het volgende:
[..]
Klopt, ik had 'm iets aangedragen waardoor het geheel twee tekentjes kleiner kon, maar ik vond het nogal triviaal(daarom zegt ie ook 'als ie goedgekeurd wordt').
XOR'en gaat niet werken omdat je dan áltijd de character van case verandert, ongeacht wat het ervoor wasquote:Op zondag 2 oktober 2005 21:30 schreef Swetsenegger het volgende:
[..]
Mjah, voor die van light kan er misschien nog een masker verzonnen worden waardoor je bij het eerste karakter maar 1 bitwise manipulatie nodig hebt (inverse spatie XOR'en ofzo), maar daar winnen we maar 1 karakter mee
Ja ik heb al een blaadje vol met 1'en en 0'en, maar omzowel uppercase als lowercase zo te maskeren met 1 AND of OR dat er altijd uppercase uitkomt EN dat universeel is voor elk karakter valt nog niet meequote:Op zondag 2 oktober 2005 21:32 schreef JeRa het volgende:
[..]
XOR'en gaat niet werken omdat je dan áltijd de character van case verandert, ongeacht wat het ervoor was
Alt-223. Maar om de een of andere reden werkt die code niet in mijn editor. En ook het teken erin plakken werkt niet goed. Maar goed, 't scheelt hooguit 1 teken.quote:Op zondag 2 oktober 2005 21:30 schreef Swetsenegger het volgende:
[..]
Mjah, voor die van light kan er misschien nog een masker verzonnen worden waardoor je bij het eerste karakter maar 1 bitwise manipulatie nodig hebt (inverse spatie XOR'en ofzo), maar daar winnen we maar 1 karakter mee
OE, samen met ALT 223 kom je dan al op 62 Lightquote:Op zondag 2 oktober 2005 21:58 schreef Nevermind het volgende:
was next($_POST) al aangedragen als alternatief voor $_POST[string]? Weer twee winst
Dan moeten er nog 3 af, ergens.quote:Op zondag 2 oktober 2005 22:03 schreef Swetsenegger het volgende:
[..]
OE, samen met ALT 223 kom je dan al op 62 Light
-edit- geeft een parse error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | stat - naam van de statistiek stat_user - gebruikers naam ennuh psw :P statbrowser - voor opslag browser naam statcolor - * statcountry - * statdate - hierin gaat de datum, tijd, etc stathost - * stathour - * statip - ip van de gebruiker en de laatste visit statkeywords - * statlanguage - * statlast - laatste gebruikers online (max 25) statonline - wie zijn der online!? statos - * statreferer - * statresolution - * met * zijn dezelfde type tabel (id, statistic id, value en count van het aantal users) ik heb ze opgesplit omdat ik dacht dat dat wel handig was ivm uitlezen (grote tabellen worden slomer als ze voller raken, tenminste dat leek me logisch) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | CREATE TABLE `stat` ( `id` int(4) NOT NULL auto_increment, `name` varchar(32) NOT NULL default '', `user_id` int(11) NOT NULL default '0', `title` varchar(75) NOT NULL default '', `referer` varchar(75) NOT NULL default '', `active` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `stat_user` ( `id` int(11) NOT NULL auto_increment, `username` varchar(32) NOT NULL default '', `password` varchar(64) NOT NULL default '', `user_level` tinyint(1) NOT NULL default '0', `last_login` datetime NOT NULL default '0000-00-00 00:00:00', KEY `id` (`id`) ) TYPE=MyISAM; CREATE TABLE `statdate` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `day` char(2) NOT NULL default '', `weekday` char(2) NOT NULL default '', `week` char(2) NOT NULL default '', `month` char(2) NOT NULL default '', `year` varchar(4) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statip` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `lastdate` varchar(10) default NULL, `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statkeywords` ( `sid` tinyint(4) NOT NULL default '0', `lastupdate` datetime NOT NULL default '0000-00-00 00:00:00', `keyword` varchar(25) NOT NULL default '', `count` bigint(20) NOT NULL default '0', KEY `sid` (`sid`) ) TYPE=MyISAM; CREATE TABLE `statlast` ( `id` bigint(20) NOT NULL auto_increment, `sid` tinyint(4) NOT NULL default '0', `lasttime` timestamp(14) NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `ip` varchar(15) NOT NULL default '', `host` varchar(255) NOT NULL default '', `referer` varchar(255) NOT NULL default '', `os` varchar(75) NOT NULL default '', `browser` varchar(75) NOT NULL default '', `country` varchar(75) NOT NULL default '', `color` varchar(75) NOT NULL default '', `resolution` varchar(75) NOT NULL default '', KEY `id` (`id`,`sid`) ) TYPE=MyISAM; CREATE TABLE `statonline` ( `id` int(4) unsigned zerofill NOT NULL auto_increment, `sid` tinyint(4) NOT NULL default '0', `session_id` varchar(255) NOT NULL default '', `activity` datetime NOT NULL default '0000-00-00 00:00:00', `member` enum('y','n') default 'n', `ip_address` varchar(255) NOT NULL default '', `cururl` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statreferer` ( `sid` int(4) NOT NULL default '0', `date` date NOT NULL default '0000-00-00', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', `type` enum('I','E') NOT NULL default 'I' ) TYPE=MyISAM; CREATE TABLE `statbrowser` ( `id` int(4) unsigned zerofill NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statcolor` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statcountry` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `stathost` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `stathour` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statlanguage` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statos` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; CREATE TABLE `statresolution` ( `id` int(4) NOT NULL auto_increment, `sid` int(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; |
Welk gedeelte? next($_POST) heb ik getest en werkt.quote:Op zondag 2 oktober 2005 22:03 schreef Swetsenegger het volgende:
[..]
OE, samen met ALT 223 kom je dan al op 62 Light
-edit- geeft een parse error
Ja, daar heb ik mee getest. Door het hidden field gebruik ik next ipv pos, zodat ie het tweede veld pakt ("string") in plaats van het hidden field.quote:Op zondag 2 oktober 2005 22:45 schreef Swetsenegger het volgende:
@Nevermind, heb je wel getest MET het fform uit de opgave. Daar staat ook nog een hidden field in.
Maar sowieso kreeg ik een parseerror wanneer ik next($_POST) gebruikte.
1 | <?=preg_replace('/\w\s?\w?/e','ucfirst("$0")',strtolower(next($_POST))); |
Die next($_POST) werkt hier wel goedquote:Op zondag 2 oktober 2005 22:45 schreef Swetsenegger het volgende:
@Nevermind, heb je wel getest MET het fform uit de opgave. Daar staat ook nog een hidden field in.
Maar sowieso kreeg ik een parseerror wanneer ik next($_POST) gebruikte.
Dan zijn goede indexen zeker van belang. De forumreactiestabel zal wel het predikaat "groot" meekrijgen, maar lijkt me toch nog redelijk snelquote:@Chandler.
16 tabellen voor statistiekenIk zou eens een paar tutorials lezen over normalisatie, want het lijkt me dat dat efficienter kan.
Ow en grote tabellen welke trager worden als ze voller raken.
Ik denk dat MySQL efficienter data uit 1 grote tabel haalt, dan uit 16 relationele tabellen. En hoe groot wordt je tabel? Bij mysql spreken ze pas over 'groot' bij miljoenen records.
1 2 3 4 5 6 7 8 | CREATE TABLE `statcounts` ( `id` int(4) NOT NULL auto_increment, `statid` int(4) NOT NULL default '0', `propertyid` INT(4) NOT NULL default '0', `value` varchar(75) NOT NULL default '', `count` bigint(20) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM; |
Tijdsduur filmpjes is variabelquote:Op maandag 3 oktober 2005 09:53 schreef Chandler het volgende:
@LeeHarveyOswald; wat denk je van een frame die je met een bepaalde timer (als het filmpje geladen is) vervangt door een ander filmpje? want ook in javascript kan je werken met timers
Zodat een redacteur eerst moet kijken hoelang zijn / haar filmpje is, en dat nog is extra in moet voerenquote:Op maandag 3 oktober 2005 10:35 schreef Chandler het volgende:
kan je toch ook in de database zetten? dan geef je die ook als variabel mee..!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <body> <?php include('connect.php'); $query = "SELECT * FROM forum_$f_$t"; $query2 = "SELECT naam FROM naam_fora WHERE forumnummer=$f"; $query3 = "SELECT naam FROM forum_$f WHERE topicnummer=$t"; $rs = mysql_query($query); $rs2 = mysql_query($query2); $rs3 = mysql_query($query3); $a = mysql_fetch_array($rs3); $b = mysql_fetch_array($rs2); ?> <div class="header">ERIK FORUM</div> <div class="content"><h1 class="index"><?php echo $a[naam];?></h1> <a href="/erikforum.php">Index</a> >> <a href="/forum.php?f=<?php echo $f ?>"><?php echo $b[naam] ?></a> >> <a href="/topic.php?f=<?php echo $f ?>&t=<?php echo $t?>"><?php echo $a[naam] ?></a> <table width="626" height="36"> <?php while($z = mysql_fetch_array($rs)) { ?> <tr> <td width="618"><?php echo $z[berichten] ?></td> </tr> <?php } ?> </table> </div> <?php mysql_close(); ?> </body> </html> |
Eh nee, dat werkt ook niet wanneer PHP tenminste standaard geinstalleerd is en superglobals uit staan.quote:Op maandag 3 oktober 2005 16:07 schreef Lamme_Sterfkanarie het volgende:
je kunt niet zomaar $f ofzo in een query gebruiken
WHERE topicnummer = '" . $t . "'
zou wel moeten werken. Maar je mist nog wel meer dingen die wel erg basis zijn.
jah duh.. dat weet ik ook wel. Dit was gewoon het eerste ding wat me opviel van $random aantal foutenquote:Op maandag 3 oktober 2005 16:09 schreef Swetsenegger het volgende:
[..]
Eh nee, dat werkt ook niet wanneer PHP tenminste standaard geinstalleerd is en superglobals uit staan.
WHERE topicnummer = '" . $_GET['t'] . "'
werkt wel, maar is 'levens gevaarlijk' aangezien je je userinput totaal niet gecontroleerd heb.
nou, bij een ander document doet hij het wel met forum_$f oid.quote:Op maandag 3 oktober 2005 16:07 schreef Lamme_Sterfkanarie het volgende:
je kunt niet zomaar $f ofzo in een query gebruiken
WHERE topicnummer = '" . $t . "'
zou wel moeten werken. Maar je mist nog wel meer dingen die wel erg basis zijn.
Ik heb het tot nu zo gedaan, omdat ik een paar probleempjes mee had omdat het niet werkte, maar zo werkte het wel bij andere documenten.quote:Op maandag 3 oktober 2005 16:11 schreef Lamme_Sterfkanarie het volgende:
[..]
jah duh.. dat weet ik ook wel. Dit was gewoon het eerste ding wat me opviel van $random aantal fouten
wat nog meer dan?
nou.
je database opzet klopt niet. Dit kan in minder queries. Kijk eens naar LEFT JOIN en JOIN in het algemeen.
Lees een dingen over $_POST en $_GET en hoe je moet voorkomen dat mensen sql injections doen omdat je totaal geen waarden controleert. tip: is_numeric()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $query = " SELECT woei FROM table WHERE woei_id= '" . $_GET['iets'] . "' "; mysql_query ( $query ); if ( mysql_errno () > 0 ) { trigger_error ( "MySQL Error!!<br><br>" . mysql_error () . "<br>in query:<br>$query" ); } ?> |
Er is ook niet zoveel dat er kan gebeuren als mensen die waardes gaan veranderen. Of heb jij een ander idee hoe ik het kan doen met een link die zich aanpast aan de URL waar je vandaan komt en dan de output verandert?quote:Op maandag 3 oktober 2005 16:09 schreef Swetsenegger het volgende:
[..]
Eh nee, dat werkt ook niet wanneer PHP tenminste standaard geinstalleerd is en superglobals uit staan.
WHERE topicnummer = '" . $_GET['t'] . "'
werkt wel, maar is 'levens gevaarlijk' aangezien je je userinput totaal niet gecontroleerd heb.
*mompelt iets over subqueries en het DROP-commandoquote:Op maandag 3 oktober 2005 16:21 schreef freiss het volgende:
[..]
Er is ook niet zoveel dat er kan gebeuren als mensen die waardes gaan veranderen. Of heb jij een ander idee hoe ik het kan doen met een link die zich aanpast aan de URL waar je vandaan komt en dan de output verandert?
Overigens geeft die code een foutmelding als ik hem er op zet (en ja, dat van dat woei enz. heb ik weggehaaldquote:Op maandag 3 oktober 2005 16:20 schreef Lamme_Sterfkanarie het volgende:
je kunt je queries beter zo opzetten:
[ code verwijderd ]
Dan zie je direct waar het mis gaat.
1 | pagina.php?t=1; DROP TABLE users |
en dan niet van dat hoort zo, maar een parse error.quote:Op maandag 3 oktober 2005 16:28 schreef freiss het volgende:
[..]
Overigens geeft die code een foutmelding als ik hem er op zet (en ja, dat van dat woei enz. heb ik weggehaald)
oh ok, ik zal het onthouden.quote:Op maandag 3 oktober 2005 16:30 schreef Lamme_Sterfkanarie het volgende:
als jij zomaar de waarde $t accepteert en in je query gebruikt zonder dat je checked of er alleen info in staat die jij wil hebben kan ik iets doen als
[ code verwijderd ]
en weg zou je tabel users zomaar kunnen zijn.
Check daarom of $_GET['t'] een getal is en niets anders. Dit kun je doen met bijvoorbeeld is_numeric()
Vertrouw nooit data ingevoerd door je gebruikers.
hij doet het trouwens nu. dankjequote:Op maandag 3 oktober 2005 16:07 schreef Lamme_Sterfkanarie het volgende:
je kunt niet zomaar $f ofzo in een query gebruiken
WHERE topicnummer = '" . $t . "'
zou wel moeten werken. Maar je mist nog wel meer dingen die wel erg basis zijn.
Als hij het met deze exacte setting doet, kan ik je garanderen dat hij op een andere server, of wanneer je hoster eens gaat updaten, het niet doetquote:Op maandag 3 oktober 2005 16:34 schreef freiss het volgende:
[..]
hij doet het trouwens nu. dankjeIk zal mijn leven beteren
![]()
![]()
ERG onhandig dat je divs gebruikt met een onclick. In firefox zie je niet eens een handje (cursor). Dan moet je op de gok gaan klikken en afwachten of er wat gebeurd.quote:Op maandag 3 oktober 2005 20:25 schreef Chandler het volgende:
Tevens comments op me website (stats.bruggema.nl) wat je er bij zou willen zou leuk zijn(qua stats)
Dat is redelijk eenvoudig op te lossen met style="cursor:pointer;cursor:hand;"quote:Op maandag 3 oktober 2005 20:58 schreef SuperRembo het volgende:
[..]
ERG onhandig dat je divs gebruikt met een onclick. In firefox zie je niet eens een handje (cursor). Dan moet je op de gok gaan klikken en afwachten of er wat gebeurd.
Als je een tekst klikbaar wilt maken... niets.quote:
In IE 7 zie ik ook geen handjequote:Op maandag 3 oktober 2005 22:14 schreef Chandler het volgende:
@SuperRembo: Hmm, je hebt inderdaad gelijk het gaat in FF een beetje raar maar dat zou toch aan een fout in FF moeten liggen want de stylesheet is volgens mij correct.
Ja, dat is een oplossing als je een heel vak klikbaar wil maken in plaats van alleen de tekst.quote:@Swetsenegger: je had een oplossing? maar je laat een block iets zien?
maar verder te vreden?
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 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <style> #menu ul{ margin: 0; padding: 0; } #menu ul li{ list-style-type: none; margin:0; padding: 0; } #menu ul li a{ display: block; width: 200px; background-color: #6d7172; padding: 3px 10px; } #menu ul li a:hover{ background-color: #e8ac6e; } </style> </head><body> <div id="menu"> <ul> <li><a href="#">home</a></li> <li><a href="#">news</a></li> <li><a href="#">about</a></li> </ul> </div> </body> </html> |
poging 2quote:Op maandag 3 oktober 2005 09:37 schreef LeeHarveyOswald het volgende:
Ik kom jullie weer is lastig vallen
Ik wil (dmv een PHP pagina) 2 filmpjes achter elkaar afspelen, de filmpjes hebben geen lengte die vast staat (kan dus vandaag zijn dat filmpje A 20 seconde duurt, en morgen slechts 5 seconde).
Hoe kan ik dit mooi aanpakken? Is het mogelijk om te kijken of filmpje A is afgelopen, of dat ik een soort van playlist kan maken?
Thnx!
Iemand anders, dus iemand op een andere site? Dat gaat niet lukken, of je moet zijn cookie kunnen trashen bijvoorbeeld (daar wordt vaak de session ID in opgeslagen).quote:Op dinsdag 4 oktober 2005 00:41 schreef wonderer het volgende:
Even nieuwsgierig, kan ik iemand anders' zijn session be-eindigen? Of moet ie dan per se een pagina met session destroy laden?
Ik gebruik sessies om de index van een fotogalerie te maken en te houden voor de huidige bezoeker. Werkt allemaal prima, tot de index wordt veranderd door een admin (bijvoorbeeld plaatje weggooien), dan klopt ie niet meer. Dus ik vroeg me af of het mogelijk was om alle sessies te vernietigen. De index wordt dan namelijk automatisch opnieuw gemaakt.quote:Op dinsdag 4 oktober 2005 08:06 schreef Chandler het volgende:
tnx Swetsenegger!!! ik zal eens kijken wat ik er mee kan bereiken.
@Wonderer; je kan idd niet anders iemand zijn sessie be-eindigen. Session destroy of session_unregister... maar waarvoor wil je dit gebruiken, misschien zijn er nog andere mogelijkheden
Ja, laatst gewijzigd kan wel, en dan neem ik ook het moment (datetime) van index maken in de sessie op, en dan vergelijken et voila.quote:Op dinsdag 4 oktober 2005 15:15 schreef Chandler het volgende:
yep, je zou het met bv een bestandje met de datetime (last change) moeten aanmaken en die bij iedere keer checken of ie het zelfde is met diegene die in de sessie vermeld staat != anders doe dan verwijderetc!?
Leuk idee?
1 2 3 4 5 6 7 8 9 | Array ( [0] => 2 [1] => 7 [2] => 8 [3] => 9 [4] => 10 [5] => 11 [6] => 11 ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $values = array(2, 7, 8, 9, 10, 11, 11); $prev; $matchCount = 0; $found = false; for ($i = 0; $i < count($values); $i++) { if ($matchCount == 0) { $prev = $values[$i] == 14 ? 1 : $values[$i]; } else if ($prev + 1 == $values[$i]) { $matchCount++; if ($matchCount == 5) { $found = true; break; } } else { $matchCount = 0; } } |
dat zou wel kunnen maar dan moet je het sessieid in de database moeten stoppen en bij elke hit een lastvisit datum er bij moeten opslaan. Als je dan wat wijzigt kun je heel simpel alle sessies mollen die van voor de wijzigingsdatum zijn. De huidige sessie kun je dan afbreken en een nieuwe starten.quote:Op dinsdag 4 oktober 2005 16:03 schreef wonderer het volgende:
Toch jammer dat je sessies niet op afstand kan weggooien
Hm, goed punt, daar had ik zelf aan moeten denken want zo werkt mijn inlogsysteemquote:Op woensdag 5 oktober 2005 08:37 schreef Lamme_Sterfkanarie het volgende:
[..]
dat zou wel kunnen maar dan moet je het sessieid in de database moeten stoppen en bij elke hit een lastvisit datum er bij moeten opslaan. Als je dan wat wijzigt kun je heel simpel alle sessies mollen die van voor de wijzigingsdatum zijn. De huidige sessie kun je dan afbreken en een nieuwe starten.
1 2 3 | <?php $prev = $values[$i] == 14 ? 1 : $values[$i]; ?> |
1 2 3 4 5 6 7 8 9 10 | <?php if($values[$i] == 14 ) { $prev = 1; } else { $prev =$values[$i]; } ?> |
Aha! Grappig... *gaat dat eens bestuderen*quote:Op woensdag 5 oktober 2005 16:40 schreef Darkomen het volgende:
ze;fde a;s
[ code verwijderd ]
alleen dan korter geschreven
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Horloges Seiko Quartz Kinetic Citizen Staal Double Sieraden Colliers Goud Zilver Armbanden Goud Zilver |
Omdat ik producten ook aan een hoofditem of level 1 item moet kunnen koppelen.quote:Op woensdag 5 oktober 2005 17:20 schreef ikke_ook het volgende:
Waarom niet in 1 tabel waarbij je het parentid meegeeft?
Heb je hier wat aan?quote:Op woensdag 5 oktober 2005 17:24 schreef Schanulleke het volgende:
Het staat ongetwijfeld in een van de eerdere delen, maar ik ben op zoek naar een scriptje (+ een basale uitleg) voor een random usericoon. Voor ik alle delen door ga spitten, weet een van de vaste bezoekers van dit topiek misschien waar ik moet zoeken?
Ja je begrijpt me verkeerd. Je kunt toch alle items in 1 tabel zetten en dan door middel van parentID zijn positie aangeven?quote:Op woensdag 5 oktober 2005 17:30 schreef Swetsenegger het volgende:
[..]
Omdat ik producten ook aan een hoofditem of level 1 item moet kunnen koppelen.
Of begrijp ik je verkeerd?
Haha, neequote:Op woensdag 5 oktober 2005 07:52 schreef SuperRembo het volgende:
Gewoon doorheen loopen. Bijhouden hoeveel je gevonden hebt. Voor 't gemak de vorige kaart onthouden en als 't een aas is omzetten naar 1.
[ code verwijderd ]
Niet getest, en 't kan waarschijnlijk nog wel ietsje simpeler. (Is dit ook zo'n php-golf opdracht?)
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 | ### STRAIGHT ### $straightvalues = array( 1 => array( 2, 3, 4, 5, 14 ), 2 => array( 2, 3, 4, 5, 6 ), 3 => array( 3, 4, 5, 6, 7 ), 4 => array( 4, 5, 6, 7, 8 ), 5 => array( 5, 6, 7, 8, 9 ), 6 => array( 6, 7, 8, 9, 10 ), 7 => array( 7, 8, 9, 10, 11 ), 8 => array( 8, 9, 10, 11, 12 ), 9 => array( 9, 10, 11, 12, 13 ), 10 => array( 10, 11, 12, 13, 14 ), ); $straight = array(); for( $x = 1; $x <= count( $straightvalues ); $x++ ) { $straight[$x] = array(); $curhand = array(); for( $y = 0; $y < $cards; $y++ ) { if( in_array( $waarde[$y], $straightvalues[$x] ) && !in_array( $waarde[$y], $curhand ) ) $straight[$x][] = $waarde[$y]; $curhand[] = $waarde[$y]; } } foreach( $straight AS $var => $val ) { $val = count( $straight[$var] ); if( $val == 5 ) { $curstraight = $var; $combi[STRAIGHT] = true; } } |
Ja dit is inderdaad wat ik bedoel.quote:Op woensdag 5 oktober 2005 18:08 schreef ikke_ook het volgende:
[..]
Ja je begrijpt me verkeerd. Je kunt toch alle items in 1 tabel zetten en dan door middel van parentID zijn positie aangeven?
-edit-
Heb je hier wat aan?Of begrijp ik je "probleem" niet goed?
Leesvoer
Nee de PARENT van een level 2 node kan 2 keer voorkomen (de level 1 node dus), welke op hun beurt weer verschillende parents kunnen hebben (level 0 node).quote:Op woensdag 5 oktober 2005 18:54 schreef ikke_ook het volgende:
maakt toch niet uit dat een level 2 node meerdere keren voorkomt?
Ja het moet sneller kunnen, want feitelijk is het hetzelfde als dit met nog een extra laag (en in 1 tabel ipv twee)quote:Op woensdag 5 oktober 2005 19:14 schreef ikke_ook het volgende:
Nou dat moet ook wel met 7 queries lukken swets. Ik kijk eerst welke items PARENT zijn, dat scheelt mij dus een hoop queries... Maar bij een grote tree wordt het wel snel trager idd.
Ik denk eigenlijk dat het ook wel anders moet kunnen met nog minder queries, als je alles eerst al in een array zet (array is sneller dan querie lijkt me toch?), maar dat is mij niet gelukt.
Mjah, ook hier is je diepte beperkt door het aantal kolommen. Betekent altijd een database aanpassing.quote:Op woensdag 5 oktober 2005 19:19 schreef Nevermind het volgende:
De oplossing van ikke_ook lijkt me een stuk praktischer dan wat jij op dit moment in gedachten hebt, Swets. Stel dat je ooit besluit nog een laag toe te voegen, dus tot 4 lagen diep, dan moet je weer een nieuwe tabel er bij maken, erg onpraktisch.
Zoiets zat ik ook te denken. bij elke node geef ik het volledige path (in id's) naar de uiteindelijke level 0 parent:quote:Als je al je items een parent_id geeft, kun je desnoods het hele menu uit de database trekken en met PHP in elkaar zetten. Dan ben je maar 1 query kwijt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | id1 | level 0 id | level 1 id | naam -----+------------+------------+----- 1 | | | Horloges 2 | | | Sieraden 3 | 1 | | Seiko 4 | 1 | | Citizen 5 | 1 | 4 | Quartz 6 | 1 | 4 | Kinetic 7 | 1 | 5 | Staal 8 | 1 | 5 | Double 9 | 2 | | Colliers 10 | 2 | | Armbanden 11 | 2 | 9 | Goud 12 | 2 | 9 | Zilver 13 | 2 | 10 | Goud 14 | 2 | 10 | Zilver |
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 | © SuperRembo function PrintTree($parentID) { // Get chiled nodes from database $nodes = GetChildNodes($parentID); $n = count($nodes); if ($n>0) { // Print list of child nodes echo '<ul>'; for ($i=0; $i < $n; $i++) { echo '<li>'; echo $nodes[$i]['Name']; PrintTree($nodes[$i]['NodeID']); echo '</li>'; } echo '</ul>'; } } function GetChildNodes($parentID) { $sql = "..."; $result = mysql_query(...); $rows = array(); while (($row = mysql_fetch_assoc($result) !== false) { $rows[] = array( 'NodeID' => ..., 'Name' => ... ) } return $rows; } |
Waar zouden we zijn zonder SuperRemboquote:Op woensdag 5 oktober 2005 19:44 schreef ikke_ook het volgende:
Die van mij is niet beperkt door het aantal kolommen hoorIk heb 1 tabel waar alle(in mijn geval menu-)items in staan. Er staat niet bij welk level ze hebben, puur alleen een verwijzing naar zn parent. Dus mijn manier is op geen manier beperkt.
En zo zou je de hele structuur dan dus kunnen printen:
[ code verwijderd ]
1 2 3 4 5 6 7 | $query = "SELECT * FROM menutable WHERE active = 1 AND parentid = ".$parentID; CREATE TABLE menutable ( mid int(11) NOT NULL auto_increment, name varchar(50) NOT NULL default '', parentid int(11) NOT NULL default '0', ); |
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 | function PrintTree($parentID) { // Get chiled nodes from database $nodes = GetChildNodes($parentID); $n = count($nodes); if ($n>0) { // Print list of child nodes echo '<ul>'; for ($i=0; $i < $n; $i++) { echo '<li>'; echo $nodes[$i]['Name']; PrintTree($nodes[$i]['NodeID']); echo '</li>'; } echo '</ul>'; } } function GetChildNodes($parentID) { $query = "SELECT * FROM menutable WHERE active = 1 AND parentid = ".$parentID; $result = mysql_query($query); $rows = array(); while ($row = mysql_fetch_assoc($result)) { $rows[] = array( 'NodeID' => $row['mid'], 'Name' => $row['name'], ); } return $rows; } |
1 2 3 4 5 6 | <?php //zoiets dus $template = new Template( "templates/index.tpl" ); $template->Assign( "test", "ingevuld" ); $template->PrintTemplate( ); ?> |
1 2 3 4 5 6 | [block=test] Dit is een testblock! [block=genest] genest block met een {replace} er in [/block] [/block] |
Klopt ja, stond ook al in het linkje dat ik gaf dat dat recursieve niet perfect zou zijn.quote:Op woensdag 5 oktober 2005 20:18 schreef SuperRembo het volgende:
Je moet wel een beetje uitkijken met het onderhoud van je groepen. Je moet voorkomen dat je een lus maakt. Bijvoorbeeld groep A heeft subgroep B, groep B heeft subgroep C en C heeft subgroep A.
Bij deze manier van een tree opslaan is het lastig zoeken. je kunt niet met een simpele query alle artikelen selecteren die in groep A en al de onderliggende subgroepen zitten.
Dat probleem heb je niet bij nested sets.
Die nested set stond inderdaad ook in het linkje van ikke_ook.quote:Op woensdag 5 oktober 2005 20:18 schreef SuperRembo het volgende:
Je moet wel een beetje uitkijken met het onderhoud van je groepen. Je moet voorkomen dat je een lus maakt. Bijvoorbeeld groep A heeft subgroep B, groep B heeft subgroep C en C heeft subgroep A.
Bij deze manier van een tree opslaan is het lastig zoeken. je kunt niet met een simpele query alle artikelen selecteren die in groep A en al de onderliggende subgroepen zitten.
Dat probleem heb je niet bij nested sets.
klopt. Het kost een extra update query als je een item insert. Maar het opvragen gaat veel sneller, en dat is wat je veel vaker doet dan een item toevoegen, verplaatsen of verwijderen.quote:Op woensdag 5 oktober 2005 20:34 schreef Swetsenegger het volgende:
[..]
Die nested set stond inderdaad ook in het linkje van ikke_ook.
Maar aangezien de nodes daarbij een links en rechts id hebben, moet je bij elk item wat je toevoegt, alle nodes in je tabel voorzien van nieuwe links rechts id's.... toch?
Ik wilde net editten dat ik het gevonden had in die sitepoint tut.quote:Op woensdag 5 oktober 2005 20:57 schreef SuperRembo het volgende:
[..]
klopt. Het kost een extra update query als je een item insert. Maar het opvragen gaat veel sneller, en dat is wat je veel vaker doet dan een item toevoegen, verplaatsen of verwijderen.
Met nog een paar aanpassingen, en eens goed tellen, ben ik op 59 tekens gekomenquote:Op zondag 2 oktober 2005 22:03 schreef Swetsenegger het volgende:
[..]
OE, samen met ALT 223 kom je dan al op 62 Light
-edit- geeft een parse error
Ok,quote:Op woensdag 5 oktober 2005 21:05 schreef Swetsenegger het volgende:
Hmz, mysql documentation heeft een single querie solution voor de Adjacency List Model (recursieve):
http://dev.mysql.com/tech(...)erarchical-data.html
-edit- nee 1 query per level 0 parent.
1 2 3 4 5 6 7 8 9 10 | menu_id | name | lft | rgt | --------+----------+-----+-----+ 1 | Horloges | 1 | 14 | 2 | Sieraden | 15 | 16 | 3 | Seiko | 8 | 13 | 4 | Citizen | 2 | 7 | 5 | Kinetic | 11 | 12 | 6 | Quartz | 9 | 10 | 7 | Double | 5 | 6 | 8 | Staal | 3 | 4 | |
Stoer! PLaatsen op phpfreakz.quote:Op woensdag 5 oktober 2005 22:55 schreef Light het volgende:
[..]
Met nog een paar aanpassingen, en eens goed tellen, ben ik op 59 tekens gekomen
Daar had ik 'm gisteravond al geplaatstquote:Op donderdag 6 oktober 2005 08:35 schreef Swetsenegger het volgende:
Stoer! PLaatsen op phpfreakz.
Ben benieuwd of jouw methode hetzelfde is als die van SUperRembo
Weekendje weg geweest, maar op vrijdag had ik er een soort van klikbaar management systeem om heen gebouwd welke het mogelijk maakt menu items toe te voegen (verwijderen komt later nog) ( http://test.xploise.nl/nested_test.php )quote:Op donderdag 6 oktober 2005 08:35 schreef Swetsenegger het volgende:
[..]
Ok,
mijn nested hierarchische model draait.
1 2 3 4 5 6 | SELECT node.name, ( COUNT( parent.name ) -1) AS depth FROM nested_menu AS node, nested_menu AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft |
Ik was weer veel te moeilijk aan het denkenquote:Op maandag 10 oktober 2005 13:17 schreef Swetsenegger het volgende:
Iemand enig idee hoe ik deze kan verbouwen zodat dubbele namen geen problemen geven?
1 2 3 4 5 6 | SELECT node.menu_id, node.name, ( COUNT( parent.name ) -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 |
1 2 3 4 5 6 7 | class stat { function statError($msg, $code, $lijn) { die ("Error gevonden op lijn: " . $lijn . " in de volgende code: " . $code . " en gaf de volgende reden: " . $msg); } // meer code hieronder mja ga dat niet allemaal posten hoor hehehehehe |
1 | mysql_query($sql) or statError(mysql_error(), $sql, _LINE_); |
1 2 3 4 5 6 7 8 | if (mysql_query($sql)) { // return true; } else { statError(mysql_error(), $sql, _LINE_); } |
Je bedoelt zoiets alsquote:Op maandag 10 oktober 2005 17:37 schreef Chandler het volgende:
Mensen ik zit met het volgende, ik wil uit een input checken of dit een mogelijke videogrote is, echter weet ik niet welke modusen mogelijk zijn.
bv 1024x800 etc?
ik weet dat ik de texten kan splitten op x ennuh dan de text daarvoor en daarna kan checken op nummeric maaruh dan wil ik graag nog alle modus weten. Is er een lijst en of snelle check of deze modus wel correct is?
1 2 3 4 5 | (+/-) hoofd menu (+/-) test 1 (+/-) test 2 (+/-) sub menu (+/-) |
Mijn lijstje is aardig compleet hoorquote:Op maandag 10 oktober 2005 19:49 schreef Chandler het volgende:
@Swets: Is er zo'n lijst? want deze heb ik helaas niet kunnen vinden
Hmz, dat is ook wel een idee. Alleen zit je dan met een item BOVEN een ander item toevoegen of ONDER een ander item toevoegen.quote:Op maandag 10 oktober 2005 19:55 schreef Chandler het volgende:
@Swets: je manier is idd niet zo simpel te begrijpen, gebruik gewoon + en - etc? om een subitem toe te voegen aan een menu
dus iets van (stel je hebt)
[ code verwijderd ]
etc.. en dan die plus en of min gebruiken om menu's toe tevoegen en of te verwijderen ofzo?!
1 2 3 4 5 6 7 8 | tree treesub1 (add/remove/list) treesub2 (add/remove/list) treesubsub1 (add/remove/list) treesubsub2 (add/remove/list) etc etc etc |
quote:Op maandag 10 oktober 2005 20:10 schreef Chandler het volgende:
wat je kan doen is gewoon voor de 0 tree, een extra button plaatsen en voor de rest gewoon een + en of - (of wat dan ook)..
Ik had vroeger een example die het volgende had
[ code verwijderd ]
en dat werkte best, echter zag dat er weer niet uit
1 2 3 4 5 | tree treesub1 (add/remove/list) treesub2 (add/remove/list) treesubsub1 (add/remove/list) treesubsub2 (add/remove/list) |
Nou, niet veel mensen zullen op dit moment hoger zitten dan 1600*1200quote:Op maandag 10 oktober 2005 20:11 schreef Chandler het volgende:
@Swets; dat lijstje is idd aardig compleet maar er zijn volgens mij nog veel meer modes (1900??) etc?
1 2 3 4 5 6 7 8 | ID:PARENT_ID (sort) 0:0 (0) = tree 1:1 (1) = subtree1 2:1 (2) = subtree2 3:2 (1) = subsubtree1 4:2 (2) = subsubtree2 5:1 (3) = subtree3 |
1 2 | 3:2 (1) = subsubtree1 4:2 (2) = subsubtree2 |
1 2 3 | 3:2 (1) = subsubtree1 5:2 (2) = subsubtree3 4:2 (3) = subsubtree2 |
quote:Op maandag 10 oktober 2005 20:31 schreef Chandler het volgende:
hoe bedoel jij hierarchistische data? heb je een voorbeeld?
1 2 3 4 5 6 7 8 9 10 | menu_id | name | lft | rgt | --------+----------+-----+-----+ 1 | Horloges | 1 | 14 | 2 | Sieraden | 15 | 16 | 3 | Seiko | 8 | 13 | 4 | Citizen | 2 | 7 | 5 | Kinetic | 11 | 12 | 6 | Quartz | 9 | 10 | 7 | Double | 5 | 6 | 8 | Staal | 3 | 4 | |
Left Right?quote:Op maandag 10 oktober 2005 20:40 schreef Chandler het volgende:
lft? en rgt? leg je tabel eens uit?!
Zoals je in die linkjes kunt zien uit mijn vorige post zijn er eigenlijk twee manieren om hierarchische data in een tabel op te slaan:quote:Op maandag 10 oktober 2005 20:59 schreef Chandler het volgende:
o mijn god(beukt ff op zijn hoofd; wakker worden
)
Tja, dat kan inderdaad.quote:Op maandag 10 oktober 2005 21:51 schreef JeRa het volgende:
Jouw 'Adjacency List Model' heb ik gebruikt voor een redelijk uitgebreid web file manager, een systeem waar mensen bestanden kunnen uploaden en downloaden (met nog een hoop operations meer).
Ik heb daarvoor gekozen omdat je dan heel gemakkelijk aan de hand van een id een listing kunt oproepen en je eigenlijk alleen bij het verwijderen van een parent met een laag id en veel children een hoop queries krijgt. Aangezien dat toch bewerkingsqueries zijn maakt mij dat niet zo heel veel uit.
En ik vraag niet in één keer de hele listing ik, ik maak gebruik van Javascript en XML (AJAX) om de children van een parent indien gewenst op te halen
1 2 3 4 5 6 7 8 | With the nested set model, we can retrieve a single path without having multiple self-joins: SELECT parent.name FROM nested_category AS node, nested_category AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.name = 'whatever' ORDER BY node.lft; |
's nachts moet je slapen ipv programmeren man!quote:Op dinsdag 11 oktober 2005 05:05 schreef Chandler het volgende:
ps mijn probleem is reeds gefixt ivm $this-> er voor te zetten.. leuk classes
Nicequote:Op woensdag 12 oktober 2005 09:06 schreef Swetsenegger het volgende:
Fok zoekt devvers: De abonnementen, hoe staat het er mee?
1 2 3 4 5 6 7 8 9 10 11 12 13 | sql = mysql_query("SELECT ip FROM ban")or die(mysql_error()); while ($obj=mysql_fetch_object($sql)) { $ips = $obj->ip; $ip = array($ips); } if( in_array( $_SERVER['REMOTE_ADDR'], $ip ) ) { exit("Je hebt een BAN!"); } |
1 2 3 4 | $result = mysql_query('SELECT `ip` FROM `ban` WHERE `ip` = \'' . $_SERVER['REMOTE_ADDR'] . '\''); if (mysql_num_rows($result) > 0) { exit('Je hebt een BAN!'); } |
Iemand?quote:Op woensdag 12 oktober 2005 13:29 schreef JeRa het volgende:
[..]
Ontopic, even meer aan de theoretische/technische kant. Is het rendabel voor een parser als PHP om stack overflows te voorkomen? Voor zover ik weet crashen alle versies van PHP als je de stack laat vollopen.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php // willekeurig nummer $randnum = rand(1, 5); // Array $tekst[1] = "tekst 1"; $tekst[2] = "tekst 2"; $tekst[3] = "tekst 3"; $tekst[4] = "tekst 4"; $tekst[5] = "tekst 5"; echo "$tekst[$randnum]"; ?> |
1 2 3 4 5 6 | function randExcl($min, $max, $exclude) { $r = rand($min, $max - 1); if ($r >= $exclude) { $r++; } } |
1 2 3 4 5 6 7 8 9 | function randExcl($min, $max, $exclude) { do { $r = rand($min, $max); } while (in_array($r, $exclude)); return $r; } $exclude_getallen = array(2, 4, 5); $waarde = randExcl(1, 10, $exclude_getallen); |
Werken, dat doet hetquote:Op dinsdag 18 oktober 2005 14:15 schreef Siegfried het volgende:
Als dat werkt dan ben ik je heel erg dankbaar!
Het ziet er in elk geval erg logisch uit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php session_start(); function random_maker($min, $max, $exclude) { do { $r = rand($min, $max); } while (in_array($r, $exclude)); return $r; } $random_getal = random_maker(1, 3, $_SESSION['exclude']); echo "Random-nummer: $random_getal"; array_push($_SESSION['exclude'],"$random_getal"); ?> |
1 2 3 | if (!is_array($_SESSION['exclude'])) { $_SESSION['exclude'] = array(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php session_start(); function random_maker($min, $max, $exclude) { do { $r = rand($min, $max); } while (in_array($r, $exclude)); return $r; } if (!is_array($_SESSION['exclude'])) { $_SESSION['exclude'] = array(); } $random_getal = random_maker(1, 3, $_SESSION['exclude']); echo "Random-nummer: $random_getal"; array_push($_SESSION['exclude'],"$random_getal"); ?> |
Je zegt het zelf al bijnaquote:Op dinsdag 18 oktober 2005 18:06 schreef Siegfried het volgende:
Ok, mooi nu werkt ie.. MAAR
Hij belandt in een endless-loop zodra alle nummers ge-exclude zijn.
Weet je misschien een manier om em te laten echoen dat er geen random getal meer weer gegeven kan worden, omdat alle getallen al gebruikt zijn?
1 2 3 | if ($aantalNummers == $aantalNummersGeexclude) { echo 'Help, hij belandt in een endless-loop'; } |
Wat bedoel je precies? Redabel voor wie?quote:
Hmm.. Okquote:Op dinsdag 18 oktober 2005 19:41 schreef SuperRembo het volgende:
[..]
Je zegt het zelf al bijna
[ code verwijderd ]
Even een simpel voorbeeldje; een website staat toe dat users php scripts uploaden en die laten draaien op de server, in een geconditioneerde toestand. Dat wil zeggen, bepaalde acties mogen niet worden uitgevoerd en worden gecontroleerd. Echter kun je door recursiviteit alsnog PHP laten crashen i.p.v. zoiets mooi op te vangen met een (eigen) error. Mijn vraag is, waarom hebben ze dit nooit opgelost?quote:Op dinsdag 18 oktober 2005 19:47 schreef SuperRembo het volgende:
[..]
Wat bedoel je precies? Redabel voor wie?
Ja, count is juist om te tellen hoeveel waardes er in een array zitten.quote:Op dinsdag 18 oktober 2005 19:57 schreef Siegfried het volgende:
[..]
Hmm.. Ok
Maar hoe tel ik hoeveel waardes er in een array zitten?
Kan dit ook gewoon met count?
1 2 3 4 5 | <?php if (count($exclude) == ($max - $min + 1)) { $exclude = array(); // en toen was $exclude weer leeg :) } ?> |
1 2 3 4 5 6 7 8 | if (count($_SESSION['ant_2']) == ($aantal_ant_2) || count($_SESSION['vr_2']) == ($aantal_vr_2)) { echo "Alle antwoorden van $naam_2 zijn op ;)"; } else { Hier staat die code waardoor ie uiteindelijk in de endless-loop belandt. } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function var1 () { $var = "hello world"; } function var2 () { global $var; echo $var; } |
1 2 3 4 5 6 7 8 9 | function who() { return 'Twisted'; } function hello($name) { echo "Hello $name"; } $who = who(); hello($who); |
1 2 3 4 5 6 7 8 9 10 11 12 | $temp_file_name = "/data/home/httpd/html/www/_tmp/".rand()."_".$_FILES[image][name]; if(copy($_FILES['image']['tmp_name'],$temp_file_name)) { $handle = fopen($temp_file_name,'r'); $file_content = fread($handle,filesize($temp_file_name)); fclose($handle); $encoded_image = chunk_split(base64_encode($file_content)); $query ="INSERT INTO `avatars` (`id`, `image`, `type`, `status`, `views`, `weight`) VALUES ('', '".$encoded_image."', '".$_FILES[image][type]."', '".$POST[status]."','0','0')"; $create_row = mysql_query($query) or die(mysql_error()); } |
1 2 3 | header( "Content-type: $row[type]" ); header("Content-disposition:filename=www.borntobewild.nl"); echo base64_decode($row['image']); |
Is het type "blob" niet handiger in dit geval?quote:Op woensdag 19 oktober 2005 22:23 schreef Darkomen het volgende:
het sql veld is van het 'text' type.
Longblob en het uploaden gaat wel goedquote:Op donderdag 20 oktober 2005 08:46 schreef Darkomen het volgende:
Blob is toch maar max 64 kb?
En het origneel is meer dan 100kb maar het opgeslagen gif bestandje is maar 46kb
@jera er zit natuurlijk nog een html formpje bij, maar die maakt verders neit uit.
en andersom neem ik aan.. dus bij input \n -> <br>, en bij inlezen in textarea <br> -> \n?quote:Op donderdag 20 oktober 2005 10:46 schreef Darkomen het volgende:
gewoon de <br>'s door \n laten vervangen?
ik kan natuurlijk in de database laten zien wie er zijn ingelogged,..quote:Er zijn 473 ingelogde gebruikers en 2522 gasten aanwezig
1 2 3 4 5 6 7 8 | if (count($_SESSION['ant_2']) == ($aantal_ant_2) || count($_SESSION['vr_2']) == ($aantal_vr_2)) { echo "Alle antwoorden van $naam_2 zijn op ;)"; } else { Hier staat die code waardoor ie uiteindelijk in de endless-loop belandt. } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php // http://foo.net => [url=http://foo.net]http://foo.net[/url] '#(?<!\[url=)(http://.*?)(?=[.,?:;()<>]*(\s|$))#i' => '[url=\1]\1[/url]', // www.foo.net => [url=www.foo.net]http://www.foo.net[/url] '#(?<!\[url=)(?<!http://)(www\..*?)(?=[.,?:;()<>]*(\s|$))#i' => '[url=http://\1]\1[/url]', // [url=http://foo.net]Foo[/url] => <a href="http://foo.net">Foo</a> '#\[url=(https?://.*?)\](.*?)\[/url\]#i' => '<a href="\1">\2</a>', // [url=foo.net]Foo[/url] => <a href="http://foo.net">Foo</a> '#\[url=(.*?)\](.*?)\[/url\]#i' => '<a href="http://\1">\2</a>', ?> |
1 2 3 4 | <?php '#(?<!\[email=)([^@\s]+@(:?[-a-z0-9]+\.)+[a-z]{2,})#' => '[email=$1]$1[/email]', ?> |
1 | $bericht = eregi_replace("([a-zA-Z0-9_-]+)@([a-zA-Z0-9\._-]+)(\.[a-zA-Z]+)", "<a href=mailto:\\1@\\2\\3>\\1@\\2\\3</a>", $bericht); |
Het van een emailadres een linkje maken is dus wel gelukt. Ik moet alleen voorkomen dat hij van een emailadres waar '[email=' voor staat, ook een emailadres van maaktquote:Op donderdag 20 oktober 2005 15:04 schreef vamos1 het volgende:
[ code verwijderd ]
zo misschien? is alleen geen preg_replace
hij vangt op of er een emailadres gedumpt is en maakt er dan een link van
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 | <?php ob_start(); session_start(); //controleer of de sessie van het inloggen bestaat (in mijn geval is dan de memberid geregistreerd if ( isSet ( $_SESSION['memberid'] ) ) { $iUser_id = $_SESSION['memberid']; } else { $iUser_id = 0; } //als men lid is, moet er dus worden gekeken wie het is,... //ook al wordt onderaan alleen laten zien hoeveel er online zijn, kun je dit nog altijd aanpassen //naar wie er online zijn van de leden,.. verander de tabel naar die van jouw leden... $rQueryUsernameBepalen = mysql_query ( "SELECT id, gbnaam FROM users WHERE id = ".$iUser_id ) or die ( mysql_error() ); $aQueryUsernameBepalen = mysql_fetch_assoc ( $rQueryUsernameBepalen ); $sUsername = $aQueryUsernameBepalen['gbnaam']; /* #### INSTELBARE VARIABELEN #### */ $sIpadres = $_SERVER['REMOTE_ADDR']; $sHuidigePagina = $_SERVER['HTTP_REFERER']; $sTime = time()+1800; // is 3 minuten $sQuerySelectOnline = "SELECT count(*) FROM online WHERE ip = '".$_SERVER['REMOTE_ADDR']."'"; $rQuerySelectOnline = mysql_query ( $sQuerySelectOnline ); $aQuerySelectOnline = mysql_result ( $rQuerySelectOnline,0 ); // wanneer het ipadres er nog niet instaat if ( $aQuerySelectOnline == 0 ) { $rQueryInsert = mysql_query ( "INSERT INTO online ( ip, locatie, tijd, user_id, username ) VALUES ('$sIpadres','$sHuidigePagina','$sTime', '$iUser_id', '$sUsername' ) " ) or die ( mysql_error() ); } else // het ipadres staat er dus wel in { $rQueryUpdate = mysql_query ( "UPDATE online SET locatie='".$_SERVER['HTTP_REFERER']."', tijd = '$sTime', user_id = '$iUser_id', username = '$sUsername' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'" ) or die ( mysql_error()); } $iHuidigeTijd = time(); mysql_query("DELETE FROM online WHERE tijd < $iHuidigeTijd"); $sQueryGastenOnline = "SELECT * FROM online WHERE user_id = 0"; $rQueryGastenOnline = mysql_query ( $sQueryGastenOnline ); $iAantalGastenOnline = mysql_num_rows ( $rQueryGastenOnline ); $sQueryLedenOnline = "SELECT * FROM online WHERE user_id <> 0"; $rQueryLedenOnline = mysql_query ( $sQueryLedenOnline ); $iAantalLedenOnline = mysql_num_rows ( $rQueryLedenOnline ); echo "Gasten: ".$iAantalGastenOnline."<br />"; echo "Leden: ".$iAantalLedenOnline."<br />"; while ( $aQueryLedenOnline = mysql_fetch_assoc ( $rQueryLedenOnline ) ) { echo '<a href=#>'.$aQueryLedenOnline['naam'].'</a>,'; } ?> |
voor een gewone link maak ik gebruik vanquote:Op donderdag 20 oktober 2005 15:15 schreef the_disheaver het volgende:
[..]
Het van een emailadres een linkje maken is dus wel gelukt. Ik moet alleen voorkomen dat hij van een emailadres waar '[email=' voor staat, ook een emailadres van maakt
aanhalingstekens voor _blank?quote:Op donderdag 20 oktober 2005 15:58 schreef vamos1 het volgende:
[..]
voor een gewone link maak ik gebruik van
$bericht = preg_replace("#\[link=\\"(.*?)\\"\](.*?)\[/link\]#si","<a target=_blank href=\"http://\\1\">\\2</a>", $bericht);
misschien dat je dat een beetje kunt ombouwen naar wat je nodig hebt?
ik denk alleen dat daar wat knutselwerk voor nodig is
Omdat dat if statement nooit true isquote:Op donderdag 20 oktober 2005 14:53 schreef Siegfried het volgende:
Jongens ik blijf in de knoop zitten met mijn script..
[ code verwijderd ]
Waarom belandt ie tóch in de endless-loop?
die url-manier is PRECIES hetzelfde als mijn link-manier.......quote:Op donderdag 20 oktober 2005 16:44 schreef the_disheaver het volgende:
Ik zie net dat mijn preg_replace ook voor url niet goed werkt. Als ik dit invoer:
[ url=http://www.nl.nl]http://w ww.nl.nl[/url] (zonder spaites)
krijg ik dit:<a href="http://www.nl.nl"><a href="http://http://www.nl.nl</a>">http://www.nl.nl</a>[/url]
Iemand een goede pagina wat alle reg_expr betekenen? op php.net is het niet erg duidelijk...
mja, ik probeer hem nu zelf aan te passen... hopen dat het nu wel werkt (ik probeer nu items met {/url] eruit te filterenquote:Op donderdag 20 oktober 2005 17:32 schreef vamos1 het volgende:
[..]
die url-manier is PRECIES hetzelfde als mijn link-manier.......
en die werkt wel
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 | <?php if ($_FILES['imagefile']['type'] == "image/jpeg") { copy ($_FILES['imagefile']['tmp_name'], "php_uploads/".$_FILES['imagefile']['name']) or die ("Could not copy"); echo "Copy Done...."; } else { echo "<br><br>"; echo "Could Not Copy, Wrong Filetype (".$_FILES['imagefile']['name'].")<br>"; } //de hele zooi rondmailen //ontvangen $to = "ik@mijzelf.nl"; //onderwerp $subject = "Hoppakee weer een plaatje."; //bericht $message = "Tralala, een plaatje van: ".$_POST["naam"]; //extra zooi $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: Mijn server <huhu@serverbak.nl>\r\n"; //en versturen die hap mail($to, $subject, $message, $headers); ?> |
Ik had hem net zelf gevonden, maar bedanktquote:Op donderdag 20 oktober 2005 20:30 schreef the_disheaver het volgende:
verwijderen:
$afbeeldingsbestand = "images/blaat/blaat.gif";
unlink($afbeeldingsbestand);
nopequote:Op donderdag 20 oktober 2005 20:33 schreef HuHu het volgende:
[..]
Ik had hem net zelf gevonden, maar bedankt
Weet je ook hoe je de afbeelding als bijlage kan mailen
Bedankt, ik zal er eens naar gaan kijken.quote:Op donderdag 20 oktober 2005 20:45 schreef the_disheaver het volgende:
misschien helpt deze usercomment? http://nl2.php.net/manual/en/ref.mail.php#55078
deze is denk ik beter: http://nl2.php.net/manual/en/ref.mail.php#54863
gewoon ff zoeken naar 'attachment' binnen de pagina van mail()
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |