FOK!forum / Digital Corner / [PHP/(My)SQL] voor dummies - Deel 13
Chandlerwoensdag 28 september 2005 @ 20:40

cd niet bijgeleverd

Vorige delen:
[PHP] voor dummies - Deel 1
[PHP] voor dummies - Deel 2
[PHP] voor dummies - Deel 3
[PHP] voor dummies - Deel 4
[PHP] voor dummies - Deel 5
[PHP/(My)SQL] voor dummies - Deel 6
[PHP/(My)SQL] voor dummies - Deel 7
[PHP/(My)SQL] voor dummies - Deel 8
[PHP/(My)SQL] voor dummies - Deel 9
[PHP/(My)SQL] voor dummies - Deel 10
[PHP/(My)SQL] voor dummies - Deel 11
[PHP/(My)SQL] voor dummies - Deel 12

Zie ook:
  • PHP Dataverwerking
  • Officiële PHP website
  • PHP Documentatie
  • MySQL Reference Manual
  • Yet Another PHP Faq

    Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/PHP
  • Swetseneggerwoensdag 28 september 2005 @ 20:42
    Ik heb een tabel catagorieen, waar op dit moment 17 verschillende in staan.
    En ik heb een tabel met items, welke op die catagorieen ingedeeld zijn.

    Tabel catagorie
    1
    2
    3
    4
    5
    6
    |ID|Catagorie| 
    +--+---------+ 
    |1 |Eten     | 
    |2 |Sport    | 
    |3 |Studie   | 
    |4 |etc, etc | 


    Tabel Item
    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   | 

    Nu wil ik op de frontpage de laatste 3 records uit tabel item, per catagorie.

    Het makkelijkst is zoiets als:

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


    Maar dit betekent 18 queries per hit op de frontpage, en dat kan alleen maar meer worden als er meer catagorieen komen.

    Iemand een handigere oplossing?
    Nevermindwoensdag 28 september 2005 @ 20:46
    Volgens mij kun je het in één query doen door een LEFT JOIN te doen op `Catagorie`.

    categorie overigens?
    Swetseneggerwoensdag 28 september 2005 @ 20:48
    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`.
    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:
    categorie overigens?
    stiekem heb ik helemaal geen tabel catagorie of categorie, maar heeft deze een compleet andere naam. Dit was echter makkelijker uitleggen
    Chandlerwoensdag 28 september 2005 @ 20:50
    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
    Swetseneggerwoensdag 28 september 2005 @ 21:49
    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
    Subqueries zijn vanaf mysql 4.1 mogenlijk.
    Op de server draait 4.0.27 ofzo

    Misschien ter verduidelijking, dit wil ik dus: www.marktplaats.nl
    Daar zie je 31 categorieën, met de 5 laatste items. Ik kan me niet voorstellen dat markplaats 32 queries draait op de frontpage, met de hits die zij hebben geeft dat een enorme belasting op je db server denk ik.

    Er zou dus een makkelijkere oplossing moeten zijn, of stel ik me nu gewoon teveel voor van een simpele select query mbt serverload?
    SuperRembowoensdag 28 september 2005 @ 22:14
    Een extra join op products (items bij jou) bevat de producten die boven het product staan (p2.ProductName <= p.ProductName). Dat aantal tel ik, en mag niet groter zijn dan 5.

    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
    Swetseneggerwoensdag 28 september 2005 @ 22:17
    quote:
    Op woensdag 28 september 2005 22:14 schreef SuperRembo het volgende:
    bevat de producten die boven het product staan
    Ik ga 'm zometeen ff uitproberen
    Maar deze zinsnede begrijp ik even niet
    wondererwoensdag 28 september 2005 @ 22:22
    Om even terug te komen op dat watermerk, trim() loste het rare ding op.

    Nu wil ik alleen nog even weten hoe ik met andere lettertypen kan klooien. Kan ik die zelf op de server zetten, of moeten die er al staan, en zo ja, hoe kom ik erachter welke fonts er op de server geinstalleerd zijn?
    Swetseneggerwoensdag 28 september 2005 @ 22:22
    Sterker nog, ik begrijp geen moer van je query
    Even kijken, in ieder geval ga je met tabel aliassen werken. 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

    -Edit-
    WHAAAH! Het werkt!!!
    Ik snap er werkelijk ergnstig weinig van
    Kan je 'm ontleden SR? Ik wil 'm graag ook snappen eigenlijk.

    [ Bericht 22% gewijzigd door Swetsenegger op 28-09-2005 22:31:50 ]
    SuperRembowoensdag 28 september 2005 @ 22:35
    quote:
    Op woensdag 28 september 2005 22:22 schreef Swetsenegger het volgende:
    Sterker nog, ik begrijp geen moer van je query
    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:
    Even kijken, in ieder geval ga je met tabel aliassen werken.
    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:
    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
    Ai, ik hoopte dat dat bij het vereenvoudigde voorbeeld hoorde
    Swetseneggerwoensdag 28 september 2005 @ 22:41
    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
    Ja ik ben al aan het experimenteren, want het gaat niet helemaal goed.
    Hij pakt inderdaad 3 records (waar er tenminste 3 records zijn in de categorie)... maar niet de 3 laatste.

    Het lijkt wel of hij ze willekeurig pakt.
    JeRawoensdag 28 september 2005 @ 22:51
    Overigens zou ik het anders hebben aangepakt en bij het toevoegen van een nieuwe item een extra veld updaten dat van 1 t/m 5 loopt en de positie van dat item in de lijst weergeeft. Bij het toevoegen van een item hoef je alleen dat veld te incrementen indien het lager is dan 6, en kun je in de query sorteren op dat veld (ASC weliswaar) en een WHERE-clause maken met veld < 6 beetje een hack, maar het werkt wel.
    Swetseneggerwoensdag 28 september 2005 @ 22:58
    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 was Dan 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.)

    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


    -edit

    Swets..., de volgende keer ff dieper nadenken

    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


    Bedankt voor het meedenken!
    Chandlerdonderdag 29 september 2005 @ 07:26
    SuperRembo, dat ziet er weer eens super Topf uit man!... wat een knowledge
    SuperRembodonderdag 29 september 2005 @ 07:35
    Nog even ter verduidelijjking. Als je wel subquery's kan gebruiken, dan zou je de query zo schrijven:

    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
    Swetseneggerdonderdag 29 september 2005 @ 09:42
    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
    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.
    Darkomendonderdag 29 september 2005 @ 10:16
    quote:
    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.
    Yups, ik dank ook veel aan hun
    Swetseneggerdonderdag 29 september 2005 @ 11:20
    quote:
    Op donderdag 29 september 2005 10:16 schreef Darkomen het volgende:

    [..]

    Yups, ik dank ook veel aan hun
    Ik zeg, we maken een walk of fame in de OP
    JeRadonderdag 29 september 2005 @ 11:35
    Altijd baas boven baas, he persoonlijk ga ik met PHP-problemen (if any) altijd op Fok! zoeken en problemen in andere talen vuur ik wel op Tweakers af
    Swetseneggerdonderdag 29 september 2005 @ 11:42
    quote:
    Op donderdag 29 september 2005 11:35 schreef JeRa het volgende:
    Altijd baas boven baas, he persoonlijk ga ik met PHP-problemen (if any) altijd op Fok! zoeken en problemen in andere talen vuur ik wel op Tweakers af
    Van de tweakers heb ik ook een aantal keren goede suggesties gehad.

    Alleen zijn ze daar minder geduldig en uitleggerig
    dujourvrijdag 30 september 2005 @ 11:17
    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");
    }
    ?>


    hier roep ik de pagina's mee aan maar als ik nu zeg maar link_edit wil doen komt er ?id=3 achter zeg maar omdat ik die bepaalde link wil wijzigen.
    dus dan wordt de voledige url index.php?id=link_edit?id=3 en dat werkt niet.
    Hoe zou ik dat het beste kunnen oplossen?

    Mijn dank is groot
    Lamme_Sterfkanarievrijdag 30 september 2005 @ 11:31
    index.php?id=link_edit&id=3

    let op de &

    [ Bericht 77% gewijzigd door Lamme_Sterfkanarie op 30-09-2005 11:38:00 ]
    dujourvrijdag 30 september 2005 @ 11:43
    aaah zo thanks man
    Lamme_Sterfkanarievrijdag 30 september 2005 @ 11:55
    ik zou het trouwens zo oplossen:

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


    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.
    dujourvrijdag 30 september 2005 @ 12:08
    thanks ik zal eens gaan proberen
    Swetseneggervrijdag 30 september 2005 @ 12:33
    quote:
    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.
    Of met een switch
    JeRavrijdag 30 september 2005 @ 13:14
    Ik maak meestal gebruik van de methode die Lamme_Sterfkanarie voordraagt, in combinatie met een levenshtein() methode om bij een verkeerde waarde van de pagina-id de dichtstbijzijnde pagina te vinden (ofwel, gmaes wordt games mocht de gebruiker een typfout maken).

    Het nadeel van een switch vind ik dat je dan voor elke pagina een case moet maken, terwijl je het nu gewoon in een array gooit en het werkt. Vroeger gebruikte ik wel een switch om voor het includen van de pagina nog wat checks te doen, maar aangezien die altijd betrekking hebben op de pagina zelf had ik besloten dat ik dat voortaan in de include doe dan ziet het er imo ook wat netter uit.
    Lamme_Sterfkanarievrijdag 30 september 2005 @ 13:16
    daarom gebruik ik de constructie zoals ik hem heb ook altijd. Bij een nieuwe pagina hoef je alleen maar de array te veranderen. Of die nu hardcoded is of dat je die in elkaar draait met informatie uit een database het blijft werken
    dujourvrijdag 30 september 2005 @ 15:45
    ik heb nog een vraagje:

    Ik wil de gegevens wat doormiddel van een formulier ingevoerdt wordt controleren.
    Nu heb ik al wat op internet gezocht en vondt dit
    1if(empty($bericht))

    Is dit een beetje goed of hebben jullie andere suggesties?
    JeRavrijdag 30 september 2005 @ 18:12
    De methode die je kiest om je input te controleren, hangt af van wat je wilt dat er gecontroleerd wordt

    Ik hanteer bij berichten (voor e-mailformulieren) iets als dit:

    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) &lt; 6) {
        ...
    }
    ?>

    Maar zoals ik al zei, het ligt maar net aan wat je wilt controleren
    wonderervrijdag 30 september 2005 @ 18:35
    Ik was dus bezig met een gallery en ik dacht, laat ik een functie maken die in ieder geval de juiste mappen vast aanmaakt, met de juiste rechten, zodat ik alleen de plaatjes nog maar hoef te uploaden. Mja. Als ik dat gewoon via ftp doe, is de user/group mijn gebruikersnaam, maar als ik het via een script doe, wordt dat apache en kan ik er daarna niks meer mee.

    Weet iemand hoe ik dit beter kan aanpakken? Group/user veranderen ofzo?
    JeRavrijdag 30 september 2005 @ 18:40
    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
    Chandlervrijdag 30 september 2005 @ 18:55
    quote:
    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.
    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 niet
    wonderervrijdag 30 september 2005 @ 19:04
    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
    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...
    JeRavrijdag 30 september 2005 @ 19:22
    quote:
    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...
    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 toepassing en niet op de onderliggende directories of bestanden.

    Of je maakt natuurlijk een adminpanel in je gallery
    JeRavrijdag 30 september 2005 @ 19:30
    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 was Dan 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!
    Dat HAVING(COUNT()) gedoe, ik wist niet dat je dat als LIMIT kon gebruiken? of doet het dat niet? het leek mij namelijk dat COUNT(), ook bij een GROUP BY, een soort van constante was?
    wonderervrijdag 30 september 2005 @ 22:04
    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 toepassing en niet op de onderliggende directories of bestanden.

    Of je maakt natuurlijk een adminpanel in je gallery
    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.

    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;
    }
    ?>


    Misschien kan ik hier wat mee?
    JeRavrijdag 30 september 2005 @ 22:33
    Direct onder die regel met 'copy' moet je dit zetten:

    chmod($code . '/thumbnails/first.jpg', 0777);

    En direct onder de regel met 'fclose' dit:

    chmod($file, 0777);

    Ik denk dat je dan een stuk verder komt
    wonderervrijdag 30 september 2005 @ 23:51
    Werkt niet. Ik kan met een gewoon FTP programma niet uploaden. Ik zie ook dat ondanks de rechten die ik tijdens het maken heb toegekend, de werkelijke rechten op drwxr-xr-x liggen... ik mis de w mogelijkheid en die kan ik niet handmatig toevoegen, want ik behoor als ftp user niet tot die groep.

    Hij maakt alles wel netjes aan, maar ik kan er daarna niks meer mee.
    JeRazaterdag 1 oktober 2005 @ 00:01
    Het lijkt alsof Apache een mask heeft gekregen waardoor het geen write rechten kan instellen voor group en others...je zou even kunnen proberen na te vragen aan de beheerder van de server of daar iets aan te doen is, maar anders zul je toch echt een adminpanel moeten maken
    wondererzaterdag 1 oktober 2005 @ 00:23
    Hm, die 0777 weghalen bij mkdir en dan chmod(directory,0777) werkt WEL. Maar toch raar, zo'n omweg
    JeRazaterdag 1 oktober 2005 @ 09:17
    Van deze pagina:
    quote:
    The mode is also modified by the current umask, which you can change using umask().
    Ik gok dat dat niet van toepassing is op chmod()
    BlueCurlzaterdag 1 oktober 2005 @ 09:39
    Ik ben vanaf het begin af aan via een tutorial een upload scriptje aan het maken... Ook al heb ik die site netjes gevolgd... Na de eerste simpele stap wertke het al niet:

    index.php:

    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>


    getfile.php:

    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>


    Wat doe ik nu al fout?
    SuperRembozaterdag 1 oktober 2005 @ 09:47
    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.
    BlueCurlzaterdag 1 oktober 2005 @ 09:49
    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.
    bedankt. dat waren de twee fouten! het werkt nu!
    Swetseneggerzaterdag 1 oktober 2005 @ 17:31
    Voor de echte nerds
    http://www.phpfreakz.nl/forum.php?forum=5&page=1
    Swetseneggerzondag 2 oktober 2005 @ 11:51
    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
    Ik wil deze winnen eigenlijk, dus ik crosspost 'm hier.
    Als we een korte oplossing hebben, post ik het antwoord als het fok-team
    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
    De kortste geldige oplossing staat op dit moment op 66 karakters. Standaard instellingen, dus Notices staan uit, super globals staan uit.

    Loopen gaat niet werken omdat je dan al boven de 20 karakters kwijt ben voor het loopen door je string. Dan hou je dus nog max 46 karakters over voor het overslaan van spaties en het omzetten naar uppper dan wel lowercase.

    Houden we een reguliere expressie over. Daar ga ik nu mee beginnen, na twee dagen met loopen aan het prutsen te zijn geweest. Input is welkom.
    Swetseneggerzondag 2 oktober 2005 @ 12:12
    Ik vond al wat interessants:
    Remember, the only difference in ASCII between an uppercase letter and a lowercase letter is a single bit that is 0 for uppercase and 1 for lowercase. Surely it would be possible to write some code that would simply flip this bit in each character to the value you want:
    - AND with 0 to force uppercase
    - OR with 1 to force lowercase
    - XOR with 1 to invert the case
    - randomly set it to 1 or 0 to set random case.

    deze vond ik erbij, welke uppercase en lowercase omdraait

    1
    2
    3
    <?php
    preg_replace
    ('/[a-z]+/ie', '\'$0\' ^ str_pad(\'\', strlen(\'$0\'), \' \')', $input);
    ?>


    Maar dat moet dus een preg_replace welke AND 0 bij karakter 1, OR 1 bij karakter 2, zo tot het eind van de string. spaties negeren worden

    [ Bericht 25% gewijzigd door Swetsenegger op 02-10-2005 12:33:11 ]
    SuperRembozondag 2 oktober 2005 @ 13:00
    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
    Als je hier nou meteen naar het juiste topic had gelinkt, dan had ik 'm meteen gesnapt.
    Swetseneggerzondag 2 oktober 2005 @ 13:09
    quote:
    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.
    Altijd userinput checken

    Anyway, ik ga even een aantal uurtjes quality time met mijn dochter besteden. Vanavond weer over nadenken.

    [ Bericht 11% gewijzigd door Swetsenegger op 02-10-2005 13:16:17 ]
    SuperRembozondag 2 oktober 2005 @ 13:18
    Ik zit nu op 91 77 68 tekens met een preg_replace, 103102 tekens met een loop.

    Nog een flinke weg te gaan naar de 66 (of minder tekens)
    Ik kom in de buurt van de 66

    [ Bericht 47% gewijzigd door SuperRembo op 02-10-2005 15:36:48 ]
    Swetseneggerzondag 2 oktober 2005 @ 15:31
    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)
    Vanavond weer eens kijken, maar 66 tekens is echt bizar weinig.
    niet vergeten dat je de laatste ?> mag weglaten he
    SuperRembozondag 2 oktober 2005 @ 15:38
    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
    Dan moet er wel weer een ; achter. Dan zit ik nu op 67.
    63!

    Zal dan maar ff reggen op dat forum
    Swetseneggerzondag 2 oktober 2005 @ 15:42
    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
    Dat zal ik maar doen.
    trouwens, je kan 'm mailen naar phpgolf [at] gmail.com
    SuperRembozondag 2 oktober 2005 @ 15:43
    Ik krijg wel 2 + (aantal niet-spaties) notices
    ikke_ookzondag 2 oktober 2005 @ 15:44
    63
    Ik had al wel het vermoeden dat jij in de buurt zou komen van die 66, maar na een middagje die 66 al gepasseerd!
    Swetseneggerzondag 2 oktober 2005 @ 15:46
    quote:
    Op zondag 2 oktober 2005 15:43 schreef SuperRembo het volgende:
    Ik krijg wel 2 + (aantal niet-spaties) notices
    notices staan standaard uit, en is dus geldig
    De huidige nummer 1 heeft 66 met een notice. Als hij 68 karakters gebruikt heeft hij geen notices, maar de 66 karakter optie is gewoon geldig

    Ben wel heeeeeeeeeeeeeeeeel benieuwd hoe je het gedaan hebt

    volgens mij moet ik hier toch 'om de andere' mee kunnen krijgen
    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.
    Maar dat lukt me niet, en deze:
    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.
    Zal toch ook enig lucht moeten geven in het aantal gebruikte karakters.

    Maar die krijg ik OOK al niet aan de praat

    [ Bericht 41% gewijzigd door Swetsenegger op 02-10-2005 15:56:37 ]
    Nevermindzondag 2 oktober 2005 @ 17:24
    Ik schaam me diep, 193 tekens
    Aangezien het geen enkele competitie is zal ik em posten:
    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;


    (minus enters dus)
    Ik zal me beter moeten verdiepen in preg_replaces, anders wordt het echt niks

    -edit- 154
    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;


    [ Bericht 26% gewijzigd door Nevermind op 02-10-2005 17:44:19 ]
    SuperRembozondag 2 oktober 2005 @ 17:54
    In plaats van $c=substr($a,$b,1) zou je $c=$a{$b} kunnen gebruiken.
    En in plaats van if else kan je ook de ? : operator gebruiken.

    Met een (for)loop heb ik 'm in 93 tekens.
    Nevermindzondag 2 oktober 2005 @ 18:14
    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 122 117

    [ Bericht 3% gewijzigd door Nevermind op 02-10-2005 18:32:03 ]
    Swetseneggerzondag 2 oktober 2005 @ 18:18
    quote:
    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
    Ik ben er ook niet goed in, maar je leert er wel een hoop handiheidjes mee
    De verkorte if notatie bijvoorbeeld
    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.

    Die ken/kon ik niet.
    Nevermindzondag 2 oktober 2005 @ 18:19
    quote:
    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
    Inderdaad, bedankt voor de tip trouwens
    Swetseneggerzondag 2 oktober 2005 @ 18:29
    Nevermind, je kan ook een foreach loop gebruiken en alleen de $b++.
    Als je namelijk de eerste keer begint is $b dan NULL en dan begint hij gewoon bij 0, de volgende ronde is hij 1. Dat levert wel een notice op, maar dat is niet fout

    alleen maakt dat weinig uit met betrekking tot karakters
    Swetseneggerzondag 2 oktober 2005 @ 19:12
    $c=chr($c & 0)

    waarom geeft dit altijd een spatie terug?
    JeRazondag 2 oktober 2005 @ 19:18
    Dat hangt maar net van de waarde van $c af
    Nevermindzondag 2 oktober 2005 @ 19:20
    Ik kwam er achter dat je in for-loops ook direct resultaat kan teruggeven, weer wat geleerd. Daarmee kom ik op
    1
    2
    $a=$_POST[string];for($c=0;$c<strlen($a);print($a{$c}!=" "
    ?$c%2==0?strtoupper($a{$c}):strtolower($a{$c}):" "),$c++);


    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.
    Swetseneggerzondag 2 oktober 2005 @ 19:27
    quote:
    Op zondag 2 oktober 2005 19:18 schreef JeRa het volgende:
    Dat hangt maar net van de waarde van $c af
    Ongeacht de waarde van $c geeft hij dus altijd 0 terug (en met chr() dus een spatie)
    Swetseneggerzondag 2 oktober 2005 @ 19:28
    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.
    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
    JeRazondag 2 oktober 2005 @ 19:28
    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)
    Maar je doet '& 0', dus ik mag aannemen dat $c een integer is? Of is het een character?
    SuperRembozondag 2 oktober 2005 @ 19:31
    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.
    Ik wil niet vervelden doen, maar klopt je output wel? Je moet wel rekening houden met de spaties.


    1
    2
    3
    input  = "PHPFreakz heeft een community"
    output = "PhPfReAkZ hEeFt EeN cOmMuNiTy" // Goed
    output = "PhPfReAkZ HeEfT EeN CoMmUnItY" // Fout
    SuperRembozondag 2 oktober 2005 @ 19:32
    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)
    $c & 0 is altijd 0, net als $c and false altijd false is.
    Nevermindzondag 2 oktober 2005 @ 19:32
    Ai, je hebt gelijk SuperRembo. Ik ga er later weer over verder denken
    Swetseneggerzondag 2 oktober 2005 @ 19:33
    quote:
    Op zondag 2 oktober 2005 19:32 schreef SuperRembo het volgende:

    [..]

    $c & 0 is altijd 0, net als $c and false altijd false is.
    hoe moet ik dan AND'ten met 0

    -edit- ik geef het op ook. Mijn laatste werkende code was iets van 139 karakters. Ik ga NOOIT onder die 63 komen
    Lightzondag 2 oktober 2005 @ 19:34
    quote:
    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
    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 bekend

    Overigens ben ik nog niet verder gekomen dan 69 (zonder php sluit tag), of 108 met een loopje
    JeRazondag 2 oktober 2005 @ 19:34
    -edit-
    Lightzondag 2 oktober 2005 @ 19:35
    quote:
    Op zondag 2 oktober 2005 19:33 schreef Swetsenegger het volgende:

    [..]

    hoe moet ik dan AND'ten met 0
    Er zit verschil tussen 'a' & 0 en 'a' & '0'.
    Swetseneggerzondag 2 oktober 2005 @ 19:37
    quote:
    Op zondag 2 oktober 2005 19:35 schreef Light het volgende:

    [..]

    Er zit verschil tussen 'a' & 0 en 'a' & '0'.
    Ja ik vat 'm nu, moet dus $c=$c&' ' zijn.
    -edit- nee dus
    JeRazondag 2 oktober 2005 @ 19:41
    1
    2
    3
    <?php
    $a
    =strtolower($_POST[string]);$a=preg_replace('/\w\s?\w?/e','ucfirst("$0")',$a);
    ?>

    Verder dan dat kom ik op het moment niet. 84 tekens inclusief <? en ?>
    Swetseneggerzondag 2 oktober 2005 @ 19:46
    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 ?>
    Hij doet het niet.
    JeRazondag 2 oktober 2005 @ 19:47
    quote:
    Op zondag 2 oktober 2005 19:46 schreef Swetsenegger het volgende:

    [..]

    Hij doet het niet.
    Wat doet hij niet? Hier draait ie prima?

    edit: met output, zie hieronder.
    JeRazondag 2 oktober 2005 @ 19:49
    1
    2
    3
    <?php
    $a
    =strtolower($_POST[string]);echo preg_replace('/\w\s?\w?/e','ucfirst("$0")',$a);
    ?>

    86 tekens.
    Nevermindzondag 2 oktober 2005 @ 19:51
    quote:
    Op zondag 2 oktober 2005 19:49 schreef JeRa het volgende:

    [ code verwijderd ]

    86 tekens.
    Maak er dan
    1<?=preg_replace('/\w\s?\w?/e','ucfirst("$0")',strtolower($_POST[string]));

    van, heb je 74
    JeRazondag 2 oktober 2005 @ 19:54
    quote:
    Op zondag 2 oktober 2005 19:51 schreef Nevermind het volgende:

    [..]

    Maak er dan
    [ code verwijderd ]

    van, heb je 74
    In mijn afgunst van die constructie was ik 'm gewoon helemaal vergeten nou, nog maar 12 tekens
    Nevermindzondag 2 oktober 2005 @ 19:56
    Kun je niet iets toevoegen aan de pattern zodat ie case insensitive wordt en je het "strtolower"-stukje weg kan laten?
    Swetseneggerzondag 2 oktober 2005 @ 19:57
    ucfirst maakt van het eerste karakter van een string een hoofdletter.
    Ik begrijp je regexp niet
    JeRazondag 2 oktober 2005 @ 19:57
    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?
    Case insensitive maken is makkelijk (i-modifier), maar de bron lowercase maken is een ander verhaal nog niets gevonden tot nu toe.
    Swetseneggerzondag 2 oktober 2005 @ 19:58
    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?
    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?
    JeRazondag 2 oktober 2005 @ 19:59
    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?

    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
    Lightzondag 2 oktober 2005 @ 19:59
    Ik kom niet kleiner dan 67 tekens
    Nevermindzondag 2 oktober 2005 @ 20:01
    quote:
    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?
    Je hebt gelijk, ik zat even mee te denken, maar ik heb veel te weinig ervaring met regexp om iets zinnigs toe te voegen
    Swetseneggerzondag 2 oktober 2005 @ 20:01
    quote:
    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
    Ach fuck, natuurlijk. ? is 0 of 1, dus je $0 wordt letter+letter of letter+spatie+letter, waarbij de eerste van $0 hoofdletter wordt Deze zocht ik al.
    JeRazondag 2 oktober 2005 @ 20:03
    quote:
    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 wordt Deze zocht ik al.
    Maar het is kennelijk niet dé oplossing
    Swetseneggerzondag 2 oktober 2005 @ 20:03
    quote:
    Op zondag 2 oktober 2005 19:59 schreef Light het volgende:
    Ik kom niet kleiner dan 67 tekens
    Post je code, misschien krijgen we er nog 5 vanaf om SuperRembo te verslaan
    SuperRembozondag 2 oktober 2005 @ 20:05
    quote:
    Op zondag 2 oktober 2005 19:59 schreef Light het volgende:
    Ik kom niet kleiner dan 67 tekens
    Die wil ik ook wel zien
    Lightzondag 2 oktober 2005 @ 20:06
    1<?=preg_replace('/\w/e','++$u%2?$0&~" ":$0|" "',$_POST[string]);

    Ik heb er nog 65 van weten te maken
    JeRazondag 2 oktober 2005 @ 20:07
    SuperRembo, klopt het dat jouw code op je site staat?
    SuperRembozondag 2 oktober 2005 @ 20:13
    quote:
    Op zondag 2 oktober 2005 20:07 schreef JeRa het volgende:
    SuperRembo, klopt het dat jouw code op je site staat?
    Hmmm, ja. Heb 'm weer weggehaald. Had niet verwacht dat dat zo snel gevonden zou worden
    JeRazondag 2 oktober 2005 @ 20:13
    quote:
    Op zondag 2 oktober 2005 20:06 schreef Light het volgende:

    [ code verwijderd ]

    Ik heb er nog 65 van weten te maken
    Hele mooie oplossing, maar daar kunnen er nog 3 vanaf *niet zegt waar*
    Swetseneggerzondag 2 oktober 2005 @ 20:21
    quote:
    Op zondag 2 oktober 2005 20:06 schreef Light het volgende:

    [ code verwijderd ]

    Ik heb er nog 65 van weten te maken

    Met uitleg graag

    1'++$u%2?$0&~" ":$0|" "'

    ++$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.

    [ Bericht 36% gewijzigd door Swetsenegger op 02-10-2005 20:27:08 ]
    JeRazondag 2 oktober 2005 @ 20:23
    quote:
    Op zondag 2 oktober 2005 20:21 schreef Swetsenegger het volgende:

    [..]


    Met uitleg graag
    Voor elke character wordt deze code ge-evalled:
    1++$u % 2 ? $0 & ~" " : $0 | " "

    Oftewel, bij de eerste character wordt het uppercase gemaakt ($0 & ~" ") en bij elk tweede character wordt het lowercase gemaakt ($0 | " "). Dit omdat $u 1, 2, 3, 4 is en dat met %2 1, 0, 1, 0 oplevert
    JeRazondag 2 oktober 2005 @ 20:28
    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.
    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
    Swetseneggerzondag 2 oktober 2005 @ 20:30
    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
    wat de neuk is ++$u?
    SuperRembozondag 2 oktober 2005 @ 20:30
    Thx Light (en JeRa). Ik heb 'm nu in 61 tekens
    JeRazondag 2 oktober 2005 @ 20:31
    quote:
    Op zondag 2 oktober 2005 20:30 schreef Swetsenegger het volgende:

    [..]

    wat de neuk is ++$u?
    $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
    Swetseneggerzondag 2 oktober 2005 @ 20:33
    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
    Ja ik begrijp ++ ervoor en erachter wel.
    Maar waar komt $u vandaan
    JeRazondag 2 oktober 2005 @ 20:34
    quote:
    Op zondag 2 oktober 2005 20:33 schreef Swetsenegger het volgende:

    [..]

    Ja ik begrijp ++ ervoor en erachter wel.
    Maar waar komt $u vandaan
    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
    Swetseneggerzondag 2 oktober 2005 @ 20:38
    quote:
    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
    Ik begreep het toen ik 'm overlas
    Ok, dus voor elk woord karakter, ga je bij u 1 optellen en modulessen. 1%2=1, 2%2=0, 3%2=1

    Dat snap ik.
    dus bij karakter 1 (1 wordt gezien als false denk ik) krijg je dus het tweede statement van de if $0 | " "

    or met spatie. Maar eerder vandaag vond ik 'OR with 1 to force lowercase'

    Dus dat begrijp ik niet
    JeRazondag 2 oktober 2005 @ 20:44
    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
    Swetseneggerzondag 2 oktober 2005 @ 21:00
    quote:
    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
    Dit is een A: 10000001
    Dit is een a: 11000001

    dus A | 01000000 = a toch?
    01000000 = @

    ik ben confused

    -edit- nevermind, die calculator zet de 8ste bit er niet voor als hij 0 is

    Dit is een A: 01000001
    Dit is een a: 01100001

    dus A | 00100000 = a

    [ Bericht 9% gewijzigd door Swetsenegger op 02-10-2005 21:06:39 ]
    Lightzondag 2 oktober 2005 @ 21:06
    A is 65 = 1000001
    a is 97 = 1100001
    Verschil is dus 100000 = 32 = spatie

    @ = 64, dus ik denk dat je ergens een 0 bijgezet hebt.
    Lightzondag 2 oktober 2005 @ 21:13
    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*
    Ik ben toch wel benieuwd waar er dan nog 3 weg zouden kunnen.
    Swetseneggerzondag 2 oktober 2005 @ 21:16
    quote:
    Op zondag 2 oktober 2005 21:13 schreef Light het volgende:

    [..]

    Ik ben toch wel benieuwd waar er dan nog 3 weg zouden kunnen.
    Sterker nog
    SR zegt op phpfreakz 'm in 59 te hebben
    JeRazondag 2 oktober 2005 @ 21:18
    quote:
    Op zondag 2 oktober 2005 21:16 schreef Swetsenegger het volgende:

    [..]

    Sterker nog
    SR zegt op phpfreakz 'm in 59 te hebben
    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').
    Swetseneggerzondag 2 oktober 2005 @ 21:30
    quote:
    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').
    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
    JeRazondag 2 oktober 2005 @ 21:32
    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
    XOR'en gaat niet werken omdat je dan áltijd de character van case verandert, ongeacht wat het ervoor was
    Swetseneggerzondag 2 oktober 2005 @ 21:34
    quote:
    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
    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 mee

    En dat alles voor 1 karakter winst, waarmee we nog 5 karakters boven SR's oplossing zitten
    Lightzondag 2 oktober 2005 @ 21:51
    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
    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.
    Nevermindzondag 2 oktober 2005 @ 21:58
    was next($_POST) al aangedragen als alternatief voor $_POST[string]? Weer twee winst
    Swetseneggerzondag 2 oktober 2005 @ 22:03
    quote:
    Op zondag 2 oktober 2005 21:58 schreef Nevermind het volgende:
    was next($_POST) al aangedragen als alternatief voor $_POST[string]? Weer twee winst
    OE, samen met ALT 223 kom je dan al op 62 Light
    -edit- geeft een parse error

    [ Bericht 5% gewijzigd door Swetsenegger op 02-10-2005 22:13:15 ]
    Lightzondag 2 oktober 2005 @ 22:18
    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
    Dan moeten er nog 3 af, ergens.
    Chandlerzondag 2 oktober 2005 @ 22:29
    Mensen ik zit met het volgende, ik wil mijn statistics website gaan ombouwen.. of eingelijk ben ik daar reeds mee bezig geweest maar nu wil ik ook eens weten of dat de huidige manier van data opslaan wel op de goede manier doe. Misschien dat er zaken beter kunnen zodat ik snelheid etc kan verbeteren.

    Ik heb op dit moment 16 tabellen.

    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)


    nu heb ik hier eventjes een dumpje gemaakt van de tabellen. En graag zou ik horen of dit beter / efficienter kan... alvast bedankt voor het nemen van je tijd

    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;


    tevens heb ik de op elkaar lijkende tabellen eventjes bij elkaar gezet.

    Alvast tnx..
    Nevermindzondag 2 oktober 2005 @ 22:29
    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
    Welk gedeelte? next($_POST) heb ik getest en werkt.

    -edit-
    Misschien kan dit beter gesplitst worden tot nieuw topic. Alle ranzige code is niet echt het goede voorbeeld
    Swetseneggerzondag 2 oktober 2005 @ 22:45
    @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.

    @Chandler.
    16 tabellen voor statistieken Ik 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.
    Nevermindzondag 2 oktober 2005 @ 22:48
    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.
    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.
    Beetje vreemd dat het niet werkt, ik denk dat je dan toch een 'spelfout' ergens hebt.

    -edit-
    Testvoorbeeldje camel.php
    1<?=preg_replace('/\w\s?\w?/e','ucfirst("$0")',strtolower(next($_POST)));

    (dit is dus niet mijn code, maar dat lijkt me duidelijk)
    Lightzondag 2 oktober 2005 @ 23:04
    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.
    Die next($_POST) werkt hier wel goed
    quote:
    @Chandler.
    16 tabellen voor statistieken Ik 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.
    Dan zijn goede indexen zeker van belang. De forumreactiestabel zal wel het predikaat "groot" meekrijgen, maar lijkt me toch nog redelijk snel
    SuperRembomaandag 3 oktober 2005 @ 07:45
    @Chandler

    Waarom maak je niet een tabel als deze:

    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;


    Dat scheelt zo een tabel of 8.
    Chandlermaandag 3 oktober 2005 @ 09:28
    @swetsenegger; je hebt gelijk denk ik. maar ik dacht dat kleine tabelletjes altijd sneller waren stupid me hehe

    @SuperRembo; dat zou kunnen idd, zo'n tabel... ennuh propertyid zou je dan gebruiken voor een id voor referer, color, etc? neem ik aan.
    LeeHarveyOswaldmaandag 3 oktober 2005 @ 09:37
    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!
    Chandlermaandag 3 oktober 2005 @ 09:53
    @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
    LeeHarveyOswaldmaandag 3 oktober 2005 @ 10:20
    quote:
    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
    Tijdsduur filmpjes is variabel
    Chandlermaandag 3 oktober 2005 @ 10:35
    kan je toch ook in de database zetten? dan geef je die ook als variabel mee..!!
    LeeHarveyOswaldmaandag 3 oktober 2005 @ 10:37
    quote:
    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..!!
    Zodat een redacteur eerst moet kijken hoelang zijn / haar filmpje is, en dat nog is extra in moet voeren
    Darkomenmaandag 3 oktober 2005 @ 11:45
    PHPGOLF:

    Heel cool, ik vraag me af wat het winnende script is, en euhm ik ga het niet eens proberen
    freissmaandag 3 oktober 2005 @ 16:01
    Pff.. ik heb weer eens een probleempje met PHP, maar nu kom ik er niet echt uit.
    Ik heb de volgende code:
    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> 

    Het is de bedoeling dat hij met een url van "blabla/topic.php?f=1&t=1" wordt bereikt. Als ik dit nu doe krijg ik gewoon helemaal niets te zien onder de links van Index >> enz. Waaraan zou dit kunnen liggen?
    Lamme_Sterfkanariemaandag 3 oktober 2005 @ 16:07
    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.
    Swetseneggermaandag 3 oktober 2005 @ 16:09
    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.
    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.
    Lamme_Sterfkanariemaandag 3 oktober 2005 @ 16:11
    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.
    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()
    freissmaandag 3 oktober 2005 @ 16:17
    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.
    nou, bij een ander document doet hij het wel met forum_$f oid.
    freissmaandag 3 oktober 2005 @ 16:18
    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()
    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.
    Lamme_Sterfkanariemaandag 3 oktober 2005 @ 16:20
    je kunt je queries beter zo opzetten:
    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 () &gt; 0 ) {
       
    trigger_error ( "MySQL Error!!<br><br>" . mysql_error () . "<br>in query:<br>$query" );
    }
    ?>

    Dan zie je direct waar het mis gaat.
    freissmaandag 3 oktober 2005 @ 16:21
    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.
    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?
    JeRamaandag 3 oktober 2005 @ 16:28
    quote:
    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?
    *mompelt iets over subqueries en het DROP-commando
    freissmaandag 3 oktober 2005 @ 16:28
    quote:
    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.
    Overigens geeft die code een foutmelding als ik hem er op zet (en ja, dat van dat woei enz. heb ik weggehaald )
    Lamme_Sterfkanariemaandag 3 oktober 2005 @ 16:30
    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
    1pagina.php?t=1; DROP TABLE users 

    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.
    freissmaandag 3 oktober 2005 @ 16:30
    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 )
    en dan niet van dat hoort zo, maar een parse error.
    freissmaandag 3 oktober 2005 @ 16:31
    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.
    oh ok, ik zal het onthouden.
    freissmaandag 3 oktober 2005 @ 16:34
    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.
    hij doet het trouwens nu. dankje Ik zal mijn leven beteren
    Swetseneggermaandag 3 oktober 2005 @ 18:38
    quote:
    Op maandag 3 oktober 2005 16:34 schreef freiss het volgende:

    [..]

    hij doet het trouwens nu. dankje Ik zal mijn leven beteren
    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 doet
    ikke_ookmaandag 3 oktober 2005 @ 18:45
    En afgezien van het feit dat het dan niet meer werkt... het is ook nog eens niet goed. Want een integer in een query hoort niet tussen ' ' ... (Ik ga er ff van uit dat je topicnummer numeriek is )
    Swetseneggermaandag 3 oktober 2005 @ 19:14
    quote:
    Op zondag 2 oktober 2005 23:04 schreef Light het volgende:

    [..]

    Die next($_POST) werkt hier wel goed
    [code]
    -edit- Of je let even op de highlighting van je )'s
    Chandlermaandag 3 oktober 2005 @ 20:25
    Mensen ik heb jullie idee m.b.t mijn tabellen omgegooid eennuh het werkt, of het nu sneller gaat weet ik niet maaruh het ziet er naar uit of het goed werkt. Was me wel een pokke werk maar hielp me weer goed mee met m'n whatpulse statistieken hehehehe... Als jullie nog meer ideeen en tips hebben hoor ik het graag.

    Tevens comments op me website (stats.bruggema.nl) wat je er bij zou willen zou leuk zijn (qua stats)
    SuperRembomaandag 3 oktober 2005 @ 20:58
    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)
    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.
    Swetseneggermaandag 3 oktober 2005 @ 21:11
    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.
    Dat is redelijk eenvoudig op te lossen met style="cursor:pointer;cursor:hand;"
    JeRamaandag 3 oktober 2005 @ 21:29
    Wat is er mis met een <a>?
    Swetseneggermaandag 3 oktober 2005 @ 21:38
    quote:
    Op maandag 3 oktober 2005 21:29 schreef JeRa het volgende:
    Wat is er mis met een <a>?
    Als je een tekst klikbaar wilt maken... niets.
    Wil je een volledig blok klikbaar maken is het wel handig om een onclick te gebruiken.
    Hoewel ik pas geleden ergens een betere oplossing tegenkwam, ff zoeken.

    -edit-

    <a style="display:block"> dus.
    Die kan je gewoon met hover stijlen en dan heb je geen js nodig

    [ Bericht 11% gewijzigd door Swetsenegger op 03-10-2005 21:53:34 ]
    Chandlermaandag 3 oktober 2005 @ 22:14
    @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.

    @Swetsenegger: je had een oplossing? maar je laat een block iets zien?

    maar verder te vreden?
    Swetseneggermaandag 3 oktober 2005 @ 22:17
    quote:
    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.
    In IE 7 zie ik ook geen handje
    quote:
    @Swetsenegger: je had een oplossing? maar je laat een block iets zien?

    maar verder te vreden?
    Ja, dat is een oplossing als je een heel vak klikbaar wil maken in plaats van alleen de tekst.
    Je kan dat doen door een div een onclick te geven, maar dan heb je javascript nodig voor de href, je kan ook een <a> een display block geven en dan kan je ook dat hele blok klikbaar maken.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    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>


    Dit was niet direkt op jou van toepassing, maar als klikbaar maken van blokken discussie
    JeRamaandag 3 oktober 2005 @ 22:34
    Juist bijna elk zichtbaar element kun je als block element beschouwen, echter worden vaak DIV of SPAN als vertegenwoordigers van het block element gezien. Dit is natuurlijk niet het geval en dien je de tag te gebruiken die dient voor links: a
    LeeHarveyOswaldmaandag 3 oktober 2005 @ 23:13
    quote:
    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!
    poging 2
    wondererdinsdag 4 oktober 2005 @ 00:41
    Even nieuwsgierig, kan ik iemand anders' zijn session be-eindigen? Of moet ie dan per se een pagina met session destroy laden?
    Chandlerdinsdag 4 oktober 2005 @ 08:06
    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
    JeRadinsdag 4 oktober 2005 @ 10:52
    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?
    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).
    wondererdinsdag 4 oktober 2005 @ 13:01
    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
    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.

    Het komt niet heel vaak voor dat het moet, dus het is geen ramp, maar ik vroeg me toch af of het kon. Met dit soort projectjes leer je toch het meest
    Lamme_Sterfkanariedinsdag 4 oktober 2005 @ 13:08
    dan moet je zorgen dat je script doorheeft dat de index gewijzigd is en dan de sessie voor de gebruiker weer aanpast naar de huidige situatie ljikt me
    Chandlerdinsdag 4 oktober 2005 @ 15:15
    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 verwijder etc!?

    Leuk idee?
    wondererdinsdag 4 oktober 2005 @ 16:03
    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 verwijder etc!?

    Leuk idee?
    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.

    Toch jammer dat je sessies niet op afstand kan weggooien
    Nevermindwoensdag 5 oktober 2005 @ 03:49
    Ik heb een lijst met zeven willekeurige getallen tussen de 2 en 14 in de array $waarde, die met de functie sort() van laag naar hoog gezet worden. Er kunnen dubbele getallen in de array zitten. Ik wil nu weten of er een rijtje in de array zit van vijf elkaar opvolgende cijfers. Om het nog moeilijker te maken is er één aparte rij, namelijk 14, 2, 3, 4, 5 (op die volgorde), wat ook als rijtje telt.

    Stel, de array is
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Array (
      [0] => 2
      [1] => 7
      [2] => 8
      [3] => 9
      [4] => 10
      [5] => 11
      [6] => 11
     )


    Hoe kan ik dan ontdekken of er een rijtje in zit?

    voor de duidelijkheid, het gaat om een straat bij het pokeren, de getallen 2 t/m 10 zijn normale spelkaarten, 11 = jack, 12 = queen, 13 = king, 14 = ace
    SuperRembowoensdag 5 oktober 2005 @ 07:52
    Gewoon doorheen loopen. Bijhouden hoeveel je gevonden hebt. Voor 't gemak de vorige kaart onthouden en als 't een aas is omzetten naar 1.

    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;
       }
    }


    Niet getest, en 't kan waarschijnlijk nog wel ietsje simpeler. (Is dit ook zo'n php-golf opdracht? )

    [ Bericht 0% gewijzigd door SuperRembo op 05-10-2005 18:32:13 ]
    Lamme_Sterfkanariewoensdag 5 oktober 2005 @ 08:37
    quote:
    Op dinsdag 4 oktober 2005 16:03 schreef wonderer het volgende:
    Toch jammer dat je sessies niet op afstand kan weggooien
    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.
    wondererwoensdag 5 oktober 2005 @ 15:21
    quote:
    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.
    Hm, goed punt, daar had ik zelf aan moeten denken want zo werkt mijn inlogsysteem
    Punt is alleen dat ik geen database gebruik. Maar mocht het echt nodig zijn, kan ik het ook nog wel in een tekstbestand opslaan.

    Ik pak de last change datum er wel bij.

    Bedankt voor de hulp!
    wondererwoensdag 5 oktober 2005 @ 15:27
    Kan iemand me uitleggen wat
    1
    2
    3
    <?php
    $prev
    = $values[$i] == 14 ? 1 : $values[$i];
    ?>

    doet?

    (uit het script van SuperRembo hierboven)
    Darkomenwoensdag 5 oktober 2005 @ 16:40
    ze;fde a;s
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if($values[$i] == 14 )
    {
    $prev = 1;
    }
    else
    {
     $prev =$values[$i];
    }
    ?>


    alleen dan korter geschreven
    wondererwoensdag 5 oktober 2005 @ 16:47
    quote:
    Op woensdag 5 oktober 2005 16:40 schreef Darkomen het volgende:
    ze;fde a;s
    [ code verwijderd ]

    alleen dan korter geschreven
    Aha! Grappig... *gaat dat eens bestuderen*
    Swetseneggerwoensdag 5 oktober 2005 @ 17:12
    Heren,

    Ik ben bezig met een webstore, waarbij ook het menu volledig flexibel is tot 2 levels diep.

    De klant kan dus zelf een nieuwe product groep aanmaken. Die produktgroep eventueel ondervedelen in subgroepen en die subgroepen nogmaals onderverdelen in subgroepen. Vervolgens kan je produkten koppelen aan een groep, subgroep of sub-subgroep als je begrijpt wat ik bedoel.

    Het databasemodel lijkt me redelijk van belang

    Het menu zou er dus als volgt uit kunnen komen te zien:

    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


    Ik zat hierbij ook te denken aan 3 tabellen voor het menu
    Hoofditems
    id naam

    Level 1
    id h_id naam

    Level 2
    id L1_id L1_h_id naam

    produkten worden dan zoiets
    id h_id L1_id L2_id naam

    In het voorbeeld wordt de url van horloges/citizen/staal dan products.php?h_id=1&l1_id=2&l2_id=1
    De query SELECT * FROM products WHERE h_id=".$_GET['h_id']." && L1_id=".$_GET['L1_id']." && L2_id=".$_GET['L2_id']."

    Dit lijkt me goed werkbaar of zie ik iets over het hoofd?
    ikke_ookwoensdag 5 oktober 2005 @ 17:20
    Waarom niet in 1 tabel waarbij je het parentid meegeeft?
    Schanullekewoensdag 5 oktober 2005 @ 17:24
    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?
    Swetseneggerwoensdag 5 oktober 2005 @ 17:30
    quote:
    Op woensdag 5 oktober 2005 17:20 schreef ikke_ook het volgende:
    Waarom niet in 1 tabel waarbij je het parentid meegeeft?
    Omdat ik producten ook aan een hoofditem of level 1 item moet kunnen koppelen.
    Of begrijp ik je verkeerd?
    Swetseneggerwoensdag 5 oktober 2005 @ 17:32
    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?
    Heb je hier wat aan?
    http://www.phpfreakz.nl/library.php?sid=4194
    Schanullekewoensdag 5 oktober 2005 @ 17:39
    Dat moet me inderdaad wel redelijk verder helpen. Ga ik even mee stoeien.
    Bedankt Swets!
    ikke_ookwoensdag 5 oktober 2005 @ 18:08
    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?
    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
    Nevermindwoensdag 5 oktober 2005 @ 18:20
    quote:
    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? )
    Haha, nee Ik ben een pokersysteem aan het schrijven en wil het testen door een groot aantal pokerspellen te simuleren in php. Ik ga het even testen, maar het is nu al een stuk korter dan mijn versie:

    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;
                }
             }
    Swetseneggerwoensdag 5 oktober 2005 @ 18:35
    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
    Ja dit is inderdaad wat ik bedoel.
    Het nadeel van methode 1 is dat deze traag is,
    Methode twee vind ik redelijk onoverzichtelijk eigenlijk.

    In mijn methode kan ik 1 query met joins de volledige tree krijgen.

    -edit- en in mijn situatie kan een parent van een level 2 node eventueel meerdere keren voorkomen.

    Maar ik moet het artikel nog even goed doorlezen.
    Bedankt in ieder geval!

    -edit- Methode twee werkt alleen met een vast aantal hierarchische gegevens.

    [ Bericht 5% gewijzigd door Swetsenegger op 05-10-2005 18:47:01 ]
    ikke_ookwoensdag 5 oktober 2005 @ 18:54
    maakt toch niet uit dat een level 2 node meerdere keren voorkomt?

    ik heb hier een menu gebruikt die helemaal recursief uit 1 tabel wordt gehaald puur op basis van parentid. dus volgens mij moet jouw probleem ook zo opgelost kunnen worden
    Swetseneggerwoensdag 5 oktober 2005 @ 19:08
    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?
    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).
    Hmz, als ik met id's werk moet dat ook kunnen.

    Moet ik na gaan denken hoe ik produkten koppel aan een level

    Wat denken andere mensen? de 3 tabellen methode, waarmee je dus met left joins alles uit de tabel kan trekken en heel simpel op elk nivo produkten kan koppeln. Nadeel, 3 tabellen joins etc.

    De recursieve 1 tabel oplossing. Overzichtelijk, moet alleen nog bedenken hoe ik produkten koppel op de verschillende levels. Wel traag, want voor elke node in het menu heb je een query nodig.

    Voor het simpele voorbeeld menuutje wat ik gaf heb je dus al 14 queries nodig bij elke hit.
    ikke_ookwoensdag 5 oktober 2005 @ 19:14
    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.
    Nevermindwoensdag 5 oktober 2005 @ 19:19
    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.

    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.
    Swetseneggerwoensdag 5 oktober 2005 @ 19:24
    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.
    Ja het moet sneller kunnen, want feitelijk is het hetzelfde als dit met nog een extra laag (en in 1 tabel ipv twee)
    Swetseneggerwoensdag 5 oktober 2005 @ 19:36
    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.
    Mjah, ook hier is je diepte beperkt door het aantal kolommen. Betekent altijd een database aanpassing.
    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.
    Zoiets zat ik ook te denken. bij elke node geef ik het volledige path (in id's) naar de uiteindelijke level 0 parent:

    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

    Dit is wel in php in elkaar te sleutelen, hoewel het makkelijker zou zijn wanneer het voorgesorteerd uit mysql komt rollen
    ikke_ookwoensdag 5 oktober 2005 @ 19:44
    Die van mij is niet beperkt door het aantal kolommen hoor Ik 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:

    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;
    }
    Swetseneggerwoensdag 5 oktober 2005 @ 19:52
    quote:
    Op woensdag 5 oktober 2005 19:44 schreef ikke_ook het volgende:
    Die van mij is niet beperkt door het aantal kolommen hoor Ik 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 ]
    Waar zouden we zijn zonder SuperRembo
    Kan je hier je tabel structuur en querieseven bij geven.
    Want deze functie is anders dan die van die sitepoint link welke je me gaf
    ikke_ookwoensdag 5 oktober 2005 @ 19:59
    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',
    );

    zoiets

    en dan

    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;
    }

    En dan zat er ergens nog een klein foutje in geloof ik,maar die kom je vanzelf wel tegen

    [ Bericht 33% gewijzigd door ikke_ook op 05-10-2005 20:23:28 ]
    Lamme_Sterfkanariewoensdag 5 oktober 2005 @ 20:06
    Ik probeer m'n eigen template class te schrijven maar ik loop tegen een probleem aan dat ik nog niet kan oplossen.

    ben nu al zover dat ik een template kan starten en een simpele waarde kan toewijzen.
    1
    2
    3
    4
    5
    6
    <?php
    //zoiets dus
    $template = new Template( "templates/index.tpl" );
    $template-&gt;Assign( "test", "ingevuld" );
    $template-&gt;PrintTemplate( );
    ?>


    maar wat ik graag wil is simpele blokken in m'n tpl file die meerdere keren gebruikt kunnen worden. maximaal 2x genest is genoeg voor wat ik wil
    1
    2
    3
    4
    5
    6
    [block=test]
    Dit is een testblock!
      [block=genest]
       genest block met een {replace} er in
      [/block]
    [/block]

    iets in die geest dus
    maar hoe krijg ik dat voor elkaar? Heb al wat code online bekeken maar andersmans code snappen is niet m'n beste kant.
    Ik weet dat ik het wiel opnieuw uitvind en dat het trager wordt op deze manier en php is al een template parser en bla bla bla dus bespaar me dat geneuzel (roonaan)
    Wie heeft zoiets al eens gebouwd en kan me globaal vertellen welke stappen ik moet maken?
    SuperRembowoensdag 5 oktober 2005 @ 20:18
    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.
    ikke_ookwoensdag 5 oktober 2005 @ 20:25
    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 ja, stond ook al in het linkje dat ik gaf dat dat recursieve niet perfect zou zijn.
    Swetseneggerwoensdag 5 oktober 2005 @ 20:34
    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.
    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?
    SuperRembowoensdag 5 oktober 2005 @ 20:57
    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?
    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.
    Swetseneggerwoensdag 5 oktober 2005 @ 21:02
    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.
    Ik wilde net editten dat ik het gevonden had in die sitepoint tut.
    Ik kan natuurlijk gewoon blind die functies copy pasten, maar ik wil gewoon goed begrijpen hoe het werkt. Jammer dat er geen goede nederlands tut is.

    Ik ga voor die nested versie, want ik ben bang dat de recursive versie bij een beetje veel verkeer nogal gaat vertragen.

    Bedankt weer allemaal.
    Swetseneggerwoensdag 5 oktober 2005 @ 21:05
    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.
    Lightwoensdag 5 oktober 2005 @ 22:55
    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
    Met nog een paar aanpassingen, en eens goed tellen, ben ik op 59 tekens gekomen
    Swetseneggerdonderdag 6 oktober 2005 @ 08:35
    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.
    Ok,

    mijn nested hierarchische model draait.
    Ik kan hoofditems aanmaken, en subitems in de hoofditems, en subitems in de subitems, etc. (Dit is nog tricky, subitems aanmaken scheelt namelijk 1 punt verschuiven. Doe je dat niet, maak je alleen maar hoofditems aan, waarbij alleen de volgorde veranderd )

    Ik heb twee invoervelden:
    'hoofditem' welke feitelijk een nieuw tree aanmaakt.
    'subitem' welke een subitem in een hoofditem aanmaakt OF in een subitem, afhankelijk van welk item je selecteert.

    Eigenlijk moet ik dus voor elk level een aparte dropdown krijgen, waardoor je het overzicht hou. Maar ik weet even nog niet hoe ik hier de verschillende levels uit moet vissen. Het diepste level is simpel, want daar is rgt gelijk aan lft+1.

    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   | 

    (horloges en sieraden zijn dus trees, waarbij sieraden nog geen subitems heeft)

    En dan heb ik nog niet eens nagedacht over items verwijderen
    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
    Stoer! PLaatsen op phpfreakz.
    Ben benieuwd of jouw methode hetzelfde is als die van SUperRembo
    Lightdonderdag 6 oktober 2005 @ 18:12
    quote:
    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
    Daar had ik 'm gisteravond al geplaatst En de oplossing van SuperRembo heb ik niet gezien, dus ik kan ook niet vergelijken. Maar ik denk toch dat die van mij iets anders is, ik gebruik geen ringel-s ( / beta)
    Swetseneggermaandag 10 oktober 2005 @ 13:17
    quote:
    Op donderdag 6 oktober 2005 08:35 schreef Swetsenegger het volgende:

    [..]

    Ok,

    mijn nested hierarchische model draait.
    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 )

    Om dit goed te visualiseren is inspringen natuurlijk perfect. De volgende query vond ik op mysql.org, en geeft perfect de diepte weer van elk item. Hij heeft maar 1 probleem... wanneer 1 naam meer keren voorkomt in je hierarchische model klopt de output niet meer

    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


    dat komt doordat de query op naam zoekt uiteraard. Iemand enig idee hoe ik deze kan verbouwen zodat dubbele namen geen problemen geven?
    Swetseneggermaandag 10 oktober 2005 @ 13:47
    quote:
    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?
    Ik was weer veel te moeilijk aan het denken

    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

    Opgelost
    Chandlermaandag 10 oktober 2005 @ 17:37
    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?
    Chandlermaandag 10 oktober 2005 @ 17:56
    en nog iets vaags.

    Ik heb een functie gemaakt.

    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


    en die functie roep ik normaal aan met

    1mysql_query($sql) or statError(mysql_error(), $sql, _LINE_);


    maaruh daarop krijg ik geen error, maar wel als ik dit doe

    1
    2
    3
    4
    5
    6
    7
    8
    if (mysql_query($sql))
    {
        // return true;
    }
    else
    {
         statError(mysql_error(), $sql, _LINE_);
    }


    Why? ik vat um niet, alle uppercase / lowercase klopt
    Swetseneggermaandag 10 oktober 2005 @ 18:31
    quote:
    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?
    Je bedoelt zoiets als
    640*480
    800*600
    1024*768
    1280*960
    1280*1024 (dit is een afwijkende en typische TFT resolutie)
    1600*1200
    ikke_ookmaandag 10 oktober 2005 @ 18:49
    1   mysql_query($sql) or die (statError(mysql_error(), $sql, _LINE_));

    or die() dus ipv or
    Swetseneggermaandag 10 oktober 2005 @ 19:40
    http://test.xploise.nl/nested_test.php
    Is deze 'visuele methode' om een menu te maken te begrijpen door een leek? Of zijn pulldowns handiger?

    Het probleem is een beetje welk huidig item je moet selecteren om een nieuw item ervoor of erachter te krijgen. Vandaar dat ik dit heb opgezet.
    Chandlermaandag 10 oktober 2005 @ 19:49
    @Swets: Is er zo'n lijst? want deze heb ik helaas niet kunnen vinden

    @ikke_ook: volgens mij heb ik in het verleden het ook zonder DIE gedaan en dat moet natuurlijk ook werken volgens mij, maar dat was het probleem niet echt, wel dat bij die if (etc) het fout ging enzo.. dat ie zegt dat de functie niet bestaat
    Chandlermaandag 10 oktober 2005 @ 19:55
    @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)


    1
    2
    3
    4
    5
    (+/-)
    hoofd menu (+/-)
       test 1 (+/-)
       test 2 (+/-)
    sub menu (+/-)

    etc.. en dan die plus en of min gebruiken om menu's toe tevoegen en of te verwijderen ofzo?!
    Swetseneggermaandag 10 oktober 2005 @ 19:56
    quote:
    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
    Mijn lijstje is aardig compleet hoor
    Swetseneggermaandag 10 oktober 2005 @ 20:00
    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?!
    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.
    Chandlermaandag 10 oktober 2005 @ 20:10
    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

    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


    en dat werkte best, echter zag dat er weer niet uit
    Chandlermaandag 10 oktober 2005 @ 20:11
    @Swets; dat lijstje is idd aardig compleet maar er zijn volgens mij nog veel meer modes (1900??) etc?
    Swetseneggermaandag 10 oktober 2005 @ 20:16
    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)

    Als ik achter treesub1 op add klikt. Waar plaatst hij de nieuwe sub dan? boven treesub1 of eronder? Die keuze bestaat sowieso in deze opzet niet meer.

    En ik weet al precies hoe het gaat. Systeem draait een paar maanden, klant wil een extra menu optie. De menuoptie mag natuurlijk niet zomaar onderaan komen, nee die moet bijvoorbeeld precies tussen item 3 en 4 komen.

    Dus ik wil er ten alle tijden voor zorgen dat het zo flexibel mogelijk is. Maar ik moet toegeven dat het er nu met een aantal menuitems als hogere wiskunde uit gaat zien .

    Overigens, met alleen pulldowns WERD het hogere wiskunde. Je hebt namelijk dan sowieso al de keuze 'nested' of 'ernaast' en dan is nog afhankeljik van welke huidig item je selecteert waar het nieuwe item in de lijst verschijnt.
    SuperRembomaandag 10 oktober 2005 @ 20:18
    Dit is wat ik op m'n videokaart in kan stellen:

    640x480
    720x480
    720x576
    800x600
    848x480
    960x600
    1024x768
    1152x864
    1280x720
    1280x768
    1280x800
    1280x960
    1280x1024

    En dan heb je nog laptops, pda's en tv's met afwijkende resoluties. Extreem klein en extreem groot zou je er uit kunnen filteren, maar verder is er denk ik geen sluitende lijst maken.
    Swetseneggermaandag 10 oktober 2005 @ 20:21
    quote:
    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?
    Nou, niet veel mensen zullen op dit moment hoger zitten dan 1600*1200
    sowieso is het een heel simpel reken sommetje:

    1900/640=2.96
    480*2,96=1425

    Als er zoiets bestaat als 1900 zal het 1900*1425 zijn
    Er zijn nog wel meer resoluties, bv voor breedbeeld laptops. die wijken af van het 1.33:1 principe.

    Misschien kan je ergens op een uitgebreide statistieken pagina een mooi lijstje vinden
    Chandlermaandag 10 oktober 2005 @ 20:24
    als je op de add van treesub1 klikt maakt ie een subitem aan met het id van treesub1 en het zelfde geld voor als je klikt op treesub2 dan krijg je dus weer een treesubsub3 met het id van treesub2 als parent_id. ow en met een 'sort' in je tabel kun je altijd zorgen dat iemand op de goede volgorde staan (ook weer met (+ / -) om naar boven cq beneden te verplaatsen. dus ieder ID die je aanmaakt geef je de count van het aantal id's die in de tree zitten).

    vb

    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


    dus stel je zet een item tussen
    1
    2
    3:2 (1)  =       subsubtree1
    4:2 (2)  =       subsubtree2


    dan wordt dat stukje dus

    1
    2
    3
    3:2 (1)  =       subsubtree1
    5:2 (2)  =       subsubtree3
    4:2 (3)  =       subsubtree2


    0:0 (1) staat voor
    0 = ID
    0 = PARENT_ID
    (1) = sorterings positie

    Chandlermaandag 10 oktober 2005 @ 20:25
    @SuperRembo & @Swets; dan ga ik gewoon checken of het nummerieke stukken zijn en is dat het geval dan is het goed.

    Swetseneggermaandag 10 oktober 2005 @ 20:28
    "ow en met een 'sort' in je tabel kun je altijd zorgen dat iemand op de goede volgorde staan (ook weer met (+ / -) om naar boven cq beneden te verplaatsen. dus ieder ID die je aanmaakt geef je de count van het aantal id's die"

    Met hierarchische data is het niet zo eenvoudig schuiven helaas.
    Chandlermaandag 10 oktober 2005 @ 20:31
    hoe bedoel jij hierarchistische data? heb je een voorbeeld?
    Swetseneggermaandag 10 oktober 2005 @ 20:36
    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   | 


    Zo staat het in de tabel
    http://www.sitepoint.com/article/hierarchical-data-database/2
    http://dev.mysql.com/tech(...)erarchical-data.html
    Chandlermaandag 10 oktober 2005 @ 20:40
    lft? en rgt? leg je tabel eens uit?!
    Chandlermaandag 10 oktober 2005 @ 20:50
    @ swets: Waarom is Swetsenegger een Lul?
    Tiemiemaandag 10 oktober 2005 @ 20:56
    quote:
    Op maandag 10 oktober 2005 20:40 schreef Chandler het volgende:
    lft? en rgt? leg je tabel eens uit?!
    Left Right?
    Chandlermaandag 10 oktober 2005 @ 20:59
    o mijn god (beukt ff op zijn hoofd; wakker worden )
    Swetseneggermaandag 10 oktober 2005 @ 21:07
    quote:
    Op maandag 10 oktober 2005 20:59 schreef Chandler het volgende:
    o mijn god (beukt ff op zijn hoofd; wakker worden )
    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:

    The Adjacency List Model.
    Dat is eigenlijk degene welke jij voorstelt, bij elk child geef je aan van welke parent deze afkomt. Hier is redelijk eenvoudig mee te schuiven en te doen, maar er is maar 1 methode om alle data in de juiste onderlinge verhouding met elkaar uit de tabel te trekken, en dat is vanaf het diepste level, per child een query draaien. Bij grote trees wordt dit dus traag en er zitten nog wat haken en ogen aan (waar ik zelf ook nog niet helemaal uit ben )

    The Nested Set model.
    Hier kan je met 1 query de volledige tree uit je tabel trekken, snel, etc.
    JeRamaandag 10 oktober 2005 @ 21:51
    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
    Swetseneggermaandag 10 oktober 2005 @ 22:02
    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
    Tja, dat kan inderdaad.
    In mijn geval heb ik echter de hele tree nodig (menu) en zal ik dus recursive alle nodes stuk voor stuk uit de db moeten trekken om de onderlinge verhouding te zien. Overigens kan je in het Nested Set Model ook met 1 simpele query een volledig path kan oproepen

    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;


    Maar ik ben zeker geen expert, ben pas sinds een dag of 3 mezelf aan het verdiepen in hierarchische data opslag en er zullen vele wegen naar Rome leiden.

    Hoe dan ook, het gaat (niet meer) om het database model, dat werkt prima. Het gaat er meer om hoe ik een leek duidelijk kan maken hoe hij een menu maakt
    Chandlerdinsdag 11 oktober 2005 @ 05:05
    ps mijn probleem is reeds gefixt ivm $this-> er voor te zetten.. leuk classes
    ikke_ookdinsdag 11 oktober 2005 @ 08:50
    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
    's nachts moet je slapen ipv programmeren man!
    Swetseneggerwoensdag 12 oktober 2005 @ 09:06
    Fok zoekt devvers: De abonnementen, hoe staat het er mee?
    JeRawoensdag 12 oktober 2005 @ 13:29
    quote:
    Op woensdag 12 oktober 2005 09:06 schreef Swetsenegger het volgende:
    Fok zoekt devvers: De abonnementen, hoe staat het er mee?
    Nice

    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.
    sh4dowwoensdag 12 oktober 2005 @ 16:28
    Ik heb een klein vraagje, het zal vast heel simpel zijn maar ik kom er nog niet uit..

    Ik heb een ipban script gemaakt, en alle ips staan in een database. Nu ben ik bezig aan het gedeelte dat de gebande bezoekers moet tegenhouden.

    Dit is het stukje script:
    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!");
    }

    Met behulp van print_r krijg ik deze output:
    Array ( [0] => 192.168.1.2 ) Array ( [0] => 192.168.1.1 ) enz

    Dit zou moeten zijn:
    Array ( [0] => 192.168.1.2 ) Array ( [1] => 192.168.1.1 ) enz

    Enig idee hoe ik dit voor elkaar krijg?
    JeRawoensdag 12 oktober 2005 @ 17:11
    @sh4dow

    Je doet telkens

    $ip = array($ips);

    Daarmee maak je télkens een nieuwe array aan (met 0 items) en stop je daar $ips in. Daardoor krijg je niet wat je wilt. Om jouw voorbeeld te laten werken moet je bovenstaande regel vervangen door

    $ip[] = $ips;

    Hierdoor voeg je een item aan de array $ip toe. Het is een slim idee om $ip vantevoren te initialiseren met Array().

    Even aan de andere kant, je vraagt nu alle IPs op uit de database en kijkt dan of het IP-adres van de bezoeker in de lijst voorkomt. Het is sneller om in je query het IP-adres van de bezoeker op te vragen en te kijken of je iets terugkrijgt, dus zoiets:

    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!');
    }
    sh4dowdonderdag 13 oktober 2005 @ 11:58
    @JeRa, thnx! het is gelukt.
    Lamme_Sterfkanariedonderdag 13 oktober 2005 @ 12:38
    of je doet een SELECT COUNT en kijkt dan met mysq_result of het getal groter dan 0 is. Aangezien je het ip adres niet hoeft te weten maar alleen te tellen hoef je het ook niet uit de database te trekken maar alleen te tellen.
    Lightdinsdag 18 oktober 2005 @ 08:06
    Een klein en subtiel schopje om dit topic weer makkelijk vindbaar te maken
    JeRadinsdag 18 oktober 2005 @ 12:33
    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.
    Iemand?
    Siegfrieddinsdag 18 oktober 2005 @ 13:15
    Ok, ik zit weer te klunzen..
    Kom er even niet uit..

    Ik heb dit:
    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]";
    ?>


    Maar nu wil ik, dat ie in een session opslaat welk nummer ie gehad heeft (geen prob, dat lukt me wel). Maar nu wil ik dat ie die exclude..

    Edit: Ow wacht.. Hoe kan ik het dan het best in een session zetten als het al een paar keer is aangeroepen, en er dus meerdere nummers ge-exclude moeten worden?
    Ook in een array?

    [ Bericht 7% gewijzigd door Siegfried op 18-10-2005 13:24:00 ]
    SuperRembodinsdag 18 oktober 2005 @ 13:27
    1
    2
    3
    4
    5
    6
    function randExcl($min, $max, $exclude) {
       $r = rand($min, $max - 1);
       if ($r >= $exclude) {
          $r++;
       }
    }
    Siegfrieddinsdag 18 oktober 2005 @ 13:42
    Kijk aan, daar heb ik wat aan!

    Maar hoe exclude ik meerdere getallen?
    Siegfrieddinsdag 18 oktober 2005 @ 13:57
    Hmm, ik heb enkele vraagjes bij de functie gezet..
    Snap niet helemaal waarom je eerst 1 van de max afhaald, en later bij de random er weer 1 bij optelt.
    Of begrijp ik de functie verkeerd?

    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function randExcl($min, $max, $exclude) {
       
    $r = rand($min, $max - 1); // -1 haalt 1 van de max af?
       
    if ($r &gt;= $exclude) { // Als random groter of gelijk is aan? Toch alleen excluden als ie gelijk is aan?
          
    $r++; // Random +1?
       
    }
    }
    ?>
    JeRadinsdag 18 oktober 2005 @ 13:57
    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);


    Zoiets?
    Siegfrieddinsdag 18 oktober 2005 @ 14:15
    Als dat werkt dan ben ik je heel erg dankbaar!
    Het ziet er in elk geval erg logisch uit
    JeRadinsdag 18 oktober 2005 @ 14:23
    quote:
    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
    Werken, dat doet het je moet alleen opletten dat $exclude een array moet zijn en dat je niet álle getallen exclude, want dan krijg je een oneindige loop
    Siegfrieddinsdag 18 oktober 2005 @ 14:27
    Dat komt goed, thnx!
    Siegfrieddinsdag 18 oktober 2005 @ 15:43
    Moet een session variabele reeds bestaan, alvorens ik " array_push" kan gebruiken om een gebruikt nummer aan de array toe te voegen?

    Nee toch?
    Siegfrieddinsdag 18 oktober 2005 @ 16:21
    Ik krijg het niet werkend

    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");
    ?>


    Dit geeft:
    Warning: in_array(): Wrong datatype for second argument in exclude_test.php on line 8
    Random-nummer: 1
    Warning: array_push(): First argument should be an array in exclude_test.php on line 16

    Dus hij geeft em eem foutmelding, en hij blijft dubbele uitvoer geven..
    Wat doe ik toch fout?
    JeRadinsdag 18 oktober 2005 @ 17:07
    $_SESSION['exclude'] is nog geen array. Daarom geeft ie zowel een foutmelding in de functie (daarom zei ik ook dat je áltijd een array moet meegeven ) als bij array_push, die ook een array verwacht. Je kunt zoiets op te lossen door eerst

    1
    2
    3
    if (!is_array($_SESSION['exclude'])) {
        $_SESSION['exclude'] = array();
    }


    te doen
    Siegfrieddinsdag 18 oktober 2005 @ 17:12
    Hmm.. Stom van me

    Hoe moet ik dit dan werkend krijgen, want onderstaande code geeft alsnog dezelfde foutmelding:

    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");
    ?>
    JeRadinsdag 18 oktober 2005 @ 17:37
    Mijn fout, is_array moet je veranderen in isset en dan werkt het wel
    Siegfrieddinsdag 18 oktober 2005 @ 18:06
    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?
    SuperRembodinsdag 18 oktober 2005 @ 19:41
    quote:
    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?
    Je zegt het zelf al bijna

    1
    2
    3
    if ($aantalNummers == $aantalNummersGeexclude) {
       echo 'Help, hij belandt in een endless-loop';
    }
    SuperRembodinsdag 18 oktober 2005 @ 19:47
    quote:
    Op dinsdag 18 oktober 2005 12:33 schreef JeRa het volgende:

    [..]

    Iemand?
    Wat bedoel je precies? Redabel voor wie?
    Siegfrieddinsdag 18 oktober 2005 @ 19:57
    quote:
    Op dinsdag 18 oktober 2005 19:41 schreef SuperRembo het volgende:

    [..]

    Je zegt het zelf al bijna
    [ code verwijderd ]
    Hmm.. Ok
    Maar hoe tel ik hoeveel waardes er in een array zitten?
    Kan dit ook gewoon met count?
    JeRadinsdag 18 oktober 2005 @ 20:26
    quote:
    Op dinsdag 18 oktober 2005 19:47 schreef SuperRembo het volgende:

    [..]

    Wat bedoel je precies? Redabel voor wie?
    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?
    SuperRembodinsdag 18 oktober 2005 @ 20:52
    Oh op die manier.

    Ik heb werkelijk geen idee
    Lightdinsdag 18 oktober 2005 @ 21:47
    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?
    Ja, count is juist om te tellen hoeveel waardes er in een array zitten.

    1
    2
    3
    4
    5
    <?php
    if (count($exclude) == ($max - $min + 1)) {
        
    $exclude = array(); // en toen was $exclude weer leeg :)
    }
    ?>


    [ Bericht 2% gewijzigd door Light op 18-10-2005 23:23:58 ]
    JeRadinsdag 18 oktober 2005 @ 21:56
    Maar wat nu als je een waarde in $exclude zet die niet binnen de reeks valt?...

    overigens moet dat '==' zijn[/gezeik]

    [ Bericht 18% gewijzigd door JeRa op 18-10-2005 22:01:58 ]
    Siegfrieddinsdag 18 oktober 2005 @ 22:24
    Hmm..
    Toch blijft hij steeds in de endless-loop uitkomen:

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


    Wat is er fout aan de if?
    Sorry voor de vele vragen, maar ik kom er dus echt niet uit..
    Twisted2000woensdag 19 oktober 2005 @ 09:21
    he,

    kan iemand me misschien vertellen hoe ik n variabele uit n functie meeneem en weer bij n andere functie kan gebruiken. Het ziet er n beetje als volgt uit.
    Heb dus al met die global gewerkt, maar dat is dus alleen voor variabelen die niet in n andere functie staan. Heb ook al met $GLOBALS geprobeerd maar het wil me maar niet lukken.

    Alvast bedankt.


    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;

    }
    SuperRembowoensdag 19 oktober 2005 @ 12:50
    Dat kan met return.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    function who() {
       return 'Twisted';
    }
    function hello($name) {
       echo "Hello $name";
    }

    $who = who();
    hello($who);
    Darkomenwoensdag 19 oktober 2005 @ 22:23
    Ik heb een probleem met een uplaod script, dit plaatje :
    http://www.borntobewild.nl/thatsme/gopic/borntobewild.gif
    Komt er zo uit te zien:
    http://www.borntobewild.nl/avatar.php?id=11

    De code is vrij simpel lijkt me:
    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());
    }


    om de foto te laten zien ook:
    1
    2
    3
    header( "Content-type: $row[type]" );
    header("Content-disposition:filename=www.borntobewild.nl");
    echo base64_decode($row['image']);


    Ik snap het ff niet?
    er zijn namenlijk ook genoeg die wel goed zijn geupload via hetzelfde script?
    Alleen die zijn dan ongeveer 50kb ipv deze die 100kb is?
    maak ik deze img kleiner dan is er geen probleem dus alleen problemen bij grooter images.

    het sql veld is van het 'text' type.
    JeRawoensdag 19 oktober 2005 @ 22:54
    Ik snap je probleem niet echt. Die GIF-afbeelding is weldegelijk 100 kb groot als ik naar de bron kijk, en je scriptje doet hier niets
    Lightwoensdag 19 oktober 2005 @ 23:27
    quote:
    Op woensdag 19 oktober 2005 22:23 schreef Darkomen het volgende:

    het sql veld is van het 'text' type.
    Is het type "blob" niet handiger in dit geval?
    Darkomendonderdag 20 oktober 2005 @ 08:46
    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.
    Desdinovadonderdag 20 oktober 2005 @ 10:35
    je hebt verschillende maten blobs grootste is 16mb dacht ik.


    mijn vraag is als volgt. ik heb n simpel formpje waar je een titeltje en een textarea kan invullen, nou wil ik dat de textarea ingevoerd wordt, zoals het getikt is. dus met enters, en spaties e.d.

    de enters en (dubbele of meerdere) spaties worden getrimmed of iets dergelijks, waardoor ik dus uiteindelijk met niet 'opgemaakte' text kom te zitten.

    tevens wil ik, dat wanneer het item ge-edit wordt, de gegevens die in de textarea ook op dezelfde manier verschijnen. dus geen <br> tags er in e.d., maar gewoon enters zoals ik ze hier getikt heb. Iemand een tip over waarnaar ik moet kijken?
    Darkomendonderdag 20 oktober 2005 @ 10:46
    gewoon de <br>'s door \n laten vervangen?
    JeRadonderdag 20 oktober 2005 @ 10:49
    Worden alle grotere afbeeldingen naar dezelfde grootte 'ingekort' of is dat willekeurig?
    Darkomendonderdag 20 oktober 2005 @ 10:51
    quote:
    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.
    Longblob en het uploaden gaat wel goed
    Desdinovadonderdag 20 oktober 2005 @ 10:57
    quote:
    Op donderdag 20 oktober 2005 10:46 schreef Darkomen het volgende:
    gewoon de <br>'s door \n laten vervangen?
    en andersom neem ik aan.. dus bij input \n -> <br>, en bij inlezen in textarea <br> -> \n?

    ok, zal ik proberen. maar hoe zit het met de dubbele en meerdere spaties?
    Darkomendonderdag 20 oktober 2005 @ 11:02
    ja sorry, dat klopt, ik bedoel ook eigenlijk alleen voor het inlezen in de textarea.
    spaties kan ik ff niks over zeggen
    Lamme_Sterfkanariedonderdag 20 oktober 2005 @ 11:03
    om enters in tekst mee te pakken kun je nl2br() gebruiken
    Darkomendonderdag 20 oktober 2005 @ 11:09
    uiteraard
    vamos1donderdag 20 oktober 2005 @ 14:31
    ik zit met een vraagje... nogal een onhandig iets maar goed..
    Hoe doe ik dit:
    quote:
    Er zijn 473 ingelogde gebruikers en 2522 gasten aanwezig
    ik kan natuurlijk in de database laten zien wie er zijn ingelogged,..
    maar als het scherm word gesloten zonder uit te loggen, heb ik een probleem
    ik ken de manier al voor het html/javascript-code dat je een popup kunt geven dan om de loguit te doen, maar toch werkt dit meestal (zoals bij mij) niet en blijven er mensen voor altijd ingelogged staan..

    ook begrijp ik niet hoe je de gasten kunt tellen. hoe kan ik namelijk zien hoeveel mensen er op dit moment mijn website open hebben staan, maar niet ingelogged zijn..

    ik wil dus weten...
    hoe tel ik het aantal ingeloggede sessies?
    hoe tel ik de gasten (niet ingelogged)

    ik zal nog wel ff googlen ernaar, maar heb dit al te vaak geprobeerd...
    the_disheaverdonderdag 20 oktober 2005 @ 14:43
    Gasten:

    Misschien kan het makkelijker door het apachelog...maar dat weet ik niet.

    Misschien bij elke pagina bezoek (wel of niet ingelogd) ip en timestamp naar db schrijven.
    En over een bepaalde tijdsperiode (5, 15 minuten?) het aantal unieke ip's tellen?
    Daar zul je nog je aantal ingelogde gebruikers van af moeten trekken.

    Op deze manier zal je DB wel erg groot worden... Dus direct een functie om alle oude waardes (meer dan 5/15 minuten) uit de DB te gooien?

    En misschien wel handig dit max 1x per minuut te doen. bv naar een text-file schrijven, en via laatste wijziging-functie kijken of hij minder dan 1 minuut oud is, en dus de text-file uitleest, of toch zelf aantal gebruikers gaat berekenen.

    Tis maar een idee, misschien (waarschijnlijk) is er een veel handigere manier...
    vamos1donderdag 20 oktober 2005 @ 14:51
    haha dat heb ik idd al eens geprobeerd,..
    probleem is dat de hele website dan echt te traag gaat..

    http://www.phpfreakz.nl/library.php?sid=20437

    staat een goed voorbeeld van hoe je gasten kunt checken,.. alleen moet ik een manier vinden om dit aan de memberid te koppelen van de leden,.. zodat de class ziet of ik ingelogged ben of niet
    vamos1donderdag 20 oktober 2005 @ 14:52
    ik zie dat ik een foutje heb gemaakt bij het voorbeeldscriptje dat er staat...
    hmm.. ff kijken of het zo werkt
    Siegfrieddonderdag 20 oktober 2005 @ 14:53
    Jongens ik blijf in de knoop zitten met mijn script..

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


    Waarom belandt ie tóch in de endless-loop?
    Lamme_Sterfkanariedonderdag 20 oktober 2005 @ 14:54
    voor m'n forum gaf ik iedereen die kwam een sessie-id en die propte ik in de database. Bij elke visit update ik de lastvisit. Je kunt dus via een COUNT query iedereen die 5 geleden een pagina bezoek heeft mee laten tellen. En met een functie die een getal tussen de 1 en de 10 genereert gooi je bij de 1 er een query bij die oude sessies d'r uit gooit
    the_disheaverdonderdag 20 oktober 2005 @ 14:56
    En nu mijn vraag:

    Via reg_expresions maak ik van url's, [url=] en mailadressen een linkje.

    Alleen wil ik met de emailadressen hetzelfde doen, als met url's gedaan wordt:


    URL's zonder [url= replacen door [ url=$url]$url[/url]
    en [ url=*]*[/url] replacen door html code (<a href="$url ~

    daarvoor heb ik dit (volgens mij van SuperRembo):
    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'
            
    =&gt; '[url=\1]\1[/url]',

       
    // www.foo.net => [url=www.foo.net]http://www.foo.net[/url]
       
    '#(?<!\[url=)(?<!http://)(www\..*?)(?=[.,?:;()<>]*(\s|$))#i'
            
    =&gt; '[url=http://\1]\1[/url]',

       
    // [url=http://foo.net]Foo[/url] => <a href="http://foo.net">Foo</a>
       
    '#\[url=(https?://.*?)\](.*?)\[/url\]#i'      
            
    =&gt; '<a href="\1">\2</a>',

       
    // [url=foo.net]Foo[/url] => <a href="http://foo.net">Foo</a>
       
    '#\[url=(.*?)\](.*?)\[/url\]#i'               
            
    =&gt; '<a href="http://\1">\2</a>',
                
    ?>


    Dit wil ik dus ook voor emailadressen: eerst 'losse amailadressen door een bbc code replacen: [ email=email]email[/email]

    Alleen moeten de 'losse' emailadressen geen [email= bevatten

    dus ik denk:
    1
    2
    3
    4
    <?php
        
    '#(?<!\[email=)([^@\s]+@(:?[-a-z0-9]+\.)+[a-z]{2,})#'
            
    =&gt; '[email=$1]$1[/email]',
    ?>

    Dus ik heb alleen dit extra toegeveogd (de oude code werkte perfect)
    (?<!\[email=)

    Maar zo wordt [email=blaat@nl.nl]blaat[/url] <a href=[email=blaat@nl.nl> [email=blaat@nl.n

    Mijn vraag nu kort:
    hoe krijg ik een preg_replace voor emailadressen die geen [email= bevatten.
    vamos1donderdag 20 oktober 2005 @ 15:04
    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);


    zo misschien? is alleen geen preg_replace
    hij vangt op of er een emailadres gedumpt is en maakt er dan een link van
    the_disheaverdonderdag 20 oktober 2005 @ 15:15
    quote:
    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
    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
    vamos1donderdag 20 oktober 2005 @ 15:18
    ik heb mijn online-teller gevonden voor in combinatie met mijn leden...


    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>,'; 

    ?> 

    je moet natuurlijk wel eerst je eigen database-koppeling even maken
    toch bedankt voor de hulp, misschien heeft iemand er wat aan...
    bron: http://www.phpfreakz.nl/library.php?sid=19766
    vamos1donderdag 20 oktober 2005 @ 15:58
    quote:
    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
    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
    the_disheaverdonderdag 20 oktober 2005 @ 16:10
    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
    aanhalingstekens voor _blank?

    Maar nee: dat heb ik ook wel, een preg_replace om een bcc code naar een link te replacen.

    Om een emailadres naar een bcc code te replacen echter niet...
    the_disheaverdonderdag 20 oktober 2005 @ 16:44
    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...
    ikke_ookdonderdag 20 oktober 2005 @ 16:44
    quote:
    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?
    Omdat dat if statement nooit true is

    En als je niet weet hoe dat komt moet je even die 4 variabelen uit dat if statement printen zodat je kunt zien wat voor waardes ze bevatten. Op die manier kun je toch heel makkelijk zoiets debuggen?

    Of zie ik wat over het hoofd?Ik heb je probleem niet helemaal gevolgd in je vorige posts
    vamos1donderdag 20 oktober 2005 @ 17:32
    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...
    die url-manier is PRECIES hetzelfde als mijn link-manier.......
    en die werkt wel
    the_disheaverdonderdag 20 oktober 2005 @ 17:54
    quote:
    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
    mja, ik probeer hem nu zelf aan te passen... hopen dat het nu wel werkt (ik probeer nu items met {/url] eruit te filteren
    vamos1donderdag 20 oktober 2005 @ 18:20
    $bericht = preg_replace("#\[url=\\\"(.*?)\\\"\](.*?)\[/url\]#si","<a target=_blank href=\"http://\\1\">\\2</a>", $bericht);

    of ligt dat nou aan mij?
    vamos1donderdag 20 oktober 2005 @ 18:23
    jezus fok is sloom.....

    bij mijn vorige post is het wel zo, dat je GEEN http:// moet gebruiken..
    HuHudonderdag 20 oktober 2005 @ 20:00
    Ik heb een probleempje. Ik wil dat 'de user' een afbeelding kan uploaden naar mijn server. Die afbeelding moet dan vervolgens naar mij gemailt worden en weer van de server worden verwijderd. Dat uploaden is geen probleem. Een mailtje maken ook niet, maar de afbeelding toevoegen als bijlage is nog niet gelukt. PHP.net verwijst door naar een pagina van Zend, maar daar kom ik ook niet echt uit. Een heel verhaal over headers, bla bla, maar geen PHP voorbeeldje. Nu heb ik zelf de volgende code:

    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);
    ?>


    Goed, nu moet dus nog die afbeelding als bijlage worden toegevoegd. Kan iemand mij hiermee helpen? En ik heb nog niet gekeken naar het verwijderen van de afbeelding van de server na het versturen van de mail, maar weet iemand dat toevallig uit z'n hoofd?
    the_disheaverdonderdag 20 oktober 2005 @ 20:30
    verwijderen:

    $afbeeldingsbestand = "images/blaat/blaat.gif";
    unlink($afbeeldingsbestand);
    HuHudonderdag 20 oktober 2005 @ 20:33
    quote:
    Op donderdag 20 oktober 2005 20:30 schreef the_disheaver het volgende:
    verwijderen:

    $afbeeldingsbestand = "images/blaat/blaat.gif";
    unlink($afbeeldingsbestand);
    Ik had hem net zelf gevonden, maar bedankt

    Weet je ook hoe je de afbeelding als bijlage kan mailen
    the_disheaverdonderdag 20 oktober 2005 @ 20:35
    quote:
    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
    nope
    the_disheaverdonderdag 20 oktober 2005 @ 20:45
    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()
    HuHudonderdag 20 oktober 2005 @ 21:27
    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()
    Bedankt, ik zal er eens naar gaan kijken.
    ikke_ookdonderdag 20 oktober 2005 @ 21:38
    Waaro mkan ik niet kopieren van mn klembord hier in snel reageren???