FOK!forum / Digital Corner / [PHP/(My)SQL] voor dummies - Deel 22
Poerkiemaandag 20 februari 2006 @ 15:27

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
[PHP/(My)SQL] voor dummies - Deel 13
[PHP/(My)SQL] voor dummies - Deel 14
[PHP/(My)SQL] voor dummies - Deel 15
[PHP/(My)SQL] voor dummies - Deel 16
[PHP/(My)SQL] voor dummies - Deel 17
[PHP/(My)SQL] voor dummies - Deel 18
[PHP/(My)SQL] voor dummies - Deel 19
[PHP/(My)SQL] voor dummies - Deel 20
[PHP/(My)SQL] voor dummies - Deel 21

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

    PHP goodies
  • PHP5 Power Programming
    In dit boek uitleg over OOP, Pear, XML, etc

    Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/PHP

    [ Bericht 1% gewijzigd door Jump op 22-02-2006 20:13:59 ]
  • the_disheavermaandag 20 februari 2006 @ 15:29
    TVP

    Bestaat er geen 'KRegExpEditor' voor windows?
    mscholmaandag 20 februari 2006 @ 15:44
    prohbeer RegexBuddy eens:
    http://www.topshareware.com/RegexBuddy-download-15609.htm
    eer-ikmaandag 20 februari 2006 @ 19:20
    Hallo allemaal, ik heb een probleempje, namelijk ik heb zo'n VBulletin forum, maar ik kan deze niet installeren op mijn server. Ik heb de mogelijkheid tot PHP en MySQL, maar ik krijg de melding bij stap 3 dat er iets is foutgegaan. Het gaat om http://www.wapata.nl/forum/install/install.php?step=3
    Bij http://www.wapata.nl/forum/install/install.php?step=2 kun je ervoor kiezen om de database te legen en het nog een keer te proberen, maar dat lukt me niet.
    Weet iemand wat ik hieraan kan doen?
    Alvast bedankt,
    Erik
    Nevermindmaandag 20 februari 2006 @ 19:54
    Stel dat ik op mijn thuisserver eenofandere grote site ga rippen en in de database stop, zodat ik op een gegeven moment >1 gig aan data in MySQL heb. Probeert MySQL dat dan permanent in het geheugen te laden, zodat ik een gigantische (langzame) swapfile krijg? Of wordt het bij een query pas van de schijf gelezen en is het alsnog langzaam, maar zit het niet permanent in het geheugen?
    ikke_ookmaandag 20 februari 2006 @ 20:12
    quote:
    Op maandag 20 februari 2006 19:54 schreef Nevermind het volgende:
    Stel dat ik op mijn thuisserver eenofandere grote site ga rippen en in de database stop, zodat ik op een gegeven moment >1 gig aan data in MySQL heb. Probeert MySQL dat dan permanent in het geheugen te laden, zodat ik een gigantische (langzame) swapfile krijg? Of wordt het bij een query pas van de schijf gelezen en is het alsnog langzaam, maar zit het niet permanent in het geheugen?
    Waarom zou hij het in een swapfile zetten als het ook gewoon op je schijf staat?Het lijkt me handiger als MySql de index in zijn geheugen zet en de rest van schijf leest ofzo...
    Ik kan me iig niet voorstellen dat er gebeurd wat jij zegt vraagt.

    [ Bericht 1% gewijzigd door ikke_ook op 20-02-2006 20:32:19 ]
    Nevermindmaandag 20 februari 2006 @ 20:22
    quote:
    Op maandag 20 februari 2006 20:12 schreef ikke_ook het volgende:

    [..]

    Waarom zou hij het in een swapfile zetten als het ook gewoon op je schijf staat?Het lijkt me handiger als MySql de index in zijn geheugen zet en de rest van schijf leest ofzo...
    Ik kan me iig niet voorstellen dat er gebeurd wat jij zegt.
    Ik zeg het ook niet, ik vraag het
    the_disheavermaandag 20 februari 2006 @ 21:15
    quote:
    Op maandag 20 februari 2006 19:20 schreef eer-ik het volgende:
    Hallo allemaal, ik heb een probleempje, namelijk ik heb zo'n VBulletin forum, maar ik kan deze niet installeren op mijn server. Ik heb de mogelijkheid tot PHP en MySQL, maar ik krijg de melding bij stap 3 dat er iets is foutgegaan. Het gaat om http://www.wapata.nl/forum/install/install.php?step=3
    Bij http://www.wapata.nl/forum/install/install.php?step=2 kun je ervoor kiezen om de database te legen en het nog een keer te proberen, maar dat lukt me niet.
    Weet iemand wat ik hieraan kan doen?
    Alvast bedankt,
    Erik
    kijk eerder eens op de vBulletin forum. Volgens mij is er wel vrij duidelijke handleiding. Met je vraag kunnen we niets. Misschien specifiekere vraag over wat je moet invullen maar niet zeker weet?
    eer-ikmaandag 20 februari 2006 @ 21:22
    Nou, kijk, ik heb de config file gewoon ingevuld, en dat heb ik een paar keer nagekeken, maar daar staat niks mis in...
    Ik krijg de volgende melding:
    quote:
    Database error in vBulletin :

    Invalid SQL:

    CREATE TABLE deletionlog (
    primaryid INT UNSIGNED NOT NULL DEFAULT '0',
    type ENUM('post', 'thread') DEFAULT 'post',
    userid INT UNSIGNED NOT NULL DEFAULT '0',
    username VARCHAR(100) NOT NULL DEFAULT '',
    reason VARCHAR(125) NOT NULL DEFAULT '',
    PRIMARY KEY (primaryid, type)
    );

    MySQL Error : All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead
    Error Number : 1171
    Date : Monday, February 20th 2006 @ 09:19:05 PM
    Script : http://www.wapata.nl/Vbulletin/install/install.php?step=3&emptydb=true&confirm=true
    Referrer : http://www.wapata.nl/Vbulletin/install/install.php?step=3&emptydb=true&confirm=true
    IP Address : 80.127.69.223
    Username :
    Classname : vb_database
    Maar het probleem is, dat ik daar geen kont van snap
    Ik heb wel al op de site van Vbulletin gekeken, maar daar word ik ook niet echt veel wijzer van ...

    Dit script maakt alle tabellen zelf, maar deze tabel kan hij niet maken denk ik?
    the_disheavermaandag 20 februari 2006 @ 21:32
    Maakt hij de database zelf ook? Kun je zien of er tabellen zijn aangemaakt via phpmyadmin oid (ik neem aan dat je het niet op een eigen webserver installeert, maar op een webhoster?
    the_disheavermaandag 20 februari 2006 @ 21:37
    De primary keys moeten allen NOT NULL zijn. primaryid is dat wel, maar type niet.

    Ik zou niet weten waarom type OOK een primaryid moet zijn, dus kun je dat 'type' er niet uit halen? Ofwel, kun je de SQL wijzigen?

    edit: En uhhh, uberhaupt op het forum daarzo gezocht? http://www.vbulletin.com/forum/search.php?searchid=256068
    the_disheavermaandag 20 februari 2006 @ 21:40
    -

    [ Bericht 100% gewijzigd door the_disheaver op 20-02-2006 21:40:22 ]
    eer-ikmaandag 20 februari 2006 @ 21:58
    eeeuh, nee, de database maakt hij niet zelf, die heet wapata.
    Er zijn wel tabellen aangemaakt inderdaad, maar hij komt niet verder dan datastore...
    http://i1.tinypic.com/o7k5jq.jpg
    Daar het plaatje, kan je het evt zien...
    En, nee, niet op het forum gekeken eigenlijk
    the_disheavermaandag 20 februari 2006 @ 22:00
    quote:
    Op maandag 20 februari 2006 21:58 schreef eer-ik het volgende:

    En, nee, niet op het forum gekeken eigenlijk
    Doe dat dan toch maar wel... Het probleem is vaker voorgekomen, en oplossing staat er ook wel bij.
    eer-ikmaandag 20 februari 2006 @ 22:08
    magnificent, het werkt allemaal
    iig bedankt!
    JeRamaandag 20 februari 2006 @ 22:19
    quote:
    Op maandag 20 februari 2006 19:54 schreef Nevermind het volgende:
    Stel dat ik op mijn thuisserver eenofandere grote site ga rippen en in de database stop, zodat ik op een gegeven moment >1 gig aan data in MySQL heb. Probeert MySQL dat dan permanent in het geheugen te laden, zodat ik een gigantische (langzame) swapfile krijg?
    MySQL heeft strakke restricties op het geheugengebruik, waarschijnlijk zal een groot deel van de indices en bepaalde delen van de data wel gecached worden door MySQL zelf. Voor de rest kun je prima vertrouwen op de block cache van het besturingssysteem waar het op draait.
    quote:
    Of wordt het bij een query pas van de schijf gelezen en is het alsnog langzaam, maar zit het niet permanent in het geheugen?
    Een query hoeft niet langzaam te zijn, zolang je maar de juiste indices gebruikt.
    mscholmaandag 20 februari 2006 @ 23:15
    ik heb een script dat stats in mijn database pompt maar ik wil er een error check in dat wanneer de pagina niet geladen kan worden dat hij bijvoorbeeld refreshed en nog eens probeert en dat er een mailtje wordt gestuurd bijvoorbeeld
    de code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    $lines
    = file('http://URL');
    while(
    $i &lt; 300)
    {
    preg_match_all($regex,$lines[$i],$needle);
      
    $needle = split(' ',$needle[0][0]);
      if(
    $needle[0] != '' && is_numeric($needle[0]))
      {
        
    $query = RunQuery("INSERT INTO");
        
    CloseConDB($con);
        exit;
      }
    $i++;
    }
    ?>


    de niet echt nuttige info er eff uitgewerkt

    i wordt nu gebruikt om een x aantal rijen af te gaan (deze rij is variable en daaarom moet ik een loop gebruiken!)
    nou heb ik dus de vraag: hoe kan ik zo slim mogelijk een error check erin zetten zodat bij een "pagina kan niet worden gevonden" error hij refreshed en/of iets anders doet?


    yips only dus e.v.t. functies die ik zou moeten gebruiken, wil zelf ontdekken hoe de vork in de steel zit, geven jullie me maar de vork en de steel

    [ Bericht 5% gewijzigd door mschol op 20-02-2006 23:23:17 ]
    Desdinovadinsdag 21 februari 2006 @ 09:15
    $view = "0";

    if ($view){ echo "check"; }

    ziet hij $view als een boolean ofzo? want hij echoed geen check?
    JeRadinsdag 21 februari 2006 @ 09:18
    Welkom tot de wereld van PHP's Loose Typing

    Het houdt in dat het type van variabelen los kan worden omgezet. De string '0' is gelijk aan de boolean false, en omdat je daar een if-constructie hebt die op een boolean slaat wordt de string $view ook zo behandeld.

    Als je een goede boolean check wilt doen, doe je dit:

    $view = '0';

    if ($view === true) { echo 'check'; }

    Drie is-tekens dus om ook het type te controleren. Wil je weten of er iets in de string zit, dan kan dat op verschillende manieren:

    if ($view != '') {}
    if (strlen($view) > 0) {}

    Etc
    Desdinovadinsdag 21 februari 2006 @ 09:48
    aaaah

    tenks!

    en isset($view)?
    JeRadinsdag 21 februari 2006 @ 16:26
    quote:
    Op dinsdag 21 februari 2006 09:48 schreef Desdinova het volgende:
    en isset($view)?
    Die bepaalt of een variabele bestaat. Wat houd je tegen om het uit te proberen?
    InsaneM666dinsdag 21 februari 2006 @ 22:49
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    $query
    = "SELECT * FROM MRprocesses WHERE MasterID = '0' ORDER BY Name ASC";
    $result = mysql_query($query);

    while (
    $row = mysql_fetch_object($result)){

        
    $query2 = "SELECT * FROM MRprocesses WHERE MasterID = '".$row-&gt;ID."' ORDER BY Name ASC";
        
    $result2 = mysql_query($query2);
        
        while (
    $row2 = mysql_fetch_object($result2)){
        
            
    $query3 = "SELECT * FROM MRprocesses WHERE MasterID = '".$row2-&gt;ID."' ORDER BY Name ASC";
            
    $result3 = mysql_query($query3);
            
            while (
    $row3 = mysql_fetch_object($result3)){
                
                
    $query4 = "SELECT * FROM MRprocesses WHERE MasterID = '".$row3-&gt;ID."' ORDER BY Name ASC";
                
    $result4 = mysql_query($query4);
            
                while (
    $row4 = mysql_fetch_object($result4)){
                
                }
            }
        }
    }
    ?>


    kan dit automatisch tot in het oneindige? dus tot er geen resultaat meer is zeg maar?
    JeRadinsdag 21 februari 2006 @ 22:52
    @InsaneM666

    Ja, maar dat kun je beter met een recursieve functie doen. Overigens is zo'n operatie wel érg databaseintensief, in de vorige topics zijn een paar treestructuren besproken waarvan je er wellicht een paar van kunt gebruiken
    mscholwoensdag 22 februari 2006 @ 15:50
    quote:
    Op maandag 20 februari 2006 23:15 schreef mschol het volgende:
    ik heb een script dat stats in mijn database pompt maar ik wil er een error check in dat wanneer de pagina niet geladen kan worden dat hij bijvoorbeeld refreshed en nog eens probeert en dat er een mailtje wordt gestuurd bijvoorbeeld
    de code:
    [ code verwijderd ]

    de niet echt nuttige info er eff uitgewerkt

    i wordt nu gebruikt om een x aantal rijen af te gaan (deze rij is variable en daaarom moet ik een loop gebruiken!)
    nou heb ik dus de vraag: hoe kan ik zo slim mogelijk een error check erin zetten zodat bij een "pagina kan niet worden gevonden" error hij refreshed en/of iets anders doet?


    yips only dus e.v.t. functies die ik zou moeten gebruiken, wil zelf ontdekken hoe de vork in de steel zit, geven jullie me maar de vork en de steel
    niemand ?
    Desdinovawoensdag 22 februari 2006 @ 16:00
    lijkt mij dat als je page niet wordt geladen, je hele script niet aangeroepen wordt?
    JeRawoensdag 22 februari 2006 @ 16:01
    quote:
    Op woensdag 22 februari 2006 15:50 schreef mschol het volgende:

    [..]

    niemand ?
    Ik snap niet wat je wilt doen. Wil je externe pagina's opvragen en zodra dit niet lukt iets anders doen? What about zoiets:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach ($sites as $site) {
        $fp = @fopen($site, 'r');
        if (!$fp) {
            $failed = true;
            break;
        }
    }
    ...
    if ($failed === true) {
        //stuur mail
    }
    Nevermindwoensdag 22 februari 2006 @ 17:49
    quote:
    Op dinsdag 21 februari 2006 22:49 schreef InsaneM666 het volgende:

    [ code verwijderd ]

    kan dit automatisch tot in het oneindige? dus tot er geen resultaat meer is zeg maar?
    Probeer je een parent-child tree te bouwen? Dan kun je wellicht beter alles uit de database halen en met php in elkaar zetten.
    wobbelwoensdag 22 februari 2006 @ 18:12
    Ik heb een .m3u file in het volgende formaat:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #EXTINF:199,Smashmouth - All Star
    D:\MP3\Februari 2006\Smashmouth - Allstar.mp3
    #EXTINF:208,Soulvation - Reset Your Brain
    D:\MP3\Februari 2006\Soulvation - Reset Your Brain.mp3
    #EXTINF:283,Sunblock - I'll Be Ready (Extended version)
    D:\MP3\Februari 2006\Sunblock - I'll Be Ready .mp3
    #EXTINF:247,Survivor - Eye Of The Tiger
    D:\MP3\Februari 2006\Survivor - Eye Of The Tiger.mp3
    #EXTINF:350,System F - Out of the Blue
    D:\MP3\Februari 2006\System F - Out Of The Blue.mp3
    #EXTINF:188,Tatu - Friend Or Foe
    D:\MP3\Februari 2006\Tatu - Friend Or Foe.mp3
    #EXTINF:260,The Bloodhound Gang - Uhn Tiss Uhn Tiss Uhn Tiss
    D:\MP3\Februari 2006\The Bloodhound Gang - Uhn Tiss Uhn Tiss Uhn Tiss.mp3
    #EXTINF:213,The Source ft. Candi Staton - You Got The Love
    D:\MP3\Februari 2006\The Source ft. Candi Staton - You Got The Love.mp3


    Hoe zorg ik ervoor dat ik het getal achter de #EXTINF: krijg (dus 288, 205, 204, 213 etc), de titel achter de komma bij het getal (dus artiest en titel) en de locatie (D:\mp3\februari 2006\young j...etc)

    Hoe zorg ik ervoor dat ik dat allemaal uit elkaar haal en apart in strings stop zodat ik elk gegeven in een record kan stoppen?

    Dus:
    $tijd = 213
    $titel = The Source ft. Candi Staton - You Got The Love
    $locatie = D:\MP3\Februari 2006\The Source ft. Candi Staton - You Got The Love.mp3

    Heel simpel beginseltje

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    php
    $data
    = file("playlist.m3u");

    foreach (
    $data as $entry)
    {

    }

    ?>
    Swetseneggerwoensdag 22 februari 2006 @ 19:45
    Simpele vraag.

    Ik gebruik nu addslashes in combinatie met een if(!get_magic_quotes_gpc()). Indien magic quotes uitstaat, slash ik mijn data dus.

    Maar op de een of andere manier krijg ik toch een foutmelding op mijn query wanneer een item een quote of dubbele quote bevat.

    Eerste vraag: waarom?

    Tweede vraag. Wat is het verschil met bovenstaande en mysql_real_escape_string?
    SuperRembowoensdag 22 februari 2006 @ 19:53
    Je doet iets als

    1$sql = "SELECT foo FROM bar WHERE baz='" . addslashes($string) . "'";


    en toch krijg je een foutmelding over een niet-geescapete quote?
    Swetseneggerwoensdag 22 februari 2006 @ 19:53
    quote:
    Op woensdag 22 februari 2006 18:12 schreef wobbel het volgende:
    Ik heb een .m3u file in het volgende formaat:
    [ code verwijderd ]

    Hoe zorg ik ervoor dat ik het getal achter de #EXTINF: krijg (dus 288, 205, 204, 213 etc), de titel achter de komma bij het getal (dus artiest en titel) en de locatie (D:\mp3\februari 2006\young j...etc)

    Hoe zorg ik ervoor dat ik dat allemaal uit elkaar haal en apart in strings stop zodat ik elk gegeven in een record kan stoppen?

    Dus:
    $tijd = 213
    $titel = The Source ft. Candi Staton - You Got The Love
    $locatie = D:\MP3\Februari 2006\The Source ft. Candi Staton - You Got The Love.mp3

    Heel simpel beginseltje
    [ code verwijderd ]
    www.php.net/explode
    Swetseneggerwoensdag 22 februari 2006 @ 19:57
    quote:
    Op woensdag 22 februari 2006 19:53 schreef SuperRembo het volgende:
    Je doet iets als
    [ code verwijderd ]

    en toch krijg je een foutmelding over een niet-geescapete quote?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    if(!get_magic_quotes_gpc())
                                    {
                                    
    $author=addslashes($author);
                                    
    $title=addslashes($title);
                                    
    $description=addslashes($description);
                                    }
    $query="INSERT INTO tabel
                (id,iuser,send,genre,ISBN,author,title,description,price,image,update_id,date)
                VALUES(0,48,1,'"
    .$genre."','".$isbn."','".$author."','".$title."','".$description."','".$price."','$image','$update_id',NOW())";
    ?>


    En ik krijg dus fouten terug van records welke niet geplaatst kunnen worden
    You have an error near "'s morgens in alle vroegte, xxxxx,xxxxx"

    Op de quotes krijg ik dus een error
    Ik heb het nu zojuist vervangen in:

    1
    2
    3
    4
    5
    <?php
    $author
    =mysql_real_escape_string($author);
    $title=mysql_real_escape_string($title);
    $description=mysql_real_escape_string($description);
    ?>


    Dus zonder te kijken of magic_quotes aanstaat
    En dan loopt mijn loopje zonder fouten door alle records. Het valt me wel op dat met de laatste de data niet escaped in de tabel staat.
    SuperRembowoensdag 22 februari 2006 @ 20:06
    Het verschil tussen addslashes en mysql_real_escape_string zit er zo te zien (in de manual) vooral in dat die laatste ook dingen als carriage return en newline tekens. En dat zou best het verschil kunnen maken als je description uit een textarea komt.
    De beste aanpak is denk ik om altijd als magic quotes aan staan stripslashes over $_GET / $_POST te halen. Als je de sql samenstelt dan gebruik je mysql_real_escape_string.
    quote:
    Het valt me wel op dat met de laatste de data niet escaped in de tabel staat.
    Dan staat magic quotes blijkbaar uit
    Swetseneggerwoensdag 22 februari 2006 @ 20:10
    quote:
    Op woensdag 22 februari 2006 20:06 schreef SuperRembo het volgende:
    Het verschil tussen addslashes en mysql_real_escape_string zit er zo te zien (in de manual) vooral in dat die laatste ook dingen als carriage return en newline tekens. En dat zou best het verschil kunnen maken als je description uit een textarea komt.
    De beste aanpak is denk ik om altijd als magic quotes aan staan stripslashes over $_GET / $_POST te halen. Als je de sql samenstelt dan gebruik je mysql_real_escape_string.
    Stripslashes als het uit een $_POST komt Waarom? magicquotes gaat pas bij een qeury toch slashen?

    In dit geval komt de data uit een CSV omdat ik 2000 records in 1 keer moet plaatsen. De code komt min of meer rechtstreeks uit de life website, waar de data WEL uit $_POST komt. Daar gaat het overigens goed.

    Maar slashed mysql_real_escape_string de data dan alleen 'virtueel' voor de query ofzo? Want zoals gezegd staat de data niet ge-escaped in de tabel.
    DutchBloodwoensdag 22 februari 2006 @ 20:16
    quote:
    Op woensdag 22 februari 2006 20:10 schreef Swetsenegger het volgende:

    [..]

    Stripslashes als het uit een $_POST komt Waarom? magicquotes gaat pas bij een qeury toch slashen?

    In dit geval komt de data uit een CSV omdat ik 2000 records in 1 keer moet plaatsen. De code komt min of meer rechtstreeks uit de life website, waar de data WEL uit $_POST komt. Daar gaat het overigens goed.

    Maar slashed mysql_real_escape_string de data dan alleen 'virtueel' voor de query ofzo? Want zoals gezegd staat de data niet ge-escaped in de tabel.
    magic_quotes slasht alles wat zich in $_POST/$_GET/etc. bevind?
    Ik gebruik doorgaans dit:
    1
    2
    3
    4
    5
    6
    7
    8
    9
       if(get_magic_quotes_gpc()) {
          foreach($_GET as $key => $getval) {
             $_GET[$key] = stripslashes($getval);
          }
          foreach($_POST as $key => $postval) {
             $_POST[$key] = stripslashes($postval);
          }
          
       }
    JeRawoensdag 22 februari 2006 @ 20:26
    quote:
    Op woensdag 22 februari 2006 20:10 schreef Swetsenegger het volgende:

    [..]

    Stripslashes als het uit een $_POST komt Waarom? magicquotes gaat pas bij een qeury toch slashen?
    Nope, zoals hierboven wordt gezegd wordt op alle $_POST, $_GET en $_COOKIE-variabelen addslashes() toegepast op het begin van het script. Normaal doe je dus een stripslashes() op die variabelen op het begin van het script indien magic_quotes_gpc aanstaat, en weer een addslashes() of mysql_real_escape_string() als je het in de query gaat zetten. En niet eerder
    Swetseneggerwoensdag 22 februari 2006 @ 20:27
    quote:
    Op woensdag 22 februari 2006 20:26 schreef JeRa het volgende:

    [..]

    Nope, zoals hierboven wordt gezegd wordt op alle $_POST, $_GET en $_COOKIE-variabelen addslashes() toegepast op het begin van het script. Normaal doe je dus een stripslashes() op die variabelen op het begin van het script indien magic_quotes_gpc aanstaat, en weer een addslashes() of mysql_real_escape_string() als je het in de query gaat zetten. En niet eerder
    Ok, ik slash dus data wanneer het de query ingaat (mits magic quotes uitstaan)
    Dus er wordt gepost, ik addslashes, ik insert.

    Dat is dus niet goed

    -edit- of eigenlijk wel, als ik tussendoor wat met de data doe strip ik wel slashes.
    SuperRembowoensdag 22 februari 2006 @ 20:32
    quote:
    Op woensdag 22 februari 2006 20:10 schreef Swetsenegger het volgende:

    [..]

    Stripslashes als het uit een $_POST komt Waarom? magicquotes gaat pas bij een qeury toch slashen?
    Zo magic is magic quotes gpc niet
    Magic quotes GPC is gewoon lomp en escaped alle quotes in Get Post en Cookies.
    Dat kan problemen geven als je die gegevens wil valideren. Of als je het helemaal niet in een sql string wil gebruiken, zouals een preview in html. Of als je een string op een bepaalde lengte af wil kappen; dan klopt de lengte niet en je het het risico dat je string eindigt op een backslash.
    En nu blijkt het ook niet eens altijd te werken
    DutchBloodwoensdag 22 februari 2006 @ 20:36
    quote:
    Op woensdag 22 februari 2006 20:32 schreef SuperRembo het volgende:

    [..]

    Zo magic is magic quotes gpc niet
    Magic quotes GPC is gewoon lomp en escaped alle quotes in Get Post en Cookies.
    Dat kan problemen geven als je die gegevens wil valideren. Of als je het helemaal niet in een sql string wil gebruiken, zouals een preview in html. Of als je een string op een bepaalde lengte af wil kappen; dan klopt de lengte niet en je het het risico dat je string eindigt op een backslash.
    En nu blijkt het ook niet eens altijd te werken
    En daarbij komt nog eens het feit dat je het risico loopt dubbel te escapen natuurlijk, bijvoorbeeld als je script van server wisselt.

    Wat dat betreft hadden ze magic qoutes/register_globals, en nog wat functies beter weg kunnen laten.
    Swetseneggerwoensdag 22 februari 2006 @ 20:40
    quote:
    Op woensdag 22 februari 2006 20:32 schreef SuperRembo het volgende:

    [..]

    Zo magic is magic quotes gpc niet
    Magic quotes GPC is gewoon lomp en escaped alle quotes in Get Post en Cookies.
    Dat kan problemen geven als je die gegevens wil valideren. Of als je het helemaal niet in een sql string wil gebruiken, zouals een preview in html. Of als je een string op een bepaalde lengte af wil kappen; dan klopt de lengte niet en je het het risico dat je string eindigt op een backslash.
    En nu blijkt het ook niet eens altijd te werken
    Fuck, met valideren en dergelijke had ik er eigenlijk helemaal nog niet bij nagedacht.
    Hmz, gelukkig staat het op de meeste servers uit, maar wel iets om rekening mee te houden.

    Thnks
    SuperRembowoensdag 22 februari 2006 @ 20:41
    quote:
    Op woensdag 22 februari 2006 20:36 schreef DutchBlood het volgende:
    Wat dat betreft hadden ze magic qoutes/register_globals, en nog wat functies beter weg kunnen laten.
    Dat is ook de aanbevolen instelling. Maar om een of andere reden staat het bij webhosts vaak wel aan. Het zal wel zijn omdat ouwe brakke scripts niet goed werken
    DutchBloodwoensdag 22 februari 2006 @ 20:47
    quote:
    Op woensdag 22 februari 2006 20:40 schreef Swetsenegger het volgende:

    [..]

    Fuck, met valideren en dergelijke had ik er eigenlijk helemaal nog niet bij nagedacht.
    Hmz, gelukkig staat het op de meeste servers uit, maar wel iets om rekening mee te houden.

    Thnks
    Daarom is het ook aan te raden om aan het begin van elk script iets te includen/require_once-en wat er voor zorgt dat er gestriptslashed wordt wanneer dat nodig is.
    DutchBloodwoensdag 22 februari 2006 @ 20:48
    quote:
    Op woensdag 22 februari 2006 20:41 schreef SuperRembo het volgende:

    [..]

    Dat is ook de aanbevolen instelling. Maar om een of andere reden staat het bij webhosts vaak wel aan. Het zal wel zijn omdat ouwe brakke scripts niet goed werken
    Uitermate irritant is dat ja. Heb vaak genoeg scripts die niet meer werken doordat het aan staat. Dit omdat sommige variabelen dan ineens 'vervangen' worden.
    Swetseneggerwoensdag 22 februari 2006 @ 20:50
    quote:
    Op woensdag 22 februari 2006 20:47 schreef DutchBlood het volgende:

    [..]

    Daarom is het ook aan te raden om aan het begin van elk script iets te includen/require_once-en wat er voor zorgt dat er gestriptslashed wordt wanneer dat nodig is.
    Inderdaad binnenkort een functie voor schrijven
    Dus... stripslashes van alle userinput.
    mysql_rela_escape_string bij ALLE data welke de db ingaat.
    Dat laatste voorwaardelijk (dus if(!get_magic_quotes_gpc())) of ALTIJD?
    quote:
    En daarbij komt nog eens het feit dat je het risico loopt dubbel te escapen natuurlijk, bijvoorbeeld als je script van server wisselt.
    Dat voorkom je door te controleren of magic quotes GPC aanstaat
    JeRawoensdag 22 februari 2006 @ 20:54
    @Swetsenegger

    Stripslashes() op het begin van je script, afhankelijk van get_magic_quotes_gpc().
    Áltijd addslashen als het in een query gaat
    DutchBloodwoensdag 22 februari 2006 @ 20:55
    quote:
    Op woensdag 22 februari 2006 20:50 schreef Swetsenegger het volgende:

    [..]

    Inderdaad binnenkort een functie voor schrijven
    Dus... stripslashes van alle userinput.
    mysql_rela_escape_string bij ALLE data welke de db ingaat.
    Dat laatste voorwaardelijk (dus if(!get_magic_quotes_gpc())) of ALTIJD?
    [..]

    Dat voorkom je door te controleren of magic quotes GPC aanstaat
    Van http://nl3.php.net/manual/nl/function.get-magic-quotes-gpc.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    if (get_magic_quotes_gpc()) {
       function stripslashes_deep($value)
       {
           $value = is_array($value) ?
                       array_map('stripslashes_deep', $value) :
                       stripslashes($value);

           return $value;
       }

       $_POST = array_map('stripslashes_deep', $_POST);
       $_GET = array_map('stripslashes_deep', $_GET);
       $_COOKIE = array_map('stripslashes_deep', $_COOKIE);

    ?>
    SuperRembowoensdag 22 februari 2006 @ 20:58
    quote:
    Op woensdag 22 februari 2006 20:47 schreef DutchBlood het volgende:

    [..]

    Daarom is het ook aan te raden om aan het begin van elk script iets te includen/require_once-en wat er voor zorgt dat er gestriptslashed wordt wanneer dat nodig is.
    Op apache kan je het ook uitzetten door een regeltje in .htaccess:

    1php_flag magic_quotes_gpc off
    SuperRembowoensdag 22 februari 2006 @ 21:03
    quote:
    Op woensdag 22 februari 2006 20:55 schreef DutchBlood het volgende:

    [..]

    Van http://nl3.php.net/manual/nl/function.get-magic-quotes-gpc.php
    [ code verwijderd ]
    Kan dat eigelijk niet beter (sneller) met array_walk?
    DutchBloodwoensdag 22 februari 2006 @ 21:25
    Volgens de comments op php.net niet.

    Maar werkt die regel in de .htaccess altijd? Of heb je er rechten voor nodig @ apache.
    mscholwoensdag 22 februari 2006 @ 21:32
    quote:
    Op woensdag 22 februari 2006 16:01 schreef JeRa het volgende:

    [..]

    Ik snap niet wat je wilt doen. Wil je externe pagina's opvragen en zodra dit niet lukt iets anders doen? What about zoiets:
    [ code verwijderd ]
    ik zal proberen het te verduidelekijen

    elke dag om 0:00 wordt mijn php.exe aangeroepen met een script, dit script leest d.m.v. file() een bepaalde pagina waar statistieken op staan. (en zet ze in de database, als ze gevonden zijn anders doet hij niks)

    Wat doet het script precies:
    laad de pagina d.m.v. file() in de variable $lines
    vervolgens gaat hij een while in om de regel te vinden waar de statistieken in staan (d.m.v. een preg_match()), als hij een match heeft gevonden dan zet hij het resultaat in de database:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    $i
    =80;
    $lines = file('http://URL');
    while(
    $i &lt; 300)
    {
    preg_match_all($regex,$lines[$i],$needle);
      
    $needle = split(' ',$needle[0][0]);
      if(
    $needle[0] != '' && is_numeric($needle[0]))
      {
        
    $query = RunQuery("INSERT INTO");
        
    CloseConDB($con);
        exit;
      }
    $i++;
    }
    ?>

    mijn (probleem)punten:
    1. de pagina die wordt geladen veranderdt veel en heeft dus niet telkens een standaard regel nummer waar de statistieken staan
    - kan dit efficienter?

    2. als de site plat ligt of mijn internetverbinding is overbelast dan krijg ik een "pagina kan niet worden gevonden" pagina die wordt gelezen.
    - hier zit me echte probleem: ik wil dat ik dit in het script kan op vangen door bijvoorbeeld te zeggen dat het script nogmaals de pagina moet proberen te laden totdat het lukt..
    ik hoop dat het nu iets duidelijker is...
    JeRawoensdag 22 februari 2006 @ 21:37
    @mschol

    1. Het aantal regels ontdek je door count($lines) op te vragen
    2. Als de pagina écht down is kun je er niets aan doen natuurlijk. Maar kun je geen loopje bedenken dat loopt zolang het aantal regels 0 is?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $maxTries = 20;
    $tries = 0;
    do {
        if ($tries > 0) {
            sleep(2);
        }
        $lines = file('url');
        $tries++;
    } while ((count($lines) == 0) && ($tries < $maxTries));

    Niet netjes, maar het is een simpel voorbeeld van hoe je zoiets zou kunnen afvangen
    mscholwoensdag 22 februari 2006 @ 21:47
    quote:
    Op woensdag 22 februari 2006 21:37 schreef JeRa het volgende:
    @mschol

    2. Als de pagina écht down is kun je er niets aan doen natuurlijk. Maar kun je geen loopje bedenken dat loopt zolang het aantal regels 0 is?
    [ code verwijderd ]

    Niet netjes, maar het is een simpel voorbeeld van hoe je zoiets zou kunnen afvangen
    probleem is dat wanneer de pagina down is hij nooit leeg is (je krijgt immers de foutmeldingspagina van windows ofzo terug (geen idee waarom dit gebeurd maar is zo)
    maar iuk moet dus alleen eff uitvogelen hoe lang de error pagina is dan kan ik er wel wat mee denk ik

    of kan ik de http status code misschien ophalen ergens met php?
    JeRawoensdag 22 februari 2006 @ 22:00
    quote:
    Op woensdag 22 februari 2006 21:47 schreef mschol het volgende:

    [..]

    of kan ik de http status code misschien ophalen ergens met php?
    Niet op deze manier, dat kan wel als je met sockets gaat werken. Beter controleer je gewoon of bepaalde woorden in de array voorkomen, zoals 'Page not found' oid
    Swetseneggerwoensdag 22 februari 2006 @ 22:10
    quote:
    Op woensdag 22 februari 2006 22:00 schreef JeRa het volgende:
    Beter controleer je ...
    JeRa is Maroc?
    JeRawoensdag 22 februari 2006 @ 22:12
    quote:
    Op woensdag 22 februari 2006 22:10 schreef Swetsenegger het volgende:

    [..]

    JeRa is Maroc?
    Je weet togg, sssssukkel.

    Nah, wtf?
    Swetseneggerwoensdag 22 februari 2006 @ 22:15
    quote:
    Op woensdag 22 februari 2006 22:12 schreef JeRa het volgende:

    [..]

    Je weet togg, sssssukkel.

    Nah, wtf?
    Boinkdonderdag 23 februari 2006 @ 09:34
    Hoi

    Op e.o.a. manier wil de unlink niet werken
    Zie
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    else if(isset($_GET["state"]) && $_GET["state"] == "delete") {

        $cnt = $db->query("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'");

        $db->doQuery("DELETE FROM images WHERE img_unique = '".$_GET["id"]."'");

       $db->doQuery("DELETE FROM cars WHERE car_unique = '".$_GET["id"]."'");

       for($x=0; $x<$cnt[0][0]; $x++) {

       unlink("../files/".$_GET["id"]."_".($x+1).".jpg");

       }


    Ik heb dit volledig via de handleiding van php.net gedaan, ik zit in een directory waar hij eerst uit moet en dan in de files directory de foto's moet deleten,
    Dit werkt wel op de huidige server alleen niet op de php5 i.c.m. mysql5 server waar binnenkort naar gemigreerd wordt.
    Kan iemand mij redden hier?
    #ANONIEMdonderdag 23 februari 2006 @ 09:45
    tvp mbt regexp
    ikke_ookdonderdag 23 februari 2006 @ 10:01
    quote:
    Op donderdag 23 februari 2006 09:34 schreef Boink het volgende:
    Hoi

    Op e.o.a. manier wil de unlink niet werken
    Zie
    [ code verwijderd ]

    Ik heb dit volledig via de handleiding van php.net gedaan, ik zit in een directory waar hij eerst uit moet en dan in de files directory de foto's moet deleten,
    Dit werkt wel op de huidige server alleen niet op de php5 i.c.m. mysql5 server waar binnenkort naar gemigreerd wordt.
    Kan iemand mij redden hier?
    Wat voor een foutmelding krijg je dan?
    probeer anders dit eens :
    1
    2
    3
    4
    5
    6
    $file = "../files/".$_GET["id"]."_".($x+1).".jpg";
    if(is_file($file){
           unlink($file);
    }else{
           echo $file." bestaat niet.";
    }

    En moet dit:
    1$cnt = $db->query("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'");

    niet dit zijn:
    1$cnt = $db->doQuery("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'");
    Boinkdonderdag 23 februari 2006 @ 12:37
    Ik heb je even toegevoegd op msn als je geen bezwaar hebt
    ikke_ookdonderdag 23 februari 2006 @ 12:46
    Daar heb ik geen bezwaar tegen, maar ik zit niet de hele dag op msn, en tis handiger om het via hier te doen, want er zitten hier een hoop mensen die beter zijn dan ik.
    Boinkdonderdag 23 februari 2006 @ 13:06
    Parse error: syntax error, unexpected '{' in /home/testteam/public_html/autogespot/admin/viewcars.php on line 163

    http://dev.wscp.nu/~testteam/autogespot/admin/viewcars.phps

    Krijg ik nu
    Darkomendonderdag 23 februari 2006 @ 13:08
    Regel 163: if(is_file($file){

    Dat moet zijn : if(is_file($file)){

    Je bent een afsluitend hekje )vergeten
    ikke_ookdonderdag 23 februari 2006 @ 13:09
    ja..ik ben daar een haakje vergeten....
    1if(is_file($file){

    moet zijn :
    1if(is_file($file)){
    Boinkdonderdag 23 februari 2006 @ 13:48
    Op lijn 555 zit ook nog een fout waar ik ook niet achter kan komen, niet dat unlink nu al werkt maar maybe komt het daardoor.
    Notice: Undefined variable: type in /home/testteam/public_html/autogespot/admin/viewcars.php on line 555


    http://dev.wscp.nu/~testteam/autogespot/admin/viewcars.phps

    Ik heb trouwens dit hele script niet geschreven, dat heeft onze huisscripter gedaan maar die is tijdelijk afwezig. En aangezien we in maart verhuizen naar php5 en mysql5 moeten we vlekkeloos overgaan En ben ik nu degene met de meeste "kennis" van php, dus zal ik het moeten proberen op te lossen

    [ Bericht 37% gewijzigd door Boink op 23-02-2006 13:54:35 ]
    ViPeRIIdonderdag 23 februari 2006 @ 13:54
    moet dat geen $_GET['type'] zijn?
    Hij herkent de variable $type niet.
    anders moet je ergens anders in je script $type declareren.

    Verder is dit een notice, en is dus geen fout
    mscholdonderdag 23 februari 2006 @ 14:06
    quote:
    Op donderdag 23 februari 2006 13:54 schreef ViPeRII het volgende:
    moet dat geen $_GET['type'] zijn?
    Hij herkent de variable $type niet.
    anders moet je ergens anders in je script $type declareren.

    Verder is dit een notice, en is dus geen fout
    het gebruik van $type voor het ophalen van die get/post variable is tegenwoordig toch ook sterk afgeraden??
    had ook iets met register_globals te maken meen ik?
    Boinkdonderdag 23 februari 2006 @ 14:09
    quote:
    Op donderdag 23 februari 2006 13:54 schreef ViPeRII het volgende:
    moet dat geen $_GET['type'] zijn?
    Hij herkent de variable $type niet.
    anders moet je ergens anders in je script $type declareren.

    Verder is dit een notice, en is dus geen fout
    Top, dat isook weer weg,

    nu die unlink nog, want dat werkt ook nog steeds niet. Ik heb nu dit.

    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
    else if(isset($_GET["state"]) && $_GET["state"] == "delete") {

        $cnt = $db->doQuery("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'"); 

        $db->doQuery("DELETE FROM images WHERE img_unique = '".$_GET["id"]."'");

       $db->doQuery("DELETE FROM cars WHERE car_unique = '".$_GET["id"]."'");

       for($x=0; $x<$cnt[0][0]; $x++) {

    $file = "../files/".$_GET["id"]."_".($x+1).".jpg";

     if(is_file($file)){ 

           unlink($file);

    }else{

           echo $file." bestaat niet.";

    }
       }

       header("Location: viewcars.php");

    }


    Het verwijderen uit de database lukt wel.. De files alleen niet.
    DutchBlooddonderdag 23 februari 2006 @ 14:13
    quote:
    Op donderdag 23 februari 2006 14:09 schreef Boink het volgende:

    [..]

    Top, dat isook weer weg,

    nu die unlink nog, want dat werkt ook nog steeds niet. Ik heb nu dit.
    [ code verwijderd ]

    Het verwijderen uit de database lukt wel.. De files alleen niet.
    Heeft je script wel de juiste rechten? Chmod eens 777 anders.
    Boinkdonderdag 23 februari 2006 @ 14:51
    quote:
    Op donderdag 23 februari 2006 14:13 schreef DutchBlood het volgende:

    [..]

    Heeft je script wel de juiste rechten? Chmod eens 777 anders.
    Ja alles is gewoon 777
    #ANONIEMdonderdag 23 februari 2006 @ 15:18
    Als ik wel uit een database kan lezen, maar niks in kan voeren, waar ligt dat dan hoogstwaarschijnlijk aan, even ervan uit gaande dat ik geen typo's heb gemaakt?
    #ANONIEMdonderdag 23 februari 2006 @ 15:27
    http://www.toeps.nl/Testbase/Smoels.phps

    Hier dus de code.
    Het is een invoerpagina voor het smoelenboek van de Dierenbescherming.

    Het ophalen van info uit de database werkt wel:
    http://www.toeps.nl/Testbase/Testbase.php
    http://www.toeps.nl/Testbase/Testbase.phps
    #ANONIEMdonderdag 23 februari 2006 @ 15:39
    Ook na het zetten van leuke ` tekentjes bij de databasenamen lukt het niet.
    Nioxdonderdag 23 februari 2006 @ 15:42
    quote:
    Op donderdag 23 februari 2006 15:39 schreef Toeps het volgende:
    Ook na het zetten van leuke ` tekentjes bij de databasenamen lukt het niet.
    Waarschijnlijk klopt je query niet. Vervang or die("FOUT!") eens door (mysql_error ()) en post de error die je krijgt hier.

    En post je code met je INSERT query eens hier .
    #ANONIEMdonderdag 23 februari 2006 @ 16:07
    Hmm, phps werkt niet op mijn host, dat is waar ook. Ff ergens anders uploaden...

    http://stud.cmd.hro.nl/0764519/jaar1/Smoels.phps
    #ANONIEMdonderdag 23 februari 2006 @ 16:09
    Als ik mysql_error doe, krijg ik gewoon een wit scherm en in de source staan alleen <body></body>

    Nioxdonderdag 23 februari 2006 @ 16:18
    Er staat $_POST["kittencentrale"] tussen je values, maar die is niet terug te vinden in je kolommenlijst.

    Waar heb je trouwens op zo'n prachtige manier queries leren schrijven .
    #ANONIEMdonderdag 23 februari 2006 @ 16:21
    Sniegoed?
    Ik heb het uit een boek en zo, want op school (CMD) leren ze me niet zo veel.

    Kittencentrale vergeten?! Da's alles?!
    #ANONIEMdonderdag 23 februari 2006 @ 16:23
    Aaah!!!! Mijn naam is STOMME IDIOOT!!

    Nioxdonderdag 23 februari 2006 @ 16:26
    quote:
    Op donderdag 23 februari 2006 16:21 schreef Toeps het volgende:
    Sniegoed?
    Ik heb het uit een boek en zo, want op school (CMD) leren ze me niet zo veel.
    Ieder z'n eigen stijl natuurlijk, maar ik vind dit verre van prettig lezen. Weinig overzichtelijk en dan maak je makkelijk van die kleine klotefoutjes.
    quote:
    Kittencentrale vergeten?! Da's alles?!
    quote:
    Op donderdag 23 februari 2006 16:23 schreef Toeps het volgende:
    Aaah!!!! Mijn naam is STOMME IDIOOT!!

    Whehehe

    Edit:

    Plak er voortaan eens zoiets in:

    1
    2
    3
    4
    <?php
    if(!$result = mysql_query($sql, $db))
      echo "Deze query verneukt: ".$query.", op deze manier: ".mysql_error().".";
    ?>


    [ Bericht 16% gewijzigd door Niox op 23-02-2006 16:32:49 ]
    Darkomendonderdag 23 februari 2006 @ 17:16
    @boink geef eens het volledige path op ipv $file = "../files/...
    Swetseneggerdonderdag 23 februari 2006 @ 22:24
    Ik heb ZCE vast gezet, dus ik ben nu bezig in het practise testboek.

    Kom ik er achter dat php EERST aftrekt en pas daarna optelt ipv het Meneer Van Dalen Wacht Op Antwoord alternatief

    dus 20-10+4+2=16 en niet 20-10+4+2=4 zoals ik verwacht. Ligt het mij of is dat vreemd?

    http://nl2.php.net/manual/nl/language.operators.php#language.operators.precedence
    mscholdonderdag 23 februari 2006 @ 22:26
    quote:
    Op donderdag 23 februari 2006 22:24 schreef Swetsenegger het volgende:
    Ik heb ZCE vast gezet, dus ik ben nu bezig in het practise testboek.

    Kom ik er achter dat php EERST aftrekt en pas daarna optelt ipv het Meneer Van Dalen Wacht Op Antwoord alternatief

    dus 20-10+4+2=16 en niet 20-10+4+2=4 zoals ik verwacht. Ligt het mij of is dat vreemd?
    dan splits je je berekening in 2en?
    Swetseneggerdonderdag 23 februari 2006 @ 22:27
    quote:
    Op donderdag 23 februari 2006 22:26 schreef mschol het volgende:

    [..]

    dan splits je je berekening in 2en?
    Daar gaat het niet om, het is een testvraag uit een proefexamen
    Maar plus en min worden dus 'gelijk' geinterpreteerd. En wie het eerst komt het eerst maalt begrijp ik uit de manual.
    ikke_ookdonderdag 23 februari 2006 @ 22:28
    Nee het is volkomen logisch. Die meneer van Dale wacht op antwoord is niet helemaal lekker eigenlijk
    Hij klopt wel MAAR, optellen en aftrekken hebben gelijke prioriteit en worden behandeld in volgorde dat ze staan.
    Vermenigvuldigen en delen hetzelfde verhaal, ze worden behandeld in volgorde dat ze staan.
    (vermenigvuldigen/delen gaat wel voor optellen/aftrekken)

    -edit-
    Wat je hierboven zegt idd
    Tis standaard in de wiskunde trouwens, niet alleen in php
    Swetseneggerdonderdag 23 februari 2006 @ 22:33
    quote:
    Op donderdag 23 februari 2006 22:28 schreef ikke_ook het volgende:

    Tis standaard in de wiskunde trouwens, niet alleen in php
    Dan ligt het aan mij .
    Die vraag heb ik alvast fout, maar ik vergeet het niet meer (net als de << operator welke in dezelfde opgave voorkwam. Ik kon hem niet, hoewel ik een vermoeden had)
    DutchBlooddonderdag 23 februari 2006 @ 23:07
    Met wat haakjes is dit vrij makkelijk op te lossen natuurlijk. Wiskundig èn mogelijk in php.
    Swetseneggerdonderdag 23 februari 2006 @ 23:09
    quote:
    Op donderdag 23 februari 2006 23:07 schreef DutchBlood het volgende:
    Met wat haakjes is dit vrij makkelijk op te lossen natuurlijk. Wiskundig èn mogelijk in php.
    quote:
    Op donderdag 23 februari 2006 22:27 schreef Swetsenegger het volgende:

    [..]

    Daar gaat het niet om, het is een testvraag uit een proefexamen
    DutchBlooddonderdag 23 februari 2006 @ 23:13
    quote:
    Op donderdag 23 februari 2006 23:09 schreef Swetsenegger het volgende:

    [..]


    [..]
    Ok, dan heb ik niks gezegd.

    Voor welk examen ben je aan het oefenen dan?
    Lightdonderdag 23 februari 2006 @ 23:21
    quote:
    Op donderdag 23 februari 2006 23:13 schreef DutchBlood het volgende:

    [..]

    Ok, dan heb ik niks gezegd.

    Voor welk examen ben je aan het oefenen dan?
    Lezen blijft lastig zeker
    quote:
    Op donderdag 23 februari 2006 22:24 schreef Swetsenegger het volgende:
    Ik heb ZCE vast gezet, dus ik ben nu bezig in het practise testboek.
    Lightdonderdag 23 februari 2006 @ 23:22
    Ow, succes Swets
    Tijnvrijdag 24 februari 2006 @ 01:37
    Ik heb een tijdje geleden Pear geinstalleerd op m'n Ubuntu-machine. Dat leek toen wel goed te gaan. Ik kan ook packages toevoegen enzo, geen klachten.

    Vanavond had ik wat tijd over en dacht ik, laat ik er eens wat mee doen. Dus ik heb Auth geinstalleerd om te kijken of het allemaal werkt. Ik heb in m'n database een tabel "auth" gemaakt met ruimte voor usernames en passwords en daar als test mezelf ingezet met een MD5 password. Vervolgens heb ik het voorbeeld uit de handleiding gekopieerd, de database-gegevens ingevuld en in een bestand genaamd test.php op m'n server gezet.

    Dat leverde dit op: Fatal error: Cannot unset string offsets in /usr/share/pear/Auth.php on line 180

    Wat nu?
    Boinkvrijdag 24 februari 2006 @ 10:42
    Fixed

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    else if(isset($_GET["state"]) && $_GET["state"] == "delete") {

        $cnt = $db->query("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'");

        $db->doQuery("DELETE FROM images WHERE img_unique = '".$_GET["id"]."'");

       $db->doQuery("DELETE FROM cars WHERE car_unique = '".$_GET["id"]."'");

       for($x=0; $x<$cnt[0][0]; $x++) {

         unlink("../files/".$_GET["id"]."_".($x+1).".jpg");
         print("../files/".$_GET["id"]."_".($x+1).".jpg<br />");

       }
    ViPeRIIvrijdag 24 februari 2006 @ 10:50
    quote:
    Op vrijdag 24 februari 2006 01:37 schreef Tijn het volgende:
    Ik heb een tijdje geleden Pear geinstalleerd op m'n Ubuntu-machine. Dat leek toen wel goed te gaan. Ik kan ook packages toevoegen enzo, geen klachten.

    Vanavond had ik wat tijd over en dacht ik, laat ik er eens wat mee doen. Dus ik heb Auth geinstalleerd om te kijken of het allemaal werkt. Ik heb in m'n database een tabel "auth" gemaakt met ruimte voor usernames en passwords en daar als test mezelf ingezet met een MD5 password. Vervolgens heb ik het voorbeeld uit de handleiding gekopieerd, de database-gegevens ingevuld en in een bestand genaamd test.php op m'n server gezet.

    Dat leverde dit op: Fatal error: Cannot unset string offsets in /usr/share/pear/Auth.php on line 180

    Wat nu?
    Humz het lijkt wel of de string offsets geen waarde heeft, of helemaal niet bestaat.
    Kan je auth.php hier niet plaatsen? Dan kunnen we verder kijken,...

    Volgens mij heb ik het trouwens al gevonden:
    http://pear.php.net/bugs/bug.php?id=4371

    (
    exactly the same error, but for a "File" auth backend.

    this is my call the Auth constructor:

    $a = new Auth("File", ".htpasswd");

    this is the error:
    Fatal error: Cannot unset string offsets in
    /usr/local/lib/php/pear/Auth.php on line 180

    this is a patch/fix which I have made to Auth.php (v1.2.3)

    function Auth($storageDriver, $options = '', $loginFunction = '',
    $showLogin = true)
    {
    if (is_array($options) &&
    !empty($options['sessionName'])) {
    $this->_sessionName = $options['sessionName'];
    unset($options['sessionName']);
    }

    note that is checking whether $options is an array before attempting to
    index into it (indexing into a string with an associative key, can't
    work).
    )
    Tijnvrijdag 24 februari 2006 @ 11:20
    Hey, bedankt ViPeRII! Het werkt

    Wel een beetje jammer dat zo'n standaardpakketje al gelijk problemen oplevert
    ViPeRIIvrijdag 24 februari 2006 @ 11:21
    Dat wel, is een bug in de laatste release... komt wel weer goed.
    Wat doet het pakketje pear eigenlijk?
    Tijnvrijdag 24 februari 2006 @ 11:24
    Pear is een systeem voor standaardscripts, zodat je niet elke keer het wiel aan het uitvinden bent.
    Tijnvrijdag 24 februari 2006 @ 11:58
    quote:
    Op vrijdag 24 februari 2006 11:24 schreef Tijn het volgende:
    Pear is een systeem voor standaardscripts, zodat je niet elke keer het wiel aan het uitvinden bent.
    Maar eerlijk gezegd word ik er nog niet echt vrolijk van. Ik heb nu 3 packages geprobeerd (Auth, Auth_HTTP en HTML_BBCodeParser) en ze geven alledrie fouten als ik het standaardvoorbeeld uit de documentatie probeer
    Swetseneggervrijdag 24 februari 2006 @ 12:36
    quote:
    Op vrijdag 24 februari 2006 11:58 schreef Tijn het volgende:

    [..]

    Maar eerlijk gezegd word ik er nog niet echt vrolijk van. Ik heb nu 3 packages geprobeerd (Auth, Auth_HTTP en HTML_BBCodeParser) en ze geven alledrie fouten als ik het standaardvoorbeeld uit de documentatie probeer
    Ik heb het nog nooit gebruikt.
    Voornamleijk omdat ik graag zelf het wiel WIL uitvinden omdat ik op die manier een betere php'er denk te worden.

    Maar ik kan me voorstellen dat ik uiteindelijk ook pear zal willen gebruiken en dan zou ik hier ook niet vrolijk van worden inderdaad
    Tijnvrijdag 24 februari 2006 @ 13:02
    quote:
    Op vrijdag 24 februari 2006 12:36 schreef Swetsenegger het volgende:

    [..]

    Ik heb het nog nooit gebruikt.
    Voornamleijk omdat ik graag zelf het wiel WIL uitvinden omdat ik op die manier een betere php'er denk te worden.
    Dat is ook ongetwijfeld zo Ik heb zelf niet zo de behoefte om ontzettend goed in PHP te worden, als ik maar af en toe iets functioneels in elkaar kan smijten. En daar leek Pear me nou ideaal voor. Helaas gaat dat feest dus niet door.
    Japiejooovrijdag 24 februari 2006 @ 13:11
    tvp
    ViPeRIIvrijdag 24 februari 2006 @ 14:01
    Swetsenegger. jij ook al? Vind het altijd leuk om een nieuw systeem van scratch op te bouwen
    Daar wordt je ook steeds beter van, merk ik zelf al
    #ANONIEMvrijdag 24 februari 2006 @ 14:07
    Ik heb al gegoogled maar ik kon niks nuttigs vinden dus post ik het hier: Weet iemand tutorials over Excel (xls) bestanden in te lezen met PHP?
    Swetseneggervrijdag 24 februari 2006 @ 15:10
    quote:
    Op vrijdag 24 februari 2006 14:01 schreef ViPeRII het volgende:
    Swetsenegger. jij ook al? Vind het altijd leuk om een nieuw systeem van scratch op te bouwen
    Daar wordt je ook steeds beter van, merk ik zelf al
    Absoluut.
    Wanneer ik nu scripts tegen kom van een jaar geleden, kan ik mijn eigen progressie zien
    Overigens zie ik ook wel eens een handgheidje welke ik toen eenmalig heb gebruikt en vergeten ben... 'Heee..., dat is handig!'
    the_disheavervrijdag 24 februari 2006 @ 15:27
    quote:
    Op vrijdag 24 februari 2006 14:07 schreef Scorpie het volgende:
    Ik heb al gegoogled maar ik kon niks nuttigs vinden dus post ik het hier: Weet iemand tutorials over Excel (xls) bestanden in te lezen met PHP?
    Kun je er geen CSV-file van maken?

    edit: van xml naar csv converteren moet via php lukken. FF googlen.

    [ Bericht 9% gewijzigd door the_disheaver op 24-02-2006 15:40:44 ]
    ViPeRIIvrijdag 24 februari 2006 @ 15:41
    Niet goed gegoogled

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

    Altijd al een Excel file willen lezen en de inhoud hergebruiken? Of een OpenOffice.org file willen maken? Of een HTML or CSV file willen inlezen en de tabellen eruit halen? Of converteren van een Excel bestand naar een OOo Calc bestand? Gebruik deze class. Instructies (helaas) in het Engels hieronder en in de files zelf.

    --------------------------------

    SPREADSHEET WRAPPER CLASS (pkpsl_spreadsheet.class.php)

    Uses PHP5, PEAR

    Defines the Spreadsheet class that supports all Spreadsheet file types

    Implements a simple reader and writer (without any formating capabilities)
    #ANONIEMvrijdag 24 februari 2006 @ 15:46
    thx man, tis gelukt, wel zonder PEAR
    LeeHarveyOswaldvrijdag 24 februari 2006 @ 16:44
    hmm ik krijg nu steeds foutmeldingen op een punt waar ik dit niet verwacht...

    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if ($type == 2){
                    
    $typeinfo = "wel"
                    
    }
                    else {
                    
    $typeinfo = "niet"
                    
    }
    ?>

    Ik krijg op de regel van de eerste } de volgende melding:
    Parse error: parse error, unexpected '}' in /usr/home/jeroen/www/forum/chatmod.php on line 38

    Iemand enig idee wat hier mis is? het aantal open en gesloten {} lusjes klopt..
    Swetseneggervrijdag 24 februari 2006 @ 16:45
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if ($type == 2){
                    
    $typeinfo = "wel";
                    }
                    else {
                    
    $typeinfo = "niet";
                    }
    ?>
    LeeHarveyOswaldvrijdag 24 februari 2006 @ 16:52
    Ah stom!!! thq
    JeRavrijdag 24 februari 2006 @ 17:01
    En de korte schrijfwijze daarvan, om dat soort foutmeldingen te voorkomen
    1
    2
    3
    <?php
    $typeinfo
    = ($type == 2) ? 'wel' : 'niet';
    ?>
    Swetseneggerzaterdag 25 februari 2006 @ 12:54
    Weten jullie nog van mijn mail probleem?
    Het ziet er naar uit dat het ALLEEN bij planet mail adressen fout gaat
    Die breekt dus mails halverwege af. Als ze nou gewoon simpelweg geblokkeerd werden, zou het kunnen zijn dat mails als spam werden aangemarkt, maar blijkbaar gaat er wat mis op de planet mailserver
    c0nd0rzaterdag 25 februari 2006 @ 21:38
    Ik heb een rechtensysteem die bitwise de rechten toekent dus 1,2,4,8 enz.
    Ik heb rechten die bij elkaar opgeteld max. 63 zijn (dus tm 32)
    Op een pagina waar je de gebruiker kan wijzigen (en dus ook rechten) laat ik een aantal checkboxen zien die de rechten aangeven.
    De huidige rechten moeten daarbij aangevinkt zijn natuurlijk.
    Dit doet hij alleen op 1 of andere manier niet voor bit 1 en bit 8.
    Iemand enig idee waarom niet?
    Dit is de code:

    $result['urID'] = de rechten die de gebruiker heeft (63 in dit geval, dus alle checkboxjes moeten aan)
    $row['urID'] = de rechten uit de database (1,2,4,8,16,32)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <? 
    while($row = mysql_fetch_assoc($result1)) 

    if(($result['urID'] & $row['urID'])) 

    $check = ' checked = "checked"'; 

    else 

    $check = ''; 



    echo '<tr><td>' . $row['urName'] . '</td><td><input type = "checkbox" name = "rights[]" id = "rights[]" value = "' . $row['urID'] . '"' . $check . ' /></td></tr>'; 


    ?> 


    Hierbij krijg ik 6 checkboxjes (ik heb dus 6 rechten) waarbij ze bij recht 63 allemaal aangevinkt zijn behalve 1 en 8.
    Iemand enig idee?
    Swetseneggerzaterdag 25 februari 2006 @ 21:41
    Kan je controleren of die bits ook daadwerkelijk geset zijn?

    In bovenstaande code zou ik alleen nog een spatie kunnen toevoegen, maar ik zie geen opmerkelijke fout

    value = "' . $row['urID'] . '"' . $check . ' /> spatie:
    value = "' . $row['urID'] . '" ' . $check . ' />
    c0nd0rzaterdag 25 februari 2006 @ 21:45
    quote:
    Op zaterdag 25 februari 2006 21:41 schreef Swetsenegger het volgende:
    Kan je controleren of die bits ook daadwerkelijk geset zijn?

    In bovenstaande code zou ik alleen nog een spatie kunnen toevoegen, maar ik zie geen opmerkelijke fout

    value = "' . $row['urID'] . '"' . $check . ' /> spatie:
    value = "' . $row['urID'] . '" ' . $check . ' />
    Als ik de bitwise functie laat echoen binnen de while krijg ik een rijtje:
    0
    2
    4
    0
    02
    22

    Degene waar nullen staan zijn dus ook niet aangevinkt.
    Swetseneggerzaterdag 25 februari 2006 @ 21:56
    quote:
    Op zaterdag 25 februari 2006 21:45 schreef c0nd0r het volgende:

    [..]

    Als ik de bitwise functie laat echoen binnen de while krijg ik een rijtje:
    0
    2
    4
    0
    02
    22

    Degene waar nullen staan zijn dus ook niet aangevinkt.
    Mjah, ik begrijp er dan geen ruk van wat eruit zou moeten komen, want ik had 1 2 4 8 16 32 verwacht

    Anyway, je zegt zelf dat daar waar de nullen staan je checkboxes niet aangevinkt zijn. Dat klopt toch?
    c0nd0rzaterdag 25 februari 2006 @ 22:00
    quote:
    Op zaterdag 25 februari 2006 21:56 schreef Swetsenegger het volgende:

    [..]

    Mjah, ik begrijp er dan geen ruk van wat eruit zou moeten komen, want ik had 1 2 4 8 16 32 verwacht

    Anyway, je zegt zelf dat daar waar de nullen staan je checkboxes niet aangevinkt zijn. Dat klopt toch?
    Dat zou je inderdaad verwachten!
    Maar dat klopt niet want de rechten zijn 63 (dus 1 + 2 + 4 + 8 + 16 + 32) dus alle bitjes die langskomen zou die moeten bevatten maar op 1 of andere manier dus niet
    Swetseneggerzaterdag 25 februari 2006 @ 22:01
    quote:
    Op zaterdag 25 februari 2006 22:00 schreef c0nd0r het volgende:

    [..]

    Dat zou je inderdaad verwachten!
    Maar dat klopt niet want de rechten zijn 63 (dus 1 + 2 + 4 + 8 + 16 + 32) dus alle bitjes die langskomen zou die moeten bevatten maar op 1 of andere manier dus niet
    Wat zeg je nou?

    Geef nou je code eens die de bitjes set en unset. Hoe set je die bitjes?
    c0nd0rzaterdag 25 februari 2006 @ 22:06
    quote:
    Op zaterdag 25 februari 2006 22:01 schreef Swetsenegger het volgende:

    [..]

    Wat zeg je nou?

    Geef nou je code eens die de bitjes set en unset. Hoe set je die bitjes?
    Haha die set of unset je niet maar je gaat gewoon bitwise die rechten toekennen dus voor recht lezen is 1 voor schrijven is 2 voor bewerken is 4 en iemand die dan mag lezen en schrijven krijgt 3 snap ie? En met de bitwise functies van PHP kun je dat dan controleren

    http://nl2.php.net/language.operators.bitwise
    Swetseneggerzaterdag 25 februari 2006 @ 22:12
    quote:
    Op zaterdag 25 februari 2006 22:06 schreef c0nd0r het volgende:

    [..]

    Haha die set of unset je niet maar je gaat gewoon bitwise die rechten toekennen dus voor recht lezen is 1 voor schrijven is 2 voor bewerken is 4 en iemand die dan mag lezen en schrijven krijgt 3 snap ie? En met de bitwise functies van PHP kun je dat dan controleren

    http://nl2.php.net/language.operators.bitwise
    Ja duh, maar HOE krijg je dat rijtje terug? Geef die code eens.
    Swetseneggerzaterdag 25 februari 2006 @ 22:17
    En waarom maak je het jezelf eigenlijk niet makkelijk door gewoon binair te rekenen.
    1=lezen
    10=schrijven
    11=lezen en schrijven
    Etc.

    Op die manier kan je een ubersimpele switch functie gebruiken om je rechten te checken en je checkboxen te setten.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    switch ($rechten){
    case
    '1':
    // lezen
    break;
    case
    '10':
    //schrijven
    break;
    }
    ?>
    c0nd0rzaterdag 25 februari 2006 @ 22:21
    quote:
    Op zaterdag 25 februari 2006 22:17 schreef Swetsenegger het volgende:
    En waarom maak je het jezelf eigenlijk niet makkelijk door gewoon binair te rekenen.
    1=lezen
    10=schrijven
    11=lezen en schrijven
    Etc.

    Op die manier kan je een ubersimpele switch functie gebruiken om je rechten te checken en je checkboxen te setten.
    [ code verwijderd ]
    Zou ook kunnen inderdaad maar heb de fout al gevonden! Om 1 of andere vage reden parste PHP de getallen als octaal (vandaar dat 1 en 8 het niet deden)
    Even de intval() eromheen zetten en works like a charm! Bedankt iig!
    Swetseneggerzaterdag 25 februari 2006 @ 22:23
    quote:
    Op zaterdag 25 februari 2006 22:21 schreef c0nd0r het volgende:

    [..]

    Zou ook kunnen inderdaad maar heb de fout al gevonden! Om 1 of andere vage reden parste PHP de getallen als octaal (vandaar dat 1 en 8 het niet deden)
    Even de intval() eromheen zetten en works like a charm! Bedankt iig!
    als het begint met een 0 wordt het als octaal geinterpreteerd. (dacht ik. even zoeken op php.net)
    Lightzaterdag 25 februari 2006 @ 22:35
    quote:
    Op zaterdag 25 februari 2006 22:23 schreef Swetsenegger het volgende:

    [..]

    als het begint met een 0 wordt het als octaal geinterpreteerd.
    Correct.
    Swetseneggerzaterdag 25 februari 2006 @ 22:38
    quote:
    Op zaterdag 25 februari 2006 22:35 schreef Light het volgende:

    [..]

    Correct.
    ZCE basis kennis
    Boinkzondag 26 februari 2006 @ 17:43
    Hoi, daar ben ik weer

    De thumbnail werkt bij php5 niet meer Zie: http://dev.wscp.nu/~testt(...)cars.php?view=last40 Nu gebruik ik dit script, http://dev.wscp.nu/~testteam/autogespot/viewimg.phps , ik heb er al naar gekeken maar kan niks vinden.. Kan iemand iets ontdekken?
    ikke_ookzondag 26 februari 2006 @ 17:58
    Leer zelf eens debuggen, begin eens met die apenstaartjes voor de functies weg te halen want die onderdrukken errors en warnings. En dan zet je gewoon ergens een echo ofzo om te kijken of hij in een bepaald if-statement komt...... Probeer eens wat losse onderdelen of die wel werken.
    Doe een echo op je filename/imagepath, misschien is dat wel niet goed.... Wij hoeven toch niet iedere keer jouw lappen code door te gaan spitten op zoek naar een foutje?

    En denk ook eens aan het controleren van je input... je haalt iets uit een GET en je zet dat gewoon in een query, ik zou daar op zn minst een addslashes op uitvoeren.....
    mscholzondag 26 februari 2006 @ 18:15
    quote:
    Op zondag 26 februari 2006 17:58 schreef ikke_ook het volgende:
    Leer zelf eens debuggen, begin eens met die apenstaartjes voor de functies weg te halen want die onderdrukken errors en warnings. En dan zet je gewoon ergens een echo ofzo om te kijken of hij in een bepaald if-statement komt...... Probeer eens wat losse onderdelen of die wel werken.
    Doe een echo op je filename/imagepath, misschien is dat wel niet goed.... Wij hoeven toch niet iedere keer jouw lappen code door te gaan spitten op zoek naar een foutje?

    En denk ook eens aan het controleren van je input... je haalt iets uit een GET en je zet dat gewoon in een query, ik zou daar op zn minst een addslashes op uitvoeren.....
    helemaal mee eesn

    ennuh even reactie op 2de punt en een handige vraag voor mij :
    om de een of andere reden hoef ik in mijn php scripts nooit de addslashes te gebruiken...
    hij negeerdt die slashes ofzo...
    wat ik wel doet is dit:
    $bla =$_get['Boe'];
    komt dat daardoor?


    ben zelf nu ook beetje bezig met een hele simpele template parser
    eens kijken of ik daar iets leuks van kan maken
    dus het gebruik maken van een simpele template parser niet het maken van een parser..
    is leuke oefening en kan er misschien een leuke site uitdraaien voor het pc management op me stage is te zien hier: http://fia181-83.dsl.hccnet.nl/pwa

    [ Bericht 9% gewijzigd door mschol op 26-02-2006 18:21:50 ]
    DutchBloodzondag 26 februari 2006 @ 18:22
    quote:
    Op zondag 26 februari 2006 18:15 schreef mschol het volgende:

    [..]

    helemaal mee eesn

    ennuh even reactie op 2de punt en een handige vraag voor mij :
    om de een of andere reden hoef ik in mijn php scripts nooit de addslashes te gebruiken...
    hij negeerdt die slashes ofzo...
    wat ik wel doet is dit:
    $bla =$_get['Boe'];
    komt dat daardoor?


    ben zelf nu ook beetje bezig met een hele simpele template parser
    eens kijken of ik daar iets leuks van kan maken
    Magic_quotes?

    Voor een id ben ik zelf altijd erg van een if(is_numeric()) { constructie.
    SuperRembozondag 26 februari 2006 @ 19:26
    quote:
    Op zondag 26 februari 2006 18:15 schreef mschol het volgende:
    ennuh even reactie op 2de punt en een handige vraag voor mij :
    om de een of andere reden hoef ik in mijn php scripts nooit de addslashes te gebruiken...
    hij negeerdt die slashes ofzo...
    wat ik wel doet is dit:
    $bla =$_get['Boe'];
    komt dat daardoor?
    Dat komt idd door magic_quotes_gpc. Eerder in dit topic staat er meer over. Een feature die schijnveiligheid creëert en verder alleen maar tegen je werkt.
    mscholzondag 26 februari 2006 @ 20:04
    quote:
    Op zondag 26 februari 2006 19:26 schreef SuperRembo het volgende:

    [..]

    Dat komt idd door magic_quotes_gpc. Eerder in dit topic staat er meer over. Een feature die schijnveiligheid creëert en verder alleen maar tegen je werkt.
    maar dat zou hij toch alleen doen als hij aanstaat
    dit staat in mijn php.ini:
    ; This directive is deprecated. Use variables_order instead.
    gpc_order = "GPC"

    ; Magic quotes
    ;

    ; Magic quotes for incoming GET/POST/Cookie data.
    magic_quotes_gpc = Off

    ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
    magic_quotes_runtime = Off

    ; Use Sybase-style magic quotes (escape ' with '' instead of \').
    magic_quotes_sybase = Off

    dus dat zou dan niet opgaan voor mij
    DutchBloodzondag 26 februari 2006 @ 20:09
    Maar wat gebeurd er dan precies met dat slashes gebeuren bij deze php-installatie?
    mscholzondag 26 februari 2006 @ 20:19
    quote:
    Op zondag 26 februari 2006 20:09 schreef DutchBlood het volgende:
    Maar wat gebeurd er dan precies met dat slashes gebeuren bij deze php-installatie?
    nou normaal gesproken zou je een sql injection kunnen doen als de quotes e.d niet worden gescaped..

    maar ik escape dus niet en SQL injections zijn echt onmogelijk
    ik krijg hooguit een php error op line 10 ofzo
    en dit heb ik al heeel lang bij meerdere script..
    komt dat omdat ik de GET waarde eerst in een variable zet en die variable in een SQL statment gebruik?
    DutchBloodzondag 26 februari 2006 @ 20:33
    quote:
    Op zondag 26 februari 2006 20:19 schreef mschol het volgende:

    [..]

    nou normaal gesproken zou je een sql injection kunnen doen als de quotes e.d niet worden gescaped..

    maar ik escape dus niet en SQL injections zijn echt onmogelijk
    ik krijg hooguit een php error op line 10 ofzo
    en dit heb ik al heeel lang bij meerdere script..
    komt dat omdat ik de GET waarde eerst in een variable zet en die variable in een SQL statment gebruik?
    Zou je dat eens kunnen uitttesten met wat echo's misschien? Dus de $_GET var en dan de gewone?

    Raar doch interessant geval .
    Nevermindzondag 26 februari 2006 @ 20:57
    Niet dat ik het wil misbruiken, maar hoe kun je sql injections uitproberen? Wat moet je in je GET-variabele toevoegen?
    1test.php?sort=ASC;%20DELETE%20FROM%20tabelnaam

    Zoiets zal wel niet werken?
    mscholzondag 26 februari 2006 @ 21:01
    http://www.securiteam.com/securityreviews/5DP0N1P76E.html

    hier wordt het hoe en wat uitgelegd, vaak kan je het misbruiken door in een search veld de string proberen te escapen
    Nevermindzondag 26 februari 2006 @ 21:31
    quote:
    Op zondag 26 februari 2006 21:01 schreef mschol het volgende:
    http://www.securiteam.com/securityreviews/5DP0N1P76E.html

    hier wordt het hoe en wat uitgelegd, vaak kan je het misbruiken door in een search veld de string proberen te escapen
    Dankje, erg handig
    deze ook wel
    mscholzondag 26 februari 2006 @ 21:37
    ik loop nu wel tegen een robleem aan op een site die ik aan het boiuwen ben voor me stage (zie boven) tis vast heel simpel maar ik zie het niet :
    ik maaj dus gebruik van een simpele template parser:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    class template
    {
        var
    $data;

        function
    load($file)
        {
            
    $this-&gt;data = file_get_contents('templates/'. $file . '.tpl');
        }

        function
    replace($var, $value)
        {
            
    $this-&gt;data = str_replace('{' . $var . '}', $value, $this-&gt;data);
        }
        
        function
    parse()
        {
            echo
    $this-&gt;data;
        }
    }
    ?>

    dit werkt helemaal perfect..
    maar als ik een tag replace voor een include:
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    {
        
    $template-&gt;load('main');
        
    $template-&gt;replace('Title', 'Overzicht PC\'s');
        
    $template-&gt;replace('Content',include('includes\overzicht.php'));
        
    $template-&gt;parse();
    }
    ?>


    maar daar loop ik dus tegen een probleem aan:
    in de include staat het volgende:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    $SQL
    = "SELECT * FROM `p`";
    $result = mysql_query($SQL);
    while(
    $row = mysql_fetch_array($result))
        {
          echo(
    "<tr>\n");
          echo(
    "<td align='center'>".$row['pcnaam']."</td>\n\r");
          echo(
    "<td align='center'>".$row['gebouw']."</td>\n\r");
          echo(
    "<td align='center'>".$row['lokatie']."</td>\n\r");
          echo(
    "<td align='center'>".$row['leerkracht']."</td>\n\r");
          echo(
    "<td align='center'>\n\r");
          echo(
    "<input name='button2' type='button' value='Aanpassen' onclick=\"\PopUpWindow('edit_pc','http://fia181-83.dsl.hccnet.nl/PWA/pc.php?act=edit_pc','http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."\") />");
          echo(
    "</td>\n\r");
          echo(
    "<td align='center'><input name='button' type='button' value='Verwijderen' /></td>\n\r");
          echo(
    "</tr>");
        }
    }
    ?>


    als ik een return geef dan echotie em netjes in het midden van de pagina onder de kop overzicht pc's maar kapt ie em gelijk af... (want het is een return immers)
    bij echo wordt het helemaal bovenaan de pagina weergegeven en niet in een tabel..
    is er niet een manier om het huidige script toch goed te laten gaan?
    hope it makes sense

    ik zat dus te denken aan een soort van buffer OBstart(); oid maar krijg dat niet aan de praat...?

    volgens mij zit er weinig anders op dan me hele include te herschrijven (ook geen idee hoe ik dan moet aan aan pakken trouwens , maar tis laat, morgen weer een dag)

    [ Bericht 2% gewijzigd door mschol op 26-02-2006 21:48:17 (verschrikkelijke typo) ]
    GSMboyzondag 26 februari 2006 @ 21:47
    quote:
    Op zondag 26 februari 2006 20:57 schreef Nevermind het volgende:
    Niet dat ik het wil misbruiken, maar hoe kun je sql injections uitproberen? Wat moet je in je GET-variabele toevoegen?
    [ code verwijderd ]

    Zoiets zal wel niet werken?
    probeer maar. Met magic Quotes die aanstaan werkt dit niet nee.....
    SuperRembozondag 26 februari 2006 @ 21:49
    quote:
    Op zondag 26 februari 2006 20:19 schreef mschol het volgende:

    [..]

    nou normaal gesproken zou je een sql injection kunnen doen als de quotes e.d niet worden gescaped..

    maar ik escape dus niet en SQL injections zijn echt onmogelijk
    ik krijg hooguit een php error op line 10 ofzo
    en dit heb ik al heeel lang bij meerdere script..
    komt dat omdat ik de GET waarde eerst in een variable zet en die variable in een SQL statment gebruik?
    Ow, mysql gaat gewoon op z'n bek als je een quotje invoert. Nee, da's prima
    mscholzondag 26 februari 2006 @ 21:55
    quote:
    Op zondag 26 februari 2006 21:49 schreef SuperRembo het volgende:

    [..]

    Ow, mysql gaat gewoon op z'n bek als je een quotje invoert. Nee, da's prima
    maar aaleen bij de uitvoer van dat script... dus iedere hack poiung loopt dood
    my point : oke script gaat onderuit, maar hij valt voor de rest niet te hacken..
    SuperRembozondag 26 februari 2006 @ 22:25
    quote:
    Op zondag 26 februari 2006 21:55 schreef mschol het volgende:

    [..]

    maar aaleen bij de uitvoer van dat script... dus iedere hack poiung loopt dood
    my point : oke script gaat onderuit, maar hij valt voor de rest niet te hacken..
    Daar zou ik niet al te zeker van zijn.
    Neem een simpele update al deze:

    1$sql = "UPDATE mytable SET myvalue='$_POST[myvalue]' WHERE id=$_POST[id]";


    Als je dan in het form bij myvalue invult: All Your Quotes Are Belong To Us';--
    Dan staat die tekst opeens op ELKE regel in de tabel. Zonder MySQL foutmelding.
    DutchBloodzondag 26 februari 2006 @ 22:43
    http://ww.phpfreakz.nl/downloadz/webprogrammers_hacking_huide.pdf

    Erg nuttig om eens door te lezen, worden veel beveiliginslekken besproken.
    mscholzondag 26 februari 2006 @ 23:25
    quote:
    Op zondag 26 februari 2006 22:25 schreef SuperRembo het volgende:

    [..]

    Daar zou ik niet al te zeker van zijn.
    Neem een simpele update al deze:
    [ code verwijderd ]

    Als je dan in het form bij myvalue invult: All Your Quotes Are Belong To Us';--
    Dan staat die tekst opeens op ELKE regel in de tabel. Zonder MySQL foutmelding.
    ook met deze constructie? want zo doe ik het altijd... en als je dan gaat klooien met ; en komma's etc dann loopt ie stuk op php code.. lijkt mij...:
    1
    2
    3
    $value = $_POST[myvalue];
    $ids = $_POST[id];
    $sql = "UPDATE mytable SET myvalue='$value' WHERE id=$ids";
    SuperRembozondag 26 februari 2006 @ 23:51
    Nee, dat is voor php geen probleem. Dan werkt mijn "hack" nog steeds.
    mscholzondag 26 februari 2006 @ 23:53
    quote:
    Op zondag 26 februari 2006 23:51 schreef SuperRembo het volgende:
    Nee, dat is voor php geen probleem. Dan werkt mijn "hack" nog steeds.
    nou vreemd ik heb meerdere scrippie's gemaakt waar ik toch op die manier allerlei haakjes, puntkomma's en quotes tegenhield...
    SuperRembomaandag 27 februari 2006 @ 00:01
    Wat bedoel je met "tegenhouden"? Als je zoonder problemen een ' in kan voeren zit je waarschijnlijk wel goed (dan staat magic_quotes_gpc aan of je gebruikt addslashes/mysql_real_escape_string). Als er dingen fout gaan als je een ' invoert, dan heb je toch een (potentieel) probleem.
    ViPeRIImaandag 27 februari 2006 @ 12:27
    en nu heb ik een vraagje

    Ik heb een bestand waarin ik wat settings schrijf.
    Het bestand ziet er ongeveer zo uit:
    USEDB | localhost | db | ww | naam | INSERT INTO evenementen (naam, datum, folder)
    values ( '" . $_SESSION['albumhtmlinfo']['titel'] . "',
    '" . $_SESSION['datum'] . "',
    '" . $_SESSION['albumhtmlinfo']['filename'] . "' ) |


    Het uitlezen van het bestand doe ik alsvolgt:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 

        $fp = fopen($filename, "r") or die ("Couldn't open $filename");  
        while (!feof($fp)) {  
            $line = fgets($fp, 180);  
        //explode alle elementen tot regels in de array 
        $info_array = explode(" | ",addslashes($line));  

    ?> 

    Als ik nu ga bekijken wat er in mijn $info_array[x] staat, gaat het allemaal goed,
    bahalve het laatste lijntje (de SQL code die ik in het bestand heb geschreven.)
    Daar staat alleen maar INSERT als laatste in mijn $info_array

    Weet iemand hoe ik dit goed uit lees? Of kan het te maken hebben met de lengte van de bestands-regel of kan het aan nog wat anders liggen?
    the_disheavermaandag 27 februari 2006 @ 13:00
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    php

        $fp
    = fopen($filename, "r") or die ("Couldn't open $filename");  
        while (!
    feof($fp)) {  
            
    $line = fgets($fp, 180);  
        
    //explode alle elementen tot regels in de array
        
    $info_array[] = explode(" | ",addslashes($line));  


    ?>

    Ofwel: $info_array[] =ipv $info_array =

    Zonder die [] zou het gewoon een variable zijn, en elke keer door de nieuwe line overschreven worden. Met de [] wordt het een variable in een array.

    edit: mist overigens ook een end bracket voor de while-lus
    ViPeRIImaandag 27 februari 2006 @ 13:15
    the_disheaver...

    Die brackets weet ik, was verkeerd gekopiëerd hierheen, maar het probleem is niet dat het overschreven wordt.

    $info_array wordt netjes gevult,
    ik krijg dus in mijn voorbeeld:

    echo $info_array[0]; // = USEDB
    echo $info_array[1]; // = localhost

    die waardes netjes terug, BEHALVE de laatste die hij moet pakken (in mijn geval $info_array[17])
    want daar staat alleen maar INSERT in.
    en $info_array[18] en hoger zijn gewoon leeg...
    USEDB | localhost | db | ww | naam | INSERT
    the_disheavermaandag 27 februari 2006 @ 13:27
    Bij mij krijg ik met jou code slechts 1 waarde in $info_array. Met de [] komt wel het gehele bestand in de array. Maar misschien deze code?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
        $file
    = file("blaat.txt");
        
    $array = implode(" ", $file);
        
    $info_array = explode(" | ",addslashes($array));  
        
        print
    "<pre>";
    print_r($info_array);
    print
    "</pre>";
    ?>

    uitkomst:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Array
    (
        [0] => USEDB
        [1] => localhost
        [2] => db
        [3] => ww
        [4] => naam
        [5] => INSERT INTO evenementen (naam, datum, folder) 
     values ( \'\" . $_SESSION[\'albumhtmlinfo\'][\'titel\'] . \"\', 
     \'\" . $_SESSION[\'datum\'] . \"\', 
     \'\" . $_SESSION[\'albumhtmlinfo\'][\'filename\'] . \"\' ) |
    )
    ViPeRIImaandag 27 februari 2006 @ 13:38
    Humz werkt bij mij niet, dan geeft hij helemaal geen output

    Maar wat hij er van maakt is dit:
    (bij een print_r($info_array)
    Array ( [0] =>
    Array ( [0] => none
    [1] => 6
    [2] => 768
    [3] => 1024
    [4] => 120
    [5] => 160
    [6] => website.net
    [7] => ftpinlog
    [8] => ftppass
    [9] => httpdocs
    [10] => /httpdocs/includes/program/fotoarchief/
    [11] => 21
    [12] => USEDB
    [13] => localhost
    [14] => user
    [15] => pw
    [16] => dbnaam
    [17] => INSERT ) [1] => Array ( [0] => INTO evenementen (naam, datum, folder) values ( '" . $_SESSION['albumhtmlinfo']['titel'] . "', '" . $_SESSION['datum'] . "', '" . $_SESSION['albumhtmlinfo']['filename'] . "' ) [1] => ) )
    #ANONIEMmaandag 27 februari 2006 @ 14:37
    Om de geblokkeerde uitgaande mailpoort op school te omzeilen en omdat ik soms nog wel eens dringend moet mailen, heb ik een leuk mail scriptje gemaakt. Zo iets had ik al eerder gedaan voor een bestelformulier.

    Bij mijn laatste prutswerkje kun je zelf de afzender en geadresseerde invullen. Misbruikgevoelig, maar alleen voor eigen gebruik.

    Nou is het enige probleem: Ik krijg alle mail 2x!

    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
    <?php
    $bericht = $_POST["bericht"];
    $van = $_POST["van"];
    $to  = $_POST["aan"];
    $subject = $_POST["onderwerp"];
    $message = '
    <html>
    <head>
    <title>'.$subject.'</title>
    <STYLE TYPE="text/css">
    <!--
    body {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    }
    -->
    </STYLE>
    </head>
    <body>
    '.$bericht.'
    </body>
    </html>
    ';

    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $headers .= "To: <".$to.">\r\n";
    $headers .= "From: <".$van.">\r\n";

    mail($to, $subject, $message, $headers);

    echo 'Verzonden aan: '.$to.'<br>Vanaf: '.$van.'<br>Bericht:<br>'.$message.'<br>';
    ?>


    Wie helpt?
    ViPeRIImaandag 27 februari 2006 @ 15:04
    Toeps,

    Ik kan geen fouten ontdekken in je script. wordt echt maar 1x aangeroeken zover ik zie.
    je opent hem toch ook niet tochvallig 2x?
    Swetseneggermaandag 27 februari 2006 @ 15:05
    quote:
    Op maandag 27 februari 2006 14:37 schreef Toeps het volgende:
    Om de geblokkeerde uitgaande mailpoort op school te omzeilen en omdat ik soms nog wel eens dringend moet mailen, heb ik een leuk mail scriptje gemaakt. Zo iets had ik al eerder gedaan voor een bestelformulier.

    Bij mijn laatste prutswerkje kun je zelf de afzender en geadresseerde invullen. Misbruikgevoelig, maar alleen voor eigen gebruik.

    Nou is het enige probleem: Ik krijg alle mail 2x!
    [ code verwijderd ]

    Wie helpt?
    Het enige wat ik kan bedenken is dat je een mailadres mailt, welke ook ok nog doorgestuurd wordt naar een ander mail adres. Je script verstuurt in ieder geval maar 1 mail.
    #ANONIEMmaandag 27 februari 2006 @ 15:07
    quote:
    Op maandag 27 februari 2006 15:04 schreef ViPeRII het volgende:
    Toeps,

    Ik kan geen fouten ontdekken in je script. wordt echt maar 1x aangeroeken zover ik zie.
    je opent hem toch ook niet tochvallig 2x?
    Nope, hij wordt gewoon aangeroepen vanuit mail.htm, een standaard formuliertje. Raar, dat bestelformulier wat ik eerst had gemaakt stuurt wel maar een keer. Het enige verschil is dat ik daarbij de mailadressen al had ingevuld.

    Misschien is het dubbel om het zowel in $to als in de header te zetten?
    Swetseneggermaandag 27 februari 2006 @ 15:09
    quote:
    Op maandag 27 februari 2006 15:07 schreef Toeps het volgende:

    [..]

    Nope, hij wordt gewoon aangeroepen vanuit mail.htm, een standaard formuliertje. Raar, dat bestelformulier wat ik eerst had gemaakt stuurt wel maar een keer. Het enige verschil is dat ik daarbij de mailadressen al had ingevuld.

    Misschien is het dubbel om het zowel in $to als in de header te zetten?
    Ja dat is dubbel ja
    #ANONIEMmaandag 27 februari 2006 @ 15:15
    1
    2
    3
    4
    5
    $tom = 'willekeurigadres@bestaatniet.nl';
    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $headers .= "To: <".$tom.">\r\n";
    $headers .= "From: <".$van.">\r\n";

    Geeft maar een mailtje op het ingegeven adres, en de ander op 'willekeurigadres' staat genoemd in "aan".

    $to en de header is toch dubbelop. .
    ViPeRIImaandag 27 februari 2006 @ 15:17
    Vaag wel leuk om te weten, want dat wist ik nog niet
    Swetseneggermaandag 27 februari 2006 @ 15:35
    quote:
    Op maandag 27 februari 2006 15:15 schreef Toeps het volgende:


    $to en de header is toch dubbelop. .
    Ja dat zeg ik
    quote:
    Op maandag 27 februari 2006 15:09 schreef Swetsenegger het volgende:

    [..]

    Ja dat is dubbel ja
    #ANONIEMmaandag 27 februari 2006 @ 15:44
    Ja Swets, ik had je reply nog niet gezien, was nog aan het testen.
    Chandlermaandag 27 februari 2006 @ 22:11
    Mensen ik ben opzoek naar een paar personen die mij input willen geven voor een huidig project.

    Op dit moment ben ik bezig met het ontwerpen en realiseren van een soortement installer van php projecten. Alleen zit ik nu met wat kleine dingen die ik wil verbeteren en eventueel wil inbouwen maar zou ook graag wat feedback van de echte scripter willen hebben. Dus suggesties en dergelijke zaken.

    Het project is al in vergaande staat klinkt raar maar het is waar. Het is het vervolg van http://php2hex.bruggema.nl maar goed.

    Als iemand wil mee helpen cq beta testen en code/fouten verbeteren en ideeen wilt sharen zouden jullie me mogen emailen op eric [op] bruggema [punt] nl of me msn kunnen misbruiken chandlerfok [op] hotmail [punt] com

    Alvast bedankt voor jullie tijd om dit te lezen.
    user931989dinsdag 28 februari 2006 @ 14:52
    Ik heb een HTML-documentje, dat uit een rss-feed geparsed wordt.
    In die rss-feed staat echter voor elke ' en " een backslash.
    Nu include ik dat html-document in een php, maar het lukt mij niet om die backslashes weg te krijgen.
    Normaal zou ik dit met str_replace doen, maar door die include lukt dat niet.
    Hoe kan dit wel?
    ikke_ookdinsdag 28 februari 2006 @ 15:09
    door die html-file in te lezen met fopen en hem dan als string te behandelen?
    user931989dinsdag 28 februari 2006 @ 15:17
    quote:
    Op dinsdag 28 februari 2006 15:09 schreef ikke_ook het volgende:
    door die html-file in te lezen met fopen en hem dan als string te behandelen?
    Als ik hem met fopen inlees krijg ik dit te zien:
    Resource id #2

    misschien komt dat doordat het in hetzelfde php-document ook verwerkt wordt>
    Knucklezzdinsdag 28 februari 2006 @ 15:20
    Hallo ik heb een stukje code en kom er niet meer uit :S

    ik heb een pagina waar je een bestaande pagina kan wijzigen, dit kan mbv text fields..
    alleen nu wil ik dat als je op de submit knop drukt, dat ie op dezelfde pagina blijft en dan de textfields overslaat en naar de code gaat waar de wijziging plaatsvind.

    "<form action=wijzigpagina.php?pagina=wijzig method=post>";

    dus iets van dat ie naar et stuk code springt waar ie moet wijzigen.

    in ASP kon dat gemakkelijk met de CASE opdracht.. maar heb geen flauw idee hoe dit in php moet.. al gezocht maar kon niets vinden :s
    Tijndinsdag 28 februari 2006 @ 15:25
    Bedoel je switch?

    Zodat je zoiets kunt doen:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    switch($pagina)
    {
        case 'bla':
            blablabla;
            break;

        case 'bli':
            bliblibli;
            break;

        case 'blo':
            blobloblo;
            break;
    }
    Tijndinsdag 28 februari 2006 @ 15:27
    Trouwens. Ik heb net PDFLib geinstalleerd en kan nu on-the-fly PDF'jes genereren. Echt supertof. Ik vind PHP steeds leuker
    Knucklezzdinsdag 28 februari 2006 @ 15:31
    ja zoiets bedoel ik tijn... alleen dat werkt nie wan tik wil dan de eerste case

    Case $url = " 1..20" (tussen 1 en 20)
    en
    Case "wijzig"
    the_disheaverdinsdag 28 februari 2006 @ 15:38
    bij 1 tot 20, moet je dan wel dezelfde pagina krijgen? Misschien beter om als het formulier is verzonden het form te verwerken, en anders het formulier weer te geven?

    1
    2
    3
    4
    5
    6
    7
    <?php
    if (isset($_POST['submit'])) {
      
    //form verwerking
    } else {
      
    //print form
    }
    ?>
    Knucklezzdinsdag 28 februari 2006 @ 15:43
    had nu dit:
    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
    $url = $_SERVER['REQUEST_URI']; 
    $url = str_replace('/CMS/nieuwepagina.php?pagina=', '', $url); 

    switch ($url)
    {
       case  "nieuw":
          echo "<form action=nieuwepagina.php?pagina=maaknieuw method=post>";
          echo "<table width=400 border=0>";
          echo "<tr><td width=200>Paginanaam:</td>";
          echo "<td>Waarde:</td></tr>";
          echo "<tr><td width=200>Menunaam:</td>\r\n";
          echo "<td><input name=naam type=text value=></td>\r\n";
          echo "<tr><td width=200>Link naar pagina:</td>\r\n";
          echo "<td><input name=naam type=text value=></td>\r\n";
          echo "<tr><td width=200>Titel van pagina:</td>\r\n";
          echo "<td><input name=naam type=text value=></td>\r\n";   
          echo "<tr><td width=200>Content:</td>\r\n";
          echo "<td><input name=naam type=text value=></td>\r\n";
          echo "<tr><td width=200>Hoofdmenu:</td>\r\n";
          echo "<td><input name=naam type=text value=></td>\r\n";   
          echo "</table><br />";
          echo "<input name=reset type=reset value=Opnieuw />";
          echo "<input name=Opslaan type=submit value=Opslaan />";
          echo "</form>";
          break;
       case "maaknieuw":
          echo "wijzig";
          break;
    }
    the_disheaverdinsdag 28 februari 2006 @ 15:53
    Ehh, waarom gebruik je niet $_GET['pagina'] ?

    En voor het html fomulier: kun je daar nniet veel beter php afsluiten (?>) en zonder echo het html printen?
    Lijkt me ook verstandiger om het formulier onder DEFAULT: te zetten ipv CACE 'nieuws':.
    En bij CASE "maaknieuw" lijkt hem me ook erg verstandig wel te controleren of het formulier is verzonden. Want de URL kun je zomaar wijzigen.
    Knucklezzdinsdag 28 februari 2006 @ 15:57
    $_GET['pagina'] ?? :p hoe werkt dat nou weer
    the_disheaverdinsdag 28 februari 2006 @ 16:03
    quote:
    Op dinsdag 28 februari 2006 15:57 schreef Knucklezz het volgende:
    $_GET['pagina'] ?? :p hoe werkt dat nou weer
    ? serieuse vraag?

    http://nl2.php.net/variables.predefined
    Knucklezzdinsdag 28 februari 2006 @ 16:09
    heb nu dit:

    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
    <?php 
    include('header.php'); 

    mysql_connect("localhost", "username", "wwoord");  
    mysql_select_db("tabel");
     
    $url = $_SERVER['REQUEST_URI']; 
    $url = str_replace('/CMS/nieuwepagina.php?pagina=', '', $url); 

    switch ($url)
    {
       case  "nieuw":
    ?>
    <form action="nieuwepagina.php?pagina=maaknieuw" method=post>
    <table width=400 border=0>
       <tr>
          <td width=200>Paginanaam:</td>
          <td>Waarde:</td><br />
       </tr>
       <tr>
          <td width=200>Menunaam:</td>
          <td><input name=menunaam type=text value=""></td>
       </tr>
       <tr>
          <td width=200>Link naar pagina:</td>
          <td><input name=menulink type=text value=></td>
       </tr>
       <tr>
          <td width=200>Titel van pagina:</td>
          <td><input name=titel type=text value=></td>
       </tr>   
       <tr>
          <td width=200>Content:</td>
          <td><input name=content type=text value=></td>
       </tr>
       <tr>
          <td width=200>Hoofdmenu:</td>
          <td><input name=zichtbaar type=text value=></td>
       </tr>   
    </table><br />
    <input name=reset type=reset value="Opnieuw" />
    <input name=submit type=submit value="Opslaan" />
    </form>

    <?php 
       break;
       case "maaknieuw":
       if (isset($_POST['submit'])) 
       {
          $query = "INSERT INTO TblMenu 
             (menunaam, menulink, titel, content, zichtbaar) values
             ('$menunaam', '$menulink', '$titel', '$content', '$zichtbaar')";
          mysql_query($query) or
             die (mysql_error());
          break;
       }
       else
       {
       echo "form ni opgestuurd";
       } 
    }


    include('footer.php'); ?>


    [ Bericht 1% gewijzigd door Knucklezz op 01-03-2006 11:19:12 ]
    the_disheaverdinsdag 28 februari 2006 @ 16:47
    quote:
    Op dinsdag 28 februari 2006 16:09 schreef Knucklezz het volgende:
    heb nu dit:
    [ code verwijderd ]
    tip: haal je wachtwoord eruit...
    Neverminddinsdag 28 februari 2006 @ 17:57
    quote:
    Op dinsdag 28 februari 2006 16:09 schreef Knucklezz het volgende:
    heb nu dit:
    [ code verwijderd ]
    Zoals the_disheaver dus al zei, je kan alles met $url er uit halen, en van je switch-statement
    1switch( $_GET['pagina'] )

    maken
    Desdinovadinsdag 28 februari 2006 @ 22:42
    kan ik bepaalde queries opstellen zodat ik een treestructuur van mijn database terugkrijg? eventueel met kolomtypes dr bij?
    SuperRembodinsdag 28 februari 2006 @ 23:29
    quote:
    Op dinsdag 28 februari 2006 22:42 schreef Desdinova het volgende:
    kan ik bepaalde queries opstellen zodat ik een treestructuur van mijn database terugkrijg? eventueel met kolomtypes dr bij?
    In MySQL 3/4 heb je SHOW TABLES en SHOW COLUMNS. In versie 5 heb je de INFORMATION_SCHEMA tabellen.
    Knucklezzwoensdag 1 maart 2006 @ 11:21
    Hallo,

    Als op de pagina op een formulier op wijzigen wordt geklikt, dan wordt de text: Bericht gewijzigd getoont.. alleen wil ik em automatisch terugsturen naar een bepaalde pagina.. weet iemand hoe dit moet? met asp was et iets van response.redirect dacht ik ...

    thnx!
    ikke_ookwoensdag 1 maart 2006 @ 11:36
    dat kun je met javascript doen, als hij na een aantal seconden moet worden doorgestuurd, of met php Header als je hem direct wil doorsturen. Dus moet hij eerst een paar seconden "bericht gewijzigd" laten zien of direct terug naar een bepaalde pagina?
    #ANONIEMwoensdag 1 maart 2006 @ 11:40
    Dat kan toch ook gewoon met HTML? In META kun je dat opgeven, ook na hoeveel seconde.
    ikke_ookwoensdag 1 maart 2006 @ 11:43
    daar kun je toch alleen aangeven na hoeveel seconden hij moet refreshen?of kun je hem ook door laten sturen?

    -edit- toch niet
    quote:
    <meta http-equiv="refresh" content="2;url=http://webdesign.about.com/">

    The only difference is in the content attribute.
    content="2;url=http://webdesign.about.com"
    The number is the time, in seconds, until the page should be redirected. Then, separated by a semi-colon (;) is the URL that should be loaded.
    Tijnwoensdag 1 maart 2006 @ 11:48
    quote:
    Op woensdag 1 maart 2006 11:36 schreef ikke_ook het volgende:
    dat kun je met javascript doen, als hij na een aantal seconden moet worden doorgestuurd, of met php Header als je hem direct wil doorsturen.
    Je kunt PHP's header()-functie alleen gebruiken als er nog niks op de huidige pagina is getoond. Zodra je iets geprint hebt (in dit geval de gewijzigd-tekst), levert de header()-functie een foutmelding op. Volgens de PHP-manual kun je dit omzeilen met ob_start() en ob_end_flush(), maar eerlijk gezegd vind ik het doorsturen van iemand naar een andere pagina sowieso meer een client-side iets en zou ik het dus niet met PHP aanpakken.
    Knucklezzwoensdag 1 maart 2006 @ 11:50
    quote:
    Op woensdag 1 maart 2006 11:36 schreef ikke_ook het volgende:
    dat kun je met javascript doen, als hij na een aantal seconden moet worden doorgestuurd, of met php Header als je hem direct wil doorsturen. Dus moet hij eerst een paar seconden "bericht gewijzigd" laten zien of direct terug naar een bepaalde pagina?
    eerst bericht gewijzigd laten zien en dan na een aantal seconden trg naar de pagina waar je dingen kan aanklikken om te wijzigen
    ikke_ookwoensdag 1 maart 2006 @ 11:50
    quote:
    Op woensdag 1 maart 2006 11:48 schreef Tijn het volgende:

    [..]

    Je kunt met PHP's header()-functie alleen gebruiken als er nog niks op de huidige pagina is getoond. Zodra je iets geprint hebt (in dit geval de gewijzigd-tekst), levert de header()-functie een foutmelding op. Volgens de PHP-manual kun je dit omzeilen met ob_start() en ob_end_flush(), maar eerlijk gezegd vind ik het doorsturen van iemand naar een andere pagina sowieso meer een client-side iets en zou ik het dus niet met PHP aanpakken.
    Dat zeg ik toch Javascript als je eerst iets wil tonen. OF php als je dat niet wil

    @Knucklezz
    probeer die meta tag eens die ik hierboven heb gepost.
    Tijnwoensdag 1 maart 2006 @ 11:51
    quote:
    Op woensdag 1 maart 2006 11:50 schreef ikke_ook het volgende:

    [..]

    Dat zeg ik toch Javascript als je eerst iets wil tonen. OF php als je dat niet wil
    Oh juist. Nou dan zijn we het eens
    Knucklezzwoensdag 1 maart 2006 @ 11:55
    quote:
    Op woensdag 1 maart 2006 11:50 schreef ikke_ook het volgende:

    [..]

    @Knucklezz
    probeer die meta tag eens die ik hierboven heb gepost.
    kheb mn header in een include staan.. is dat dan geen probleem ?
    ikke_ookwoensdag 1 maart 2006 @ 12:08
    quote:
    Op woensdag 1 maart 2006 11:55 schreef Knucklezz het volgende:

    [..]

    kheb mn header in een include staan.. is dat dan geen probleem ?
    Uhhh wat bedoel je precies?Het gaat erom hoe je header bij de gebruiker aankomt..niet hoe je hem samenstelt op de server..
    Knucklezzwoensdag 1 maart 2006 @ 12:12
    nee ik bedoel.. de header staat dus in apart include bestand en als ik dat in de meta plaats dan pakt ie dat tog op elke pagina ?
    ikke_ookwoensdag 1 maart 2006 @ 12:13
    ja klopt!
    Als je die header op iedere pagina include

    Dit werkt ook:
    1<script type="text/javascript">setTimeout("top.location.href = 'http://www.url.nl' ",3000);</script>

    Na 3000 msec gaat hij dan naar die url
    Knucklezzwoensdag 1 maart 2006 @ 12:15
    quote:
    Op woensdag 1 maart 2006 12:13 schreef ikke_ook het volgende:
    ja klopt!
    maar hij moet niet op elke pagina refreshen
    ikke_ookwoensdag 1 maart 2006 @ 12:16
    Dan moet je dus niet iedere keer dezelfde header includen of doen wat ik hierboven heb ge-edit, dus dat javascript
    Knucklezzwoensdag 1 maart 2006 @ 12:19
    danku
    Knucklezzwoensdag 1 maart 2006 @ 14:11
    nog een vraagje..

    ik lees vanuit de database en schrijf et weg in een textbox.. alleen zet ie niet alles in de textbox.. hij pakt alleen de tekst t/m de eerste spatie :S

    weet ieman hoe dat kan ?
    ikke_ookwoensdag 1 maart 2006 @ 14:34
    1
    2
    3
    <input type="text" value="Hier de tekst die in het vakje moet staan" />
    of
    <textarea>hier de text die in het vakje moet staan</textarea>

    Je was de quotes vergeten zeker?
    Knucklezzwoensdag 1 maart 2006 @ 14:42
    kheb dit:

    1echo "<td><input name=menunaam type=text value=". mysql_result($result,$i,'menunaam')." /></td>\r\n";
    Desdinovawoensdag 1 maart 2006 @ 14:46
    wat voor textbox heb je?
    zit er niet toevallig een newline na die spatie?
    Knucklezzwoensdag 1 maart 2006 @ 14:48
    gewoon normale textbox.. geen newlines..
    the_disheaverwoensdag 1 maart 2006 @ 14:52
    of:
    1   echo '<td><input name=menunaam type=text value="'. mysql_result($result,$i,'menunaam').'" /></td>\r\n';

    of
    1   echo "<td><input name=menunaam type=text value=\"". mysql_result($result,$i,'menunaam')."\" /></td>\r\n";

    of:
    1
    2
    3
    ?>
    <td><input name="menunaam" type="text" value="<?php echo mysql_result($result,$i,'menunaam');?>" /></td>\r\n
    <?php

    uitleg: je hebt geen aanhalingstekens voor en na de value-waarde. Alleen een aanhalingsteken welke het einde van de echo weergeeft.

    Dus of enkele aanhalingstekens waardoor je de dubbele niet te hoeft escapen, of dubbele aanhalingstekens, en de dubbele aanhalingstekens voor het HTML escapen. Of alleen voor de echoén van de value php gebruik, de rest in normale html (zonder te echo'en)
    ikke_ookwoensdag 1 maart 2006 @ 14:58
    Je hebt idd geen quotes om je value wat ik al zei... Er staan wel quotes,maar die sluiten je string af.

    Die eerste van the_disheaver is trouwens fout, je kunt \n\r niet printen als een newline met single quotes, daar heb je double quotes voor nodig. Probeer het maar eens.

    Dus die 2e van the_disheaver, of :
    1echo "<td><input name='menunaam' type='text' value='". mysql_result($result,$i,'menunaam')."' /></td>\r\n";
    Knucklezzwoensdag 1 maart 2006 @ 14:58
    quote:
    Op woensdag 1 maart 2006 14:52 schreef the_disheaver het volgende:
    of:
    [ code verwijderd ]

    of
    [ code verwijderd ]

    of:
    [ code verwijderd ]

    uitleg: je hebt geen aanhalingstekens voor en na de value-waarde. Alleen een aanhalingsteken welke het einde van de echo weergeeft.

    Dus of enkele aanhalingstekens waardoor je de dubbele niet te hoeft escapen, of dubbele aanhalingstekens, en de dubbele aanhalingstekens voor het HTML escapen. Of alleen voor de echoén van de value php gebruik, de rest in normale html (zonder te echo'en)
    dat werkt ja dankje!!
    Knucklezzwoensdag 1 maart 2006 @ 15:32
    Et laatste wat ik vraag... is het moeilijk een richt text edit box in mijn code te stoppen tussen de al bestaande text boxes?
    Nevermindwoensdag 1 maart 2006 @ 17:18
    No offence Knucklezz, maar leer eerst eens de basis van html en php voor je vragen gaat stellen over elke regel code die je schrijft. Wat je hierboven noemt heeft ook echt 0,0 met php te maken.
    DaFanwoensdag 1 maart 2006 @ 18:35
    Korte vraag, kheb de FAQs ed al doorgelezen en het idee is me duidelijk, maar ik krijg het niet aan de praat.
    Het gaat om het áan de praat krijgen van MySQL functions in PHP 5 (Dit).

    Nu heb ik gevolgd wat er allemaal staat, maar mysql_connect weigert te werken.

    Voor de goede orde, mijn map waar php is geinstalleerd is:
    1C:/php

    php.ini staat in de WINDOWS map op de C:/schijf en daar zijn de volgende dingen gewijzigd:
    1
    2
    extension_dir = "C:\php"
    extension=php_mysql.dll     <- enabled

    De libmysql.dll is toegevoegd én aan de Windows/system map en ik heb via de Omgevingsvariabelen C:/php als PATH aangegeven.

    Kan iemand mij simpel en stap voor stap uitleggen wat er moet gebeuren binnen PHP 5 om MySQL functions aan de praat te krijgen?

    Bedankt, en excuses dat ik er niet uitkom
    the_disheaverwoensdag 1 maart 2006 @ 18:36
    preg_expr vraagje

    wat kan ik gebruiken voor elk teken, inclusief nieuwe regels?
    .* accepteert elk teken, behalve newlines.
    Ik heb nu dit, werkt wel, maar kan het korter? [\d\s\w\W\n]*

    En mijn preg_expr werkt niet.

    Ik wil van een html pagina alleen hetgene binnen de
    1
    2
    3
    <div id="MCTable">
    {elks teken incl newline}
    </div>

    Ik heb de regexp
    1$table = preg_replace('#[\d\s\w\W\n]*(<div id="MCTable">[\d\s\w\W\n]*</div>)[\d\s\w\W\n]*#','$1' , $page);

    Hij pakt meer dan hij zou moeten.
    Ergens in het midden van de output ($table) staat:
    1
    2
    3
        </div>
        
        <div id="MCaddtion">

    Alleen de </div> zou er nog in moeten, alles eronder niet...

    Waar zit mijn fout?

    edit: opgelost door als einde niet naar </div> te zoeken, maar een tag boven de </div> tag. Doet het goed, maar geen echte oplossing.

    [ Bericht 8% gewijzigd door the_disheaver op 01-03-2006 18:46:37 ]
    SuperRembowoensdag 1 maart 2006 @ 18:56
    Regular expressions hebben ook modifiers:
    quote:
    s (PCRE_DOTALL)

    If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl's /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier.
    Dus /ene regel.*volgende regel/s werkt over meerdere regels.
    user931989woensdag 1 maart 2006 @ 20:08
    quote:
    Op dinsdag 28 februari 2006 14:52 schreef user931989 het volgende:
    Ik heb een HTML-documentje, dat uit een rss-feed geparsed wordt.
    In die rss-feed staat echter voor elke ' en " een backslash.
    Nu include ik dat html-document in een php, maar het lukt mij niet om die backslashes weg te krijgen.
    Normaal zou ik dit met str_replace doen, maar door die include lukt dat niet.
    Hoe kan dit wel?
    quote:
    Op dinsdag 28 februari 2006 15:09 schreef ikke_ook het volgende:
    door die html-file in te lezen met fopen en hem dan als string te behandelen?
    quote:
    Op dinsdag 28 februari 2006 15:17 schreef user931989 het volgende:
    Als ik hem met fopen inlees krijg ik dit te zien:
    Resource id #2

    misschien komt dat doordat het in hetzelfde php-document ook verwerkt wordt
    Kan niemand mij helpen?
    SuperRembowoensdag 1 maart 2006 @ 20:19
    quote:
    Op woensdag 1 maart 2006 20:08 schreef user931989 het volgende:
    Kan niemand mij helpen?
    file_get_contents
    user931989woensdag 1 maart 2006 @ 20:35
    quote:
    Op woensdag 1 maart 2006 20:19 schreef SuperRembo het volgende:

    [..]

    file_get_contents
    Bedankt, het is gelukt.
    Tijndonderdag 2 maart 2006 @ 02:26
    Wat is een beetje normale tijd waarin een script wordt uitgevoerd?

    Of beter gezegd, als een script er langer dan hoeveel micro/milliseconden over doet, moet ik de boel nodig eens optimaliseren?
    mscholdonderdag 2 maart 2006 @ 08:33
    quote:
    Op donderdag 2 maart 2006 02:26 schreef Tijn het volgende:
    Wat is een beetje normale tijd waarin een script wordt uitgevoerd?

    Of beter gezegd, als een script er langer dan hoeveel micro/milliseconden over doet, moet ik de boel nodig eens optimaliseren?
    helemaal afhankelijk van wat je doet...
    als je allerlei moeilijke bewerkingen doet en 20 query's opent zal het script er langer over doen wannneer je alleen 1 query uitvoert
    bliebliedonderdag 2 maart 2006 @ 14:46
    ff domme vraag, maar waarom worden er in de bestandsnamen van includes de subextensie "inc" gebruikt. Dus dat je krijgt config.inc.php ipv. config.php .
    Zitten daar meer voordelen aan dan alleen het kunnen herkennen van includes aan de bestandsnaam?
    Swetseneggerdonderdag 2 maart 2006 @ 15:54
    Aangezien ik opzoek ben naar een design, wil ik een design request topic openen. Het is niet de bedoeling dat daar hele website designs aangevraagd worden, maar bv een logootje of een button.

    Maar...zoals ik maar matig kan designen, zullen er best designers zijn welke matig kunnen PHP'en. Dus denk ik erover om ook een centraal script request topic te openen. Is daar draagvlak voor onder de PHP'ers?
    JeRadonderdag 2 maart 2006 @ 17:14
    quote:
    Op donderdag 2 maart 2006 14:46 schreef blieblie het volgende:
    ff domme vraag, maar waarom worden er in de bestandsnamen van includes de subextensie "inc" gebruikt. Dus dat je krijgt config.inc.php ipv. config.php .
    Zitten daar meer voordelen aan dan alleen het kunnen herkennen van includes aan de bestandsnaam?
    Nee.
    JeRadonderdag 2 maart 2006 @ 17:16
    quote:
    Op donderdag 2 maart 2006 02:26 schreef Tijn het volgende:
    Wat is een beetje normale tijd waarin een script wordt uitgevoerd?

    Of beter gezegd, als een script er langer dan hoeveel micro/milliseconden over doet, moet ik de boel nodig eens optimaliseren?
    Dat hangt af van de machine waarop je script draait, de snelheid van de databaseserver waarmee je een verbinding hebt, en zo nog een paar honderd variabelen. Als je script bij normaal gebruik (geen zware zoekactie oid) merkbaar traag is (~ >100 ms) dan wordt het misschien tijd om uit te zoeken hoe dat komt.
    Tijndonderdag 2 maart 2006 @ 17:29
    Ik snap dat het van vanalles afhangt, maar ik heb werkelijk geen idee wat "normaal" is. Ik heb een openingpagina gemaakt met 2 queries en wat for-lussen die zichzelf in 7 ms op het scherm zet. Ik vroeg me af of dat redelijk is. Maar ik begrijp dat je pas bij merkbare traagheid actie moet ondernemen en dat er geen algemene regel is in de trant van "als je pagina niet binnen 10 ms rendert is er wat mis" ofzo.
    DaFandonderdag 2 maart 2006 @ 17:33
    quote:
    Op donderdag 2 maart 2006 17:29 schreef Tijn het volgende:
    Ik snap dat het van vanalles afhangt, maar ik heb werkelijk geen idee wat "normaal" is. Ik heb een openingpagina gemaakt met 2 queries en wat for-lussen die zichzelf in 7 ms op het scherm zet. Ik vroeg me af of dat redelijk is. Maar ik begrijp dat je pas bij merkbare traagheid actie moet ondernemen en dat er geen algemene regel is in de trant van "als je pagina niet binnen 10 ms rendert is er wat mis" ofzo.
    Ben nog totaal niet thuis in PHP maar het lijkt mij dat dat soort dingen gewoon van de PC van de gebruiker afhangt? Op jouw AMD 3000+ zal het ws wel sneller dan 7ms zijn maar als je nog op een 1000+ draait...

    Edit: Spuit 11
    Tijndonderdag 2 maart 2006 @ 17:34
    quote:
    Op donderdag 2 maart 2006 17:33 schreef DaFan het volgende:

    [..]

    Ben nog totaal niet thuis in PHP maar het lijkt mij dat dat soort dingen gewoon van de PC van de gebruiker afhangt? Op jouw AMD 3000+ zal het ws wel sneller dan 7ms duren maar als je nog op een 1000+ draait...
    Nee. PHP draait op de server.
    DaFandonderdag 2 maart 2006 @ 17:36
    Sorry Tijn ik zal me er niet meer mee bemoeien

    Mijn vraag nogmaals:
    quote:
    Op woensdag 1 maart 2006 18:35 schreef DaFan het volgende:
    Korte vraag, kheb de FAQs ed al doorgelezen en het idee is me duidelijk, maar ik krijg het niet aan de praat.
    Het gaat om het áan de praat krijgen van MySQL functions in PHP 5 (Dit).

    Nu heb ik gevolgd wat er allemaal staat, maar mysql_connect weigert te werken.

    Voor de goede orde, mijn map waar php is geinstalleerd is:
    1C:/php


    php.ini staat in de WINDOWS map op de C:/schijf en daar zijn de volgende dingen gewijzigd:
    1
    2
    extension_dir = "C:\php"
    extension=php_mysql.dll     <- enabled


    De libmysql.dll is toegevoegd én aan de Windows/system map en ik heb via de Omgevingsvariabelen C:/php als PATH aangegeven.

    Kan iemand mij simpel en stap voor stap uitleggen wat er moet gebeuren binnen PHP 5 om MySQL functions aan de praat te krijgen?

    Bedankt, en excuses dat ik er niet uitkom
    Foutmelding die ik dus krijg is:
    1Fatal error: Call to undefined function mysql_connect() in C:\Program Files\Apache Group\Apache2\htdocs\Forum\Do_addtopic.php on line 10


    JeRadonderdag 2 maart 2006 @ 17:56
    @DaFan

    Don't slap me with a trout, maar heb je de Apache webserver opnieuw gestart?
    DaFandonderdag 2 maart 2006 @ 18:02
    quote:
    Op donderdag 2 maart 2006 17:56 schreef JeRa het volgende:
    @DaFan

    Don't slap me with a trout, maar heb je de Apache webserver opnieuw gestart?
    15x ongeveer
    Swetseneggerdonderdag 2 maart 2006 @ 18:39
    quote:
    Op donderdag 2 maart 2006 18:02 schreef DaFan het volgende:

    [..]

    15x ongeveer
    Waarom download je geen compleet pakket zoals bijvoorbeeld appserv? Dan hoef je niets te configureren. Installeren en draaien maar
    DaFandonderdag 2 maart 2006 @ 18:43
    quote:
    Op donderdag 2 maart 2006 18:39 schreef Swetsenegger het volgende:

    [..]

    Waarom download je geen compleet pakket zoals bijvoorbeeld appserv? Dan hoef je niets te configureren. Installeren en draaien maar
    Heu das wel verdomde handig. Als je die installed werken ze dan direct met elkaar ? Dus PHP in Apache en MySQL zonder dat je ini's hoeft te verschuiven enzo?
    Swetseneggerdonderdag 2 maart 2006 @ 18:44
    quote:
    Op donderdag 2 maart 2006 18:43 schreef DaFan het volgende:

    [..]

    Heu das wel verdomde handig. Als je die installed werken ze dan direct met elkaar ? Dus PHP in Apache en MySQL zonder dat je ini's hoeft te verschuiven enzo?
    Ja
    DaFandonderdag 2 maart 2006 @ 18:45
    Meesterlijk, vanavond eens proberen
    Swetseneggerdonderdag 2 maart 2006 @ 21:01
    Ik heb de volgende tabellen, waarbij cursieve kolommen FK's zijn (duh).

    produkten:
  • product_id
  • article_code
  • name
  • etc

    users
  • user_id
  • name
  • address
  • etc

    orders
  • order_id
  • user_id
  • etc

    order_content
  • content_id
  • order_id
  • product_id
  • etc

    Meest gebruikte queries zijn niet zo spannend:
    1
    2
    3
    4
    5
    6
    <?php
    $query
    ="SELECT *
                   FROM produkten
                   WHERE product_menu="
    .$_GET['id']."  
                   ORDER BY first_price ASC, product_id DESC"
    ;
    ?>


    Immers ga je de tabellen pas aan elkaar koppelen na een bestelling, daarbij krijg je queries zoals deze:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $query
    ="SELECT
            oc.number,
            p.articelcode,
            p.name,
            oc.giftwrap,
            p.first_price,
            p.second_price
            FROM orders o
            INNER JOIN order_content oc ON oc.order_id = o.order_id
            INNER JOIN produkten p ON p.product_id = oc.product_id
            INNER JOIN users u ON u.user_id = o.user_id
            WHERE o.order_id ="
    .$_GET['order']." && u.name='".$_SESSION['name']."'";
    ?>



    Eerste vraag:
    Hebben indices in deze situatie zin? De meeste queries zijn redelijk straight forward, alleen bij bestellingen wat gecompliceerder, maar die komen ook maar mondjesmaat voor.

    Tweede vraag:
    Laten we gemakshalve even aannemen dat indices relevant zijn, van welke kolommen moet ik dan indices maken om performance te winnen?

    Mijn boerenverstand zegt van alle FK's in alle tabellen dus orders.user_id, order_content.order_id en order_content.product_id.
    Maar... klopt dat wel? En kan iemand ook helder onder woorden brengen waarom?
  • H4zedonderdag 2 maart 2006 @ 21:02
    Ik zoek me een ongeluk, maar waar kan ik in godsnaam het maximale aantal connecties van mysql aanpassen? Op internet vind ik steeds /etc/my.cnf, maar ik ben geloof ik hardstikke blind....
    Swetseneggerdonderdag 2 maart 2006 @ 21:03
    quote:
    Op donderdag 2 maart 2006 21:02 schreef H4ze het volgende:
    Ik zoek me een ongeluk, maar waar kan ik in godsnaam het maximale aantal connecties van mysql aanpassen? Op internet vind ik steeds /etc/my.cnf, maar ik ben geloof ik hardstikke blind....
    php.ini?
    H4zedonderdag 2 maart 2006 @ 21:08
    quote:
    Op donderdag 2 maart 2006 21:03 schreef Swetsenegger het volgende:

    [..]

    php.ini?
    Ik ben iets aan 't maken met mysql en JSP/Servlets, dus denk niet dat de php.ini er veel mee te maken heeft. Thnx voor 't snelle antwoord iig. Maar je moet toch gewoon via de mysql commandline iets kunnen opgeven?
    Swetseneggerdonderdag 2 maart 2006 @ 21:11
    quote:
    Op donderdag 2 maart 2006 21:08 schreef H4ze het volgende:

    [..]

    Ik ben iets aan 't maken met mysql en JSP/Servlets, dus denk niet dat de php.ini er veel mee te maken heeft. Thnx voor 't snelle antwoord iig. Maar je moet toch gewoon via de mysql commandline iets kunnen opgeven?
    Nee dan heeft php er niets mee te maken
    http://dev.mysql.com/doc/refman/4.1/en/too-many-connections.html Staat hier wat bij?
    H4zedonderdag 2 maart 2006 @ 21:12
    quote:
    Op donderdag 2 maart 2006 21:11 schreef Swetsenegger het volgende:

    [..]

    Nee dan heeft php er niets mee te maken
    http://dev.mysql.com/doc/refman/4.1/en/too-many-connections.html Staat hier wat bij?
    jep al gelezen

    Stond in de reacties wel 1 iets bij:

    You can increase this value in main config file (e.g., /etc/my.cnf) using this syntax:

    [mysqld]
    set-variable=max_connections=250

    Dus ik heb in de commandline '--set-variable=max_connections=250'. Hij gaf dan geen error ofzo, maar ook niet dat het nu veranderd was....
    Swetseneggerdonderdag 2 maart 2006 @ 21:16
    quote:
    Op donderdag 2 maart 2006 21:12 schreef H4ze het volgende:

    [..]

    jep al gelezen

    Stond in de reacties wel 1 iets bij:

    You can increase this value in main config file (e.g., /etc/my.cnf) using this syntax:

    [mysqld]
    set-variable=max_connections=250

    Dus ik heb in de commandline '--set-variable=max_connections=250'. Hij gaf dan geen error ofzo, maar ook niet dat het nu veranderd was....
    en als je my.cnf file gewoon opent?
    DaFandonderdag 2 maart 2006 @ 21:18
    Leuk en aardig dat AppServ maar het werkt nog steeds niet. En nu kan ik totaal niet vinden waar ik in mn MySQL command kan komen. MySQLAdmin opent in DOS en is in 1 sec weer weg
    Dus nu kan ik helemaal niks meer
    DaFandonderdag 2 maart 2006 @ 21:18
    Fuck it, morgen weer een dag.
    Swetseneggerdonderdag 2 maart 2006 @ 21:20
    quote:
    Op donderdag 2 maart 2006 21:18 schreef DaFan het volgende:
    Leuk en aardig dat AppServ maar het werkt nog steeds niet. En nu kan ik totaal niet vinden waar ik in mn MySQL command kan komen. MySQLAdmin opent in DOS en is in 1 sec weer weg
    Dus nu kan ik helemaal niks meer
    Nou, dan weet ik niet wat je doet, want appserv is 3 keer next klikken, je files in de www directory zetten en openen met localhost/filename.php

    Meer valt er niet te configureren.
    Je hebt natuurlijk WEL eerste je voorgaande sql en php config gedelete.

    -edit- en wat ga je uberhaupt in MySQL command doen? Ga naar localhost/phpmyadmin.
    -edit2- Ow wacht, je moet een user aanmaken enzo http://www.phpfreakz.nl/artikelen.php?aid=62
    -edit3- Hoewel die standaard op root zonder password staat, en phpmyadmin daarmee moet kunnen verbinden.

    [ Bericht 5% gewijzigd door Swetsenegger op 02-03-2006 21:42:26 ]
    H4zedonderdag 2 maart 2006 @ 21:20
    Ja ik was dus extreem scheef, kon die cnf file eerst niet vinden Krijg je van al de godganze dag zitten programmeren is nu opgelost

    Thnx iig
    SuperRembodonderdag 2 maart 2006 @ 21:36
    quote:
    Op donderdag 2 maart 2006 21:01 schreef Swetsenegger het volgende:
    Mijn boerenverstand zegt van alle FK's in alle tabellen dus orders.user_id, order_content.order_id en order_content.product_id.
    Maar... klopt dat wel? En kan iemand ook helder onder woorden brengen waarom?
    Eigenlijk alles waar op gefilterd of gesorteerd wordt. Dus de kolommen die in de join condities worden gebruikt, maar ook die in de where staan. Als er geen idex voor bestaat dan moet de hele tabel gescanned worden.
    Swetseneggerdonderdag 2 maart 2006 @ 21:41
    quote:
    Op donderdag 2 maart 2006 21:36 schreef SuperRembo het volgende:

    [..]

    Eigenlijk alles waar op gefilterd of gesorteerd wordt. Dus de kolommen die in de join condities worden gebruikt, maar ook die in de where staan. Als er geen idex voor bestaat dan moet de hele tabel gescanned worden.
    Oke, dus als stelregel kan je zeggen dat je altijd(?) indices moet maken op foreign keys EN op kolommen welke (vaak) in where statements worden gebruikt, correct?

    Ik las namelijk op mysql.org dat het in sommige gevallen trager kan worden door indices.
    JeRadonderdag 2 maart 2006 @ 21:55
    quote:
    Op donderdag 2 maart 2006 21:41 schreef Swetsenegger het volgende:

    [..]

    Oke, dus als stelregel kan je zeggen dat je altijd(?) indices moet maken op foreign keys EN op kolommen welke (vaak) in where statements worden gebruikt, correct?
    Niet bij álle foreign keys, maar het is een goede vuistregel ja. Voorbeeldje waarbij het niet moet; als je voor een fotoalbum drie groottes van een bepaalde foto hebt kun je die drie groottes in één record laten verwijzen naar drie foreign records, maar daar hoeft in principe helemaal geen index op omdat je daar nooit op selecteert of sorteert.
    quote:
    Ik las namelijk op mysql.org dat het in sommige gevallen trager kan worden door indices.
    In álle gevallen worden INSERTs trager door indices, en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of niet dus wat dat betreft zal het niet trager worden.
    Swetseneggerdonderdag 2 maart 2006 @ 22:05
    quote:
    Op donderdag 2 maart 2006 21:55 schreef JeRa het volgende:

    [..]

    Niet bij álle foreign keys, maar het is een goede vuistregel ja. Voorbeeldje waarbij het niet moet; als je voor een fotoalbum drie groottes van een bepaalde foto hebt kun je die drie groottes in één record laten verwijzen naar drie foreign records, maar daar hoeft in principe helemaal geen index op omdat je daar nooit op selecteert of sorteert.
    Nee ok, alleen op kolommen waarop je selecteert of sorteert is een betere benaming.
    quote:
    In álle gevallen worden INSERTs trager door indices, en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of niet dus wat dat betreft zal het niet trager worden.
    Van mysql.org:
    If you need to access most of the rows, it is faster to read sequentially, because this minimizes disk seeks.

    Maar ja, in bovenstaand voorbeeld heb ik regelmatig ALLE product rows nodig. Zijn indexes dan aan te raden of niet?
    SuperRembodonderdag 2 maart 2006 @ 22:10
    quote:
    Op donderdag 2 maart 2006 21:55 schreef JeRa het volgende:
    en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of niet
    MySQL staat nou niet echt goed bekend om z'n query optimalisatie kwaliteiten.
    JeRadonderdag 2 maart 2006 @ 23:14
    quote:
    Op donderdag 2 maart 2006 22:05 schreef Swetsenegger het volgende:
    Maar ja, in bovenstaand voorbeeld heb ik regelmatig ALLE product rows nodig. Zijn indexes dan aan te raden of niet?
    In jouw voorbeeld zie ik één query die alle rows aandoet en die sorteert op first_price; die zou je prima kunnen indexeren.
    quote:
    Op donderdag 2 maart 2006 22:10 schreef SuperRembo het volgende:

    [..]

    MySQL staat nou niet echt goed bekend om z'n query optimalisatie kwaliteiten.
    Dat weet ik, ik ga er altijd vanuit dat ze dat in de toekomst nog kunnen verbeteren terwijl de queries hetzelfde blijven. Als het een probleem wordt schakel ik over op een andere DBMS die dat wel kan bepalen
    Swetseneggervrijdag 3 maart 2006 @ 08:57
    quote:
    Op donderdag 2 maart 2006 23:14 schreef JeRa het volgende:

    [..]

    In jouw voorbeeld zie ik één query die alle rows aandoet en die sorteert op first_price; die zou je prima kunnen indexeren.
    [..]

    Dat weet ik, ik ga er altijd vanuit dat ze dat in de toekomst nog kunnen verbeteren terwijl de queries hetzelfde blijven. Als het een probleem wordt schakel ik over op een andere DBMS die dat wel kan bepalen
    First price heb ik inderdaad nu geindexeerd.
    Ik doelde ook op de foreign keys in de andere tabellen. DIe worden mondjes maat in joins gebruikt. Maar in mijn beleving zijn joins zware queries, dus wil ik het maar optimaliseren

    Bedankt weer voor de uitleg
    Swetseneggervrijdag 3 maart 2006 @ 11:04
    Ik heb een mooie query van Super Rembo, welke 3 laatste records per catagorie uit de database trekt.
    Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.

    Ik mag toch aannemen dat dat aan de hoster ligt?
    #ANONIEMvrijdag 3 maart 2006 @ 11:08
    quote:
    Op vrijdag 3 maart 2006 11:04 schreef Swetsenegger het volgende:
    Ik heb een mooie query van Super Rembo, welke 3 laatste records per catagorie uit de database trekt.
    Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.

    Ik mag toch aannemen dat dat aan de hoster ligt?
    Laat eens zien?
    Swetseneggervrijdag 3 maart 2006 @ 11:13
    quote:
    Op vrijdag 3 maart 2006 11:08 schreef Scorpie het volgende:

    [..]

    Laat eens zien?
    De Query?

    1
    2
    3
    4
    5
    6
    7
    SELECT g.genre, g.genre_id, a.title, a.ad_id, a.image, a.price
    FROM genre g
    INNER JOIN ad a ON a.genre = g.genre_id
    INNER JOIN ad a2 ON a2.genre = g.genre_id AND a.ad_id <= a2.ad_id
    GROUP BY a.ad_id
    HAVING COUNT(a2.ad_id) <= 3
    ORDER BY g.genre_id, a.ad_id DESC


    -edit-
    indices op a.ad_id (PK), a.genre, g.genre_id (PK)
    Nevermindvrijdag 3 maart 2006 @ 11:14
    quote:
    Op vrijdag 3 maart 2006 11:13 schreef Swetsenegger het volgende:

    [..]

    De Query?
    Wat anders?
    JeRavrijdag 3 maart 2006 @ 14:31
    quote:
    Op vrijdag 3 maart 2006 11:04 schreef Swetsenegger het volgende:
    Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.
    Dit is een mooi voorbeeld van een query die géén indices gebruikt maar de tweede keer snel wordt door het gebruik van de query cache op de server. Ik zie zo even niet waarom hij ze niet gebruikt.

    Als het goed is zou je door iets te veranderen in één van de tabellen de query uit de query cache kunnen halen, is hij dan weer zo traag?
    #ANONIEMvrijdag 3 maart 2006 @ 14:48
    Hm ik zie zo 1,2,3 niet in waarom hij zo lang moet laden...heel apart. Hoeveel data bevatten de tabellen?
    Swetseneggervrijdag 3 maart 2006 @ 14:49
    quote:
    Op vrijdag 3 maart 2006 14:31 schreef JeRa het volgende:

    [..]

    Dit is een mooi voorbeeld van een query die géén indices gebruikt maar de tweede keer snel wordt door het gebruik van de query cache op de server. Ik zie zo even niet waarom hij ze niet gebruikt.

    Als het goed is zou je door iets te veranderen in één van de tabellen de query uit de query cache kunnen halen, is hij dan weer zo traag?
    Ja, als ik de GROUP BY aanpas naar bv a.title is hij de eerste keer weer traag.
    Ik vreesde ook al dat de query daadwerkelijk traag is en de tweede keer uit cache komt
    Swetseneggervrijdag 3 maart 2006 @ 14:49
    quote:
    Op vrijdag 3 maart 2006 14:48 schreef Scorpie het volgende:
    Hm ik zie zo 1,2,3 niet in waarom hij zo lang moet laden...heel apart. Hoeveel data bevatten de tabellen?
    ongeveer 2000 records in de ad table, 19 in de genre tabel en een stuk of 100 in de user tabel. ALlemaal niet erg spannend
    JeRavrijdag 3 maart 2006 @ 15:13
    quote:
    Op vrijdag 3 maart 2006 14:49 schreef Swetsenegger het volgende:

    [..]

    Ja, als ik de GROUP BY aanpas naar bv a.title is hij de eerste keer weer traag.
    Ik vreesde ook al dat de query daadwerkelijk traag is en de tweede keer uit cache komt
    Om voor testing purposes de query cache eventjes te omzeilen zou je SQL_NO_CACHE kunnen gebruiken, zie deze pagina.
    SuperRembovrijdag 3 maart 2006 @ 15:40
    quote:
    Op vrijdag 3 maart 2006 11:13 schreef Swetsenegger het volgende:

    [..]

    De Query?
    [ code verwijderd ]

    -edit-
    indices op a.ad_id (PK), a.genre, g.genre_id (PK)
    Je GROUP BY is trouwens niet helemaal goed. Alle velden die je in de SELECT gebruikt en die je niet in een aggregate functie hebt staan, moeten in de GROUP BY worden opgenomen. MySQL accepteerd het wel als je dat niet doet, maar dat kan tot onvoorspelbare resultaten leiden. Zo zou het moeten:

    1GROUP BY g.genre, g.genre_id, a.title, a.ad_id, a.image, a.price


    Eventueel zou je alleen de PK's op kunnen nemen. Dan zijn de resultaten voorspelbaar maar misschien is het ietsje sneller

    1GROUP BY g.genre_id, a.ad_id
    Swetseneggervrijdag 3 maart 2006 @ 16:27
    quote:
    Op vrijdag 3 maart 2006 15:40 schreef SuperRembo het volgende:

    [..]

    Je GROUP BY is trouwens niet helemaal goed. Alle velden die je in de SELECT gebruikt en die je niet in een aggregate functie hebt staan, moeten in de GROUP BY worden opgenomen. MySQL accepteerd het wel als je dat niet doet, maar dat kan tot onvoorspelbare resultaten leiden. Zo zou het moeten:
    [ code verwijderd ]

    Eventueel zou je alleen de PK's op kunnen nemen. Dan zijn de resultaten voorspelbaar maar misschien is het ietsje sneller
    [ code verwijderd ]
    De aggregate functie is... het optel gebeuren?

    Inderdaad gaf hij af en toe onvoorspelbare resultaten met a.title in de GROUP BY, met a.ad_id lijkt dat verholpen Maar als ik de query een beetje volg lijkt hij me niet ZO traag toch? 15 seconden vind ik wel overdreven lang.
    SuperRembovrijdag 3 maart 2006 @ 17:23
    Ik weet niet in welke volgorde MySQL die joins uitvoert. Met een beetje pech begint MySQL met de join van ad op ad. Die geeft 2000 * 2000 / 2 = 2000000 rows.
    JeRavrijdag 3 maart 2006 @ 18:06
    Zelfs dan zou het niet zó lang mogen duren, toch? Een query op een tabel met 10.000 rows die ik op zichzelf laat joinen is in een fractie van een seconde gedaan.
    H4zevrijdag 3 maart 2006 @ 18:44
    Als ik via de post-method van een form iets meegeef, dan hoor ik die variabele op de 'volgende' pagina toch direct uitlezen met $variabele? Ik kan me herinneren dat ik dit altijd deed, maar nu ik de boel lokaal aan het maken ben, werkt dat niet. Ik moet dan de meegegeven variabele eerst uitlezen:

    $variabele = $_POST['bla'];

    En ik kan dus niet direct $bla gebruiken...Is het iets in de php.ini wat ik moet veranderen?
    Nevermindvrijdag 3 maart 2006 @ 18:45
    Ja. Maar je kan beter altijd $_POST en $_GET gebruiken. Vooral met POST, anders kunnen mensen iets in de URL veranderen en dan wordt dat gewoon geaccepteerd.

    register_globals
    R-Monvrijdag 3 maart 2006 @ 18:46
    En anders extract.
    Swetseneggervrijdag 3 maart 2006 @ 19:15
    quote:
    Op vrijdag 3 maart 2006 17:23 schreef SuperRembo het volgende:
    Ik weet niet in welke volgorde MySQL die joins uitvoert. Met een beetje pech begint MySQL met de join van ad op ad. Die geeft 2000 * 2000 / 2 = 2000000 rows.
    Hier begrijp ik niets van.
    Ik zie de eerste rij in de tabel, die heeft genre id 1.
    Dan begint hij weer van bovenaf aan, alles negerend totdat hij er weer 1 tegenkomt met genre id 1. En weer bovenaan, tot hij een derde heeft gevonden met genre id 1.
    En zo voor alle genre's welke beschikbaar zijn in de genre tabel. Zeg ik het zo correct?

    Dan loopt hij toch door maximaal 19(genres)*3(max resultaten per genre)*2000(advertenties)= 114.000 rijen?

    Maar is er sowieso een manier om dit effectiever te doen?
    quote:
    Op vrijdag 3 maart 2006 18:06 schreef JeRa het volgende:
    Zelfs dan zou het niet zó lang mogen duren, toch? Een query op een tabel met 10.000 rows die ik op zichzelf laat joinen is in een fractie van een seconde gedaan.
    Dat dacht ik ook.
    Swetseneggervrijdag 3 maart 2006 @ 19:28
    Hmz, de hele database geexporteerd en lokaal geimporteerd.
    de query duurt ruim 9 seconden

    -edit-
    Een simpel

    1
    2
    3
    4
    5
    SELECT title, ad_id, image, price 
    FROM ad 
    WHERE genre=1 
    ORDER BY ad_id 
    DESC LIMIT 3

    duurt 0.0004 seconden.
    Snel rekensommetje leert dat

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    $queryMain
    ="SELECT *
                FROM genre"
    ;
    $resultMain=mysql_query($queryMain);
    while(
    $rowMain=mysql_fetch_assoc($resultMain)){
         
    $querySub="SELECT title, ad_id, image, price
                    FROM ad
                    WHERE genre="
    .$rowMain['genre_id']."
                    ORDER BY ad_id
                    DESC LIMIT 3"
    ;
         
    $resultSub=mysql_query($querySub);
         while(
    $rowSub=mysql_fetch_assoc($resultSub)){
              
    // doe iets
         
    }
    }
    ?>

    19*0.0004=0.0076 seconden duurt. Daar zal nog wel wat overhead vanaf vallen, maar ik denk dat het toch minimaal een factor 100 sneller is.

    Het gadverdamme ik haat een frontpage waarop 20 queries gedraaid worden. Ik vond SuperRembo's oplossing juist zo'n geile query

    -edit 2-
    Subqueries worden pas vanaf MySQL 5 ondersteunt toch?

    [ Bericht 49% gewijzigd door Swetsenegger op 03-03-2006 20:20:26 ]
    SuperRembovrijdag 3 maart 2006 @ 21:18
    quote:
    Op vrijdag 3 maart 2006 19:28 schreef Swetsenegger het volgende:
    Het gadverdamme ik haat een frontpage waarop 20 queries gedraaid worden. Ik vond SuperRembo's oplossing juist zo'n geile query
    Ik moet toe geven dat het stiekum toch een draak van een query is. Ik heb ff een testje gedraaid met een tabel met 10000 rows... daarmee legde MySQL m'n pc 16 minuten plat. MSSQL deed het met dezelfde data in 42 seconden.
    Swetseneggervrijdag 3 maart 2006 @ 21:22
    quote:
    Op vrijdag 3 maart 2006 21:18 schreef SuperRembo het volgende:

    [..]

    Ik moet toe geven dat het stiekum toch een draak van een query is. Ik heb ff een testje gedraaid met een tabel met 10000 rows... daarmee legde MySQL m'n pc 16 minuten plat. MSSQL deed het met dezelfde data in 42 seconden.
    Maar hij zag er wel heel cool uit en LIJKT veel sneller dan 20 queries

    Verrassend trouwens dat MSSQL zoveel sneller is. Toevallig heb ik van de week een intranet applicatie van MySQL naar MSSQL gemigreerd.
    Lightvrijdag 3 maart 2006 @ 21:34
    quote:
    Op vrijdag 3 maart 2006 11:13 schreef Swetsenegger het volgende:

    [..]

    De Query?
    [ code verwijderd ]

    -edit-
    indices op a.ad_id (PK), a.genre, g.genre_id (PK)
    En wat geeft de EXPLAIN van die query? Dat levert meestal wel info waarmee je kunt kijken wat er lang duurt.
    Swetseneggervrijdag 3 maart 2006 @ 21:57
    quote:
    Op vrijdag 3 maart 2006 21:34 schreef Light het volgende:

    [..]

    En wat geeft de EXPLAIN van die query? Dat levert meestal wel info waarmee je kunt kijken wat er lang duurt.
    Of ik begrijp dat explain gewoon niet, of ik doe wat fout.
    Anyway, dit komt eruit

    1
    2
    3
    4
    table      type      possible_keys      key      key_len      ref           rows      Extra
    g          ALL       PRIMARY            NULL     NULL         NULL          19        Using temporary; Using filesort
    a          ref       PRIMARY,genre      genre    4            g.genre_id    24        Using where
    a2         ref       PRIMARY,genre      genre    4            g.genre_id    24        Using where
    H4zezaterdag 4 maart 2006 @ 02:48
    In een bericht wat ik via de php mail() functie stuur, zitten newlines (dus \n ). Dit zou gewoon een enter moeten geven, maar in het mailtje geeft ie gewoon letterlijk \n weer. Hij pakt in normale pagina's \n ook niet, dus volgens mij werken die escape characters niet. Ik dacht dat dit lag aan magic_quotes_gpc. Deze stond bij mij op Off, maar als ik 'm aanzet werkt 't alsnog niet... Is er iets anders wat ik moet veranderen?
    JeRazaterdag 4 maart 2006 @ 06:44
    De geescapede newlines (\n) werken over het algemeen alleen als je ze in een string zet met dubbele quotes (aanhalingstekens) eromheen, dus "\n" of "blaat\nblaat". Heb je ze toevallig in single quoted strings gezet? ( '\n' )
    Lightzaterdag 4 maart 2006 @ 10:49
    quote:
    Op vrijdag 3 maart 2006 21:57 schreef Swetsenegger het volgende:

    [..]

    Of ik begrijp dat explain gewoon niet, of ik doe wat fout.
    Anyway, dit komt eruit
    [ code verwijderd ]
    Hij is lastig
    Maar als je nou de key genre in de tabel ad eens aanpast er daar ad_id als tweede index bij zet, wordt het dan sneller?
    MySQL heeft de leuke eigenschap dat het maar 1 key (index dus) kan gebruiken.
    Swetseneggerzaterdag 4 maart 2006 @ 11:04
    quote:
    Op zaterdag 4 maart 2006 10:49 schreef Light het volgende:

    [..]

    Hij is lastig
    Maar als je nou de key genre in de tabel ad eens aanpast er daar ad_id als tweede index bij zet, wordt het dan sneller?
    MySQL heeft de leuke eigenschap dat het maar 1 key (index dus) kan gebruiken.

    ad_id is de PK, die is toch al index?
    Lightzaterdag 4 maart 2006 @ 11:14
    quote:
    Op zaterdag 4 maart 2006 11:04 schreef Swetsenegger het volgende:

    [..]


    ad_id is de PK, die is toch al index?
    Ja, ik bedoelde dan ook een index op meerdere kolommen, namelijk genre en ad_id.
    Swetseneggerzaterdag 4 maart 2006 @ 11:32
    quote:
    Op zaterdag 4 maart 2006 11:14 schreef Light het volgende:

    [..]

    Ja, ik bedoelde dan ook een index op meerdere kolommen, namelijk genre en ad_id.
    dus de index op genre zou het juist trager maken ipv sneller?
    Lightzaterdag 4 maart 2006 @ 11:38
    quote:
    Op zaterdag 4 maart 2006 11:32 schreef Swetsenegger het volgende:

    [..]

    dus de index op genre zou het juist trager maken ipv sneller?
    Ik bedoelde dus een index op (genre, ad_id). Maar je zou ook de index op genre eens weg kunnen halen om te kijken of dat effect heeft. Ik vermoed dat het wel merkbaar is, omdat er dan een index gebruikt kan worden bij de group by. Lijkt mij.
    Swetseneggerzaterdag 4 maart 2006 @ 12:14
    quote:
    Op zaterdag 4 maart 2006 11:38 schreef Light het volgende:

    [..]

    Ik bedoelde dus een index op (genre, ad_id). Maar je zou ook de index op genre eens weg kunnen halen om te kijken of dat effect heeft. Ik vermoed dat het wel merkbaar is, omdat er dan een index gebruikt kan worden bij de group by. Lijkt mij.
    Ah zo
    Nee, dat heeft geen effect want ik ben juist met indexes gaan klooien omdat die query zo traag was
    Ik heb nu dus die query herschreven zoals op de vorige pagina, en ondanks dat ik dus 20 queries draai, vliegt dit het scherm op.

    Mooi is het niet, effectief wel. Daarom vroeg ik al vanaf welke MySQL versie subqueries ondersteunt worden (4.1) maar er draait 4.0 op de server.

    Speciaal voor Tijn trouwens, kon je deze al?:
    http://www.apple.com/downloads/macosx/unix_open_source/mamp.html

    Ik ga denk ik ook maar zoeken naar een xserve
    Lightzaterdag 4 maart 2006 @ 12:41
    quote:
    Op zaterdag 4 maart 2006 12:14 schreef Swetsenegger het volgende:

    [..]

    Ah zo
    Nee, dat heeft geen effect want ik ben juist met indexes gaan klooien omdat die query zo traag was
    Ik heb nu dus die query herschreven zoals op de vorige pagina, en ondanks dat ik dus 20 queries draai, vliegt dit het scherm op.

    Mooi is het niet, effectief wel. Daarom vroeg ik al vanaf welke MySQL versie subqueries ondersteunt worden (4.1) maar er draait 4.0 op de server.
    Als ik hier lokaal ga testen dan is die query nog best snel. Maar ik heb natuurlijk geeen 2000 rows in een ad tabel
    Swetseneggerzaterdag 4 maart 2006 @ 12:50
    quote:
    Op zaterdag 4 maart 2006 12:41 schreef Light het volgende:

    [..]

    Als ik hier lokaal ga testen dan is die query nog best snel. Maar ik heb natuurlijk geeen 2000 rows in een ad tabel
    Dat klopt, de query was in eerste instantie ook snel genoeg. Ik was er ook zeer content mee.
    Maar als ik SuperRembo's reken sommetje volg, neemt met een verdubbeling van het aantal advertenties het aantal rijen van de query met een factor 4 toe!

    Online was de query in phpmyadmin 15 seconden. Lokaal 9 seconden
    Lightzaterdag 4 maart 2006 @ 13:04
    quote:
    Op zaterdag 4 maart 2006 12:50 schreef Swetsenegger het volgende:

    [..]

    Dat klopt, de query was in eerste instantie ook snel genoeg. Ik was er ook zeer content mee.
    Maar als ik SuperRembo's reken sommetje volg, neemt met een verdubbeling van het aantal advertenties het aantal rijen van de query met een factor 4 toe!

    Online was de query in phpmyadmin 15 seconden. Lokaal 9 seconden
    Ik heb hier nog een tabel kunnen vinden met 2000+ rows, met items in verschillende groepen. En daar kan ik best per groep de laatste 3 items uithalen met jouw query, kost maximaal ongeveer 0.02 seconden (op mijn pc).
    H4zezaterdag 4 maart 2006 @ 13:05
    quote:
    Op zaterdag 4 maart 2006 06:44 schreef JeRa het volgende:
    De geescapede newlines (\n) werken over het algemeen alleen als je ze in een string zet met dubbele quotes (aanhalingstekens) eromheen, dus "\n" of "blaat\nblaat". Heb je ze toevallig in single quoted strings gezet? ( '\n' )
    Thnx! dat was de oplossing
    Swetseneggerzaterdag 4 maart 2006 @ 13:18
    quote:
    Op zaterdag 4 maart 2006 13:04 schreef Light het volgende:

    [..]

    Ik heb hier nog een tabel kunnen vinden met 2000+ rows, met items in verschillende groepen. En daar kan ik best per groep de laatste 3 items uithalen met jouw query, kost maximaal ongeveer 0.02 seconden (op mijn pc).
    Misschien dat het dan aan de SQL versie ligt? Of misschien aan de join met een andere tabel?
    Mijn PC is namelijk niet de traagste (AMD64 3200+, 1GB Kingston HyperX)
    En zowel online, als lokaal als bij SuperRembo is hij rete traag

    Ik wil je wel een dump van de tabellen mailen.
    Lightzaterdag 4 maart 2006 @ 13:31
    quote:
    Op zaterdag 4 maart 2006 13:18 schreef Swetsenegger het volgende:

    [..]

    Misschien dat het dan aan de SQL versie ligt? Of misschien aan de join met een andere tabel?
    Mijn PC is namelijk niet de traagste (AMD64 3200+, 1GB Kingston HyperX)
    En zowel online, als lokaal als bij SuperRembo is hij rete traag
    Ik heb maar een simpele amd64 3000+ met 1GB.
    quote:
    Ik wil je wel een dump van de tabellen mailen.
    Is goed
    Swetseneggerzaterdag 4 maart 2006 @ 13:33
    quote:
    Op zaterdag 4 maart 2006 13:31 schreef Light het volgende:

    [..]

    Ik heb maar een simpele amd64 3000+ met 1GB.
    Drom, dus ik begrijp niet waarom de query bij mij veel trager zou zijn
    quote:
    Is goed
    komt zo een zippie aan. gewoon at fok punt en el?

    -edit- hij was nu sneller dan gisteren (misschien draaide mijn virusscanner ofzo) maar nog steeds goed voor bijna 4 seconden.
    Lightzaterdag 4 maart 2006 @ 13:36
    quote:
    Op zaterdag 4 maart 2006 13:33 schreef Swetsenegger het volgende:

    komt zo een zippie aan. gewoon at fok punt en el?
    Da's wel de makkelijkste
    Lightzaterdag 4 maart 2006 @ 14:19
    quote:
    Op zaterdag 4 maart 2006 13:33 schreef Swetsenegger het volgende:

    -edit- hij was nu sneller dan gisteren (misschien draaide mijn virusscanner ofzo) maar nog steeds goed voor bijna 4 seconden.
    Je hebt mail terug En het kan nog sneller
    Swetseneggerzaterdag 4 maart 2006 @ 14:28
    quote:
    Op zaterdag 4 maart 2006 14:19 schreef Light het volgende:

    [..]

    Je hebt mail terug En het kan nog sneller
    0.4 seconden!

    1ADD INDEX `genre` ( `genre` , `ad_id` )

    Dit begrijp ik niet. Je zet een index op genre, maar die gebruikt twee velden ofzo?
    Lightzaterdag 4 maart 2006 @ 14:30
    quote:
    Op zaterdag 4 maart 2006 14:28 schreef Swetsenegger het volgende:

    [..]

    0.4 seconden!
    [ code verwijderd ]

    Dit begrijp ik niet. Je zet een index op genre, maar die gebruikt twee velden ofzo?
    Je maakt een index, die noem je genre, en die gebruikt 2 velden, namelijk genre en ad_id.
    Lightzaterdag 4 maart 2006 @ 14:31
    Het is dus, om het compleet te houden:
    1ALTER TABLE `ad` DROP INDEX `genre` , ADD INDEX `genre` ( `genre` , `ad_id` ) 
    Swetseneggerzaterdag 4 maart 2006 @ 19:10
    quote:
    Op zaterdag 4 maart 2006 14:30 schreef Light het volgende:

    [..]

    Je maakt een index, die noem je genre, en die gebruikt 2 velden, namelijk genre en ad_id.
    Ah ok, het is een naampje.
    Ik wist dus niet dat je 1 index op 2 velden kon zetten. Ik dacht dat je een kolom index kon maken.
    En waneer er twee kolommen gebruikt worden, maak je die kolommen bijde index.

    Maar het is dus verstandiger om dan 1 index te maken, met die 2 kolommen, vat ik het zo een beetje behoorlijk samen?
    Tijnzaterdag 4 maart 2006 @ 20:25
    quote:
    Op zaterdag 4 maart 2006 12:14 schreef Swetsenegger het volgende:

    [..]

    Speciaal voor Tijn trouwens, kon je deze al?:
    http://www.apple.com/downloads/macosx/unix_open_source/mamp.html

    Ik ga denk ik ook maar zoeken naar een xserve
    Oh tof, die kende ik niet Maar ik had PHP en MySQL al zelf draaiende gekregen op m'n Mac, dus op zich heb je het ook niet echt nodig. PHP stond er zo op en MySQL was met de bijgeleverde handleiding ook wel te doen

    Sowieso bestaat er ook een server-versie van Mac OS X waar dit trouwens volgens mij al allemaal standaard in zit. Dat is ook het standaard OS van een XServe, dus dat heb je echt binnen 5 seconden werkend.
    Swetseneggerzaterdag 4 maart 2006 @ 21:34
    quote:
    Op zaterdag 4 maart 2006 20:25 schreef Tijn het volgende:

    [..]

    Oh tof, die kende ik niet Maar ik had PHP en MySQL al zelf draaiende gekregen op m'n Mac, dus op zich heb je het ook niet echt nodig. PHP stond er zo op en MySQL was met de bijgeleverde handleiding ook wel te doen

    Sowieso bestaat er ook een server-versie van Mac OS X waar dit trouwens volgens mij al allemaal standaard in zit. Dat is ook het standaard OS van een XServe, dus dat heb je echt binnen 5 seconden werkend.
    Alleen kom ik nergens een betaalbare xserve tegen.
    Dus toch maar verder knutselen aan mijn Sun UltraSparc
    beertenzondag 5 maart 2006 @ 18:50
    Uit een tabel wil ik informatie halen, die ik wil presenteren op alfabet. Met pagina-navigatie.
    In mijn query zal dus iets moeten zitten dat alle records ophaalt beginnend met een a enz.

    Maar hoe ziet mijn query eruit?

    select * from tabel WHERE name=..... (Hier moet ie dan alles records gebinnende met a selecteren.

    Hoe flik ik 'm dat?
    SuperRembozondag 5 maart 2006 @ 18:54
    Dat kan met de LIKE operator.
    beertenzondag 5 maart 2006 @ 20:41
    quote:
    Op zondag 5 maart 2006 18:54 schreef SuperRembo het volgende:
    Dat kan met de LIKE operator.
    Held, you made my day!
    Swetseneggerzondag 5 maart 2006 @ 22:13
    quote:
    Op zondag 5 maart 2006 20:41 schreef beerten het volgende:

    [..]

    Held, you made my day!
    vergeet de wildcards niet %

    JeRazondag 5 maart 2006 @ 22:24
    And as a side note to that, LIKE-queries zijn hartstikke handig maar je moet oppassen met user input. Sowieso zul je mysql_real_escape_string() moeten gebruiken om de user input te escapen, maar je zult ook alle percent-tekens en underscores moeten escapen omdat die een speciale betekenis hebben bij LIKE. Een handige functie is deze:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    function like_esc($string)
    {
        
    $string = mysql_real_escape_string($string);
        
    $string = str_replace('%', '\%', $string);
        
    $string = str_replace('_', '\_', $string);
        return
    $string;
    }
    ?>
    Swetseneggerzondag 5 maart 2006 @ 22:47
    Hmz, $search=like_esc($_POST['search']); geeft bij %zoek% niet \%zoek\% terug zoals ik verwacht?
    JeRazondag 5 maart 2006 @ 22:50
    quote:
    Op zondag 5 maart 2006 22:47 schreef Swetsenegger het volgende:
    Hmz, $search=like_esc($_POST['search']); geeft bij %zoek% niet \%zoek\% terug zoals ik verwacht?
    1) Wat geeft hij dan wél terug?
    2) Heb je vantevoren alles gestripslashes()'ed indien magic_quotes_gpc aan staat?
    Swetseneggerzondag 5 maart 2006 @ 23:05
    quote:
    Op zondag 5 maart 2006 22:50 schreef JeRa het volgende:

    [..]

    1) Wat geeft hij dan wél terug?
    2) Heb je vantevoren alles gestripslashes()'ed indien magic_quotes_gpc aan staat?
    Niet gestripslashed, macig quotes staat aan
    Maar goed, dan verwacht ik nog steeds dat ik wel een geescaped % terug krijgt toch? of wordt die OOK geslashed door magic quotes?
    JeRazondag 5 maart 2006 @ 23:08
    quote:
    Op zondag 5 maart 2006 23:05 schreef Swetsenegger het volgende:

    [..]

    Niet gestripslashed, macig quotes staat aan
    Maar goed, dan verwacht ik nog steeds dat ik wel een geescaped % terug krijgt toch? of wordt die OOK geslashed door magic quotes?
    Inderdaad, ik weet verder ook niet waarom hij niet voor je werkt hier werkt exact dezelfde code wél, na het aanmaken van een MySQL connectie. Heb jij dat ook?
    Swetseneggerzondag 5 maart 2006 @ 23:11
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    require('../connect.php');


    function
    like_esc($string)
    {
        
    $string = mysql_real_escape_string($string);
        
    $string = str_replace('%', '\%', $string);
        
    $string = str_replace('_', '\_', $string);
        return
    $string;
    }
    ?>


    Ja

    en ik roep 'm zo aan

    1
    2
    3
    4
    5
    <?php
    if($_SERVER['REQUEST_METHOD']=='POST'){
                    
    $search=like_esc($_POST['search']);
                    
    $query="SELECT whatever FROM tabel WHERE iets LIKE'%".$search."%' || iets_anders LIKE'%".$search."%' || compleet_anders LIKE'%".$search."%' ORDER BY d DESC";
    ?>


    Maar goed, het kan ook niet missen eigenlijk want het is een str_replace. Ik bedoel... het is geen exotische code ofzo. Het enige wat ik kon bedenken was dat ik de functie verkeerd aanriep ofzo
    SuperRembozondag 5 maart 2006 @ 23:34
    Maar wat staat er nou in $search (of in $query) ?
    mscholzondag 5 maart 2006 @ 23:54
    misschien beetje offtopic maar een zeer domme vraag al zeg ik het zelf:
    waarom moet ik, als ik alle waardes v/d aangevinkte checkboxes wil kunnen ophalen, in de name attribuut [] zetten?
    want als ik alleen een naam gebuik krijg je alleen de laatste terug?