Thread: Vreemde dingen

  1. #1
    Unrach's Avatar
    Registered
    29/08/08
    Location
    Hasselt
    Posts
    1,008
    iTrader
    3 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/2

    Vreemde dingen

    Hey allemaal,

    Sinds mijn nieuwe website is mijn PHP code heel vreemd aan het doen. Eerst dacht ik dat de server het niet aan kon maar heb vandaag de hele website eens op een andere host gezet en kreeg net dezelfde fouten.

    Ik ben er zo goed als zeker van dat er geen fouten in mijn PHP code zit, dus vraag me af waar dit probleem zich voordoet?

    De fouten doen zich voor bij het uitlezen van een database (zodat alles mooi in een lijstje komt te staan). Overal word dus dezelfde functies meegegeven. Zo had ik (op verschillende plaatsten) een "if else" statement. Waarbij hij deze statement bij sommige rijen gewoon niet uitvoerde. Dus heb dit maar weg gelaten.

    En nu zit ik met weer een ander probleem dat voor mij onverklaarbaar is. Ik heb nl. een functie gemaakt dat kijkt wanneer een item gepost is en hoeveel views het al gehad heeft. Als het meer dan 500 views heeft dan staat er een "hot" label over dat topic. Het doet zijn werk, maar heel vreemd heeft de laatste record ook een "hot" label. En die kreeg het al toen hij boven de 250 ofzo zat.

    Hier is de link zodat je het eens kan zien: Klik

    En dit is de PHP-code voor het "hot" functie:
    PHP Code:
    hotchecker $row["VIEWS"];

    if (
    $hotchecker 500){
       echo 
    '<img class="postchecker" src="img/hot.png" alt="Hot" />';

    Ik heb deze problemen op de namecheap en versio host. (heb nog niet verder kunnen testen)

    Zijn hier nog mensen die zo een dingen ooit hebben meegemaakt of weten waaraan dit allemaal kan liggen?

    Alvast bedankt!
    Cinecom: Videoproducties voor bedrijven.
    no votes  

  2. #2
    Curahee Q's Avatar
    Registered
    07/12/07
    Location
    Hoogstraten
    Posts
    854
    iTrader
    0
    Mentioned
    0 Post(s)
    Wat meer code zou handig zijn. Hoe je bijvoorbeeld je data uit je database haalt.

    Waarschijnlijk een typo maar er moet nog een $ voor hotchecker = $row["VIEWS"];
    no votes  

  3. #3
    Unrach's Avatar
    Registered
    29/08/08
    Location
    Hasselt
    Posts
    1,008
    iTrader
    3 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Quote Originally Posted by Curahee Q View Post
    This quote is hidden because you are ignoring this member. Show
    Wat meer code zou handig zijn. Hoe je bijvoorbeeld je data uit je database haalt.

    Waarschijnlijk een typo maar er moet nog een $ voor hotchecker = $row["VIEWS"];
    idd een type. Hier is de volledige functie waar ook die tijd checker tussen zit:

    PHP Code:
    <?php

    $uri 
    $_SERVER['REQUEST_URI'];
    if (
    $uri == "/bundles.php" || $uri == "/bundles") {
        
                    
    $hotchecker $row["VIEWS"];
                    
                    list(
    $date$time) =str_split($row["TIME"],11);
                    
    $nowdate("Y-m-d"time());
                    
                    
    $nownew strtotime($now);
                    
    $datenew strtotime($date);
                    
                    
    $diff $nownew $datenew;
                    
                    if (
    $diff <= 2505600 && $hotchecker >= 1500){
                        echo 
    '<img class="postchecker" src="img/hotnew.png" alt="Hot and New" />';
                    }elseif (
    $diff <= 2505600 || $hotchecker 500){
                        if (
    $diff <= 2505600){
                            echo 
    '<img class="postchecker" src="img/new.png" alt="New" />';
                        }
                        if (
    $hotchecker 250){
                            echo 
    '<img class="postchecker" src="img/hot.png" alt="Hot" />';
                        }
                    }
    }elseif (
    $uri == "/" || $uri == "index.php" || $uri == "/home") {
        
                            
                    list(
    $date$time) =str_split($datum,11);
                    
    $nowdate("Y-m-d"time());
                    
                    
    $nownew strtotime($now);
                    
    $datenew strtotime($date);
                    
                    
    $diff $nownew $datenew;
                    
                    if (
    $diff <= 2505600 && $hotchecker >= 1500){
                        echo 
    '<img class="postchecker" src="img/hotnew.png" alt="Hot and New" />';
                    }elseif (
    $diff <= 2505600 || $hotchecker 500){
                        if (
    $diff <= 2505600){
                            echo 
    '<img class="postchecker" src="img/new.png" alt="New" />';
                        }
                        if (
    $hotchecker 250){
                            echo 
    '<img class="postchecker" src="img/hot.png" alt="Hot" />';
                        }
                    }
    }else{
                
    $hotchecker $row["VIEWS"];
                    
                    list(
    $date$time) =str_split($row["TIME"],11);
                    
    $nowdate("Y-m-d"time());
                    
                    
    $nownew strtotime($now);
                    
    $datenew strtotime($date);
                    
                    
    $diff $nownew $datenew;
                    
                    if (
    $diff <= 2505600 && $hotchecker >= 1500){
                        echo 
    '<img class="postchecker" src="img/hotnew.png" alt="Hot and New" />';
                    }elseif (
    $diff <= 2505600 || $hotchecker 500){
                        if (
    $diff <= 2505600){
                            echo 
    '<img class="postchecker" src="img/new.png" alt="New" />';
                        }
                        if (
    $hotchecker 250){
                            echo 
    '<img class="postchecker" src="img/hot.png" alt="Hot" />';
                        }
                    }                    
                
    }
                
    ?>

    En zo lees ik een record uit:

    PHP Code:
    <?php
    // connectie met database maken
    include("include/connectie.php");

    $sort == ($_GET["sort"];
    $filter == ($_GET["filter"];                
                    
        
    //querry date
        
    $query=mysql_query("SELECT * from Tutorials WHERE " $filter " ORDER BY " $sort " DESC");

        
    //querry uitlezen in loop
        
    while($row mysql_fetch_array($query))
          {
              
    ?>

    //hier zitten gewoon echo's (bv. <?php echo $row["TUMB"]; ?>)
    Is dit genoeg informatie? Al bedankt voor de reactie!
    Cinecom: Videoproducties voor bedrijven.
    no votes  

  4. #4

    Registered
    30/10/08
    Location
    In my tree
    Posts
    80
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    5/5
    Dump (var_dump) uw variabelen is nadat ze uit de database worden uitgelezen en vlak voor ze in uw if-statement worden gebruikt.
    no votes  

  5. #5
    MiniJeffrey's Avatar
    Registered
    24/10/07
    Location
    Harelbeke
    Posts
    7,758
    iTrader
    0
    Mentioned
    2 Post(s)
    Reputation
    1/446
    Enkele PHP-tips mssn die je leven makkelijker kunnen maken:

    1: Je kunt beter mysqli_ gebruiken voor databasecommando's. Dit is de improved version van de mysql connector.

    2. Strings die je in dubbele quotes zet herkennen automatisch variabelen. je kan dus perfect zetten: echo "De inhoud van da variabele is: $inhoud"; terwijl je bij enkele quotes zou moeten zetten: echo 'De inhoud van de variabele is: ' . $inhoud;

    3: in je code is wel voorzien hoor dat je bij 250+ een hot label krijgt... Ik denk dat je if stucturen niet werken zoals je wil, je kan ze volgens mij ook een stuk eenvoudiger schrijven.

    Code:
    elseif ($diff <= 2505600 || $hotchecker > 500){ 
                        if ($diff <= 2505600){ 
                            echo '<img class="postchecker" src="img/new.png" alt="New" />'; 
                        } 
                        if ($hotchecker > 250){ 
                            echo '<img class="postchecker" src="img/hot.png" alt="Hot" />'; 
                        }
    Hier zeg je namelijk: als $diff kleiner of gelijk aan 2505600 of $hotchecker groter dan 500 is mag je mijn lus binnen. Dus stel dat je een $diff hebt van 1 en een $hotchevker van 300. Je gaat de lus binnen en komt op de tweede if (die genereert true want $diff is kleiner), daarna ga je naar lus 2 en die genereert ook true (want 300 is groter dan 250). dus hij krijgt de hot label.
    Let us pray for all the fools that be
    no votes  

  6. #6

    Registered
    30/10/08
    Location
    In my tree
    Posts
    80
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    5/5
    Quote Originally Posted by MiniJeffrey View Post
    This quote is hidden because you are ignoring this member. Show

    2. Strings die je in dubbele quotes zet herkennen automatisch variabelen. je kan dus perfect zetten: echo "De inhoud van da variabele is: $inhoud"; terwijl je bij enkele quotes zou moeten zetten: echo 'De inhoud van de variabele is: ' . $inhoud;
    Common practice is om enkele quotes te gebruiken. Je moet je HTML-quotes dan niet allemaal gaan escapen en PHP hoeft niet heel je strings af te zoeken naar variabelen.

    Wat de code betreft is
    PHP Code:
    list($date$time) =str_split($row["TIME"],11);
    $nowdate("Y-m-d"time());
                    
    $nownew strtotime($now);
    $datenew strtotime($date);
                    
    $diff $nownew $datenew
    ook niet echt geweldig. SQL kan dat allemaal veel beter zelf uitrekenen (als je zoals het hoort met datetime-velden werkt tenminste.)

    De code in de verschillende mogelijkheden van je hoofdselectie (die op basis van $uri) ziet er me overigens ook nogal hetzelfde uit en zoals het er nu staat lijken de 5de en 6de regel uit je uitleescode ook niet echt juist en ben je vatbaar voor SQL-injectie.
    no votes  

  7. #7
    MiniJeffrey's Avatar
    Registered
    24/10/07
    Location
    Harelbeke
    Posts
    7,758
    iTrader
    0
    Mentioned
    2 Post(s)
    Reputation
    1/446
    Het is common practive dat je " " mag gebruiken, maar natuurlijk best alleen als er ook effectief een variabele instaat. Nuja, een ingewikkelde constructie gaan opbouwen met enkele quotes en de nodige bijhorende spaties (.' '.), en variabelen... geef mij dan toch maar alles in de " ".

    Zoveel werk is dat afspeuren naar variabelen dan ook weer niet hoor, maar nogmaals gebruik je het inderdaad wel best alleen als er ook variabelen instaan.
    Let us pray for all the fools that be
    no votes  

  8. #8

    Registered
    30/05/06
    Posts
    94
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/0
    Ja, misschien heeft iemand al SQL-injectie met nog wat HTML quotes en nog wat gedaan, waardoor het "plots niet meer werkt".
    Ik heb niet alles gelezen, maar iets als:

    PHP Code:
    $sort == ($_GET["sort"];
    $filter == ($_GET["filter"]; 
    is voor zover ik weet gewoon fout?
    Een toewijzing is met = terwijl == een comparison operator is ( om dingen te vergelijken ), om maar iets te noemen.


    Ah en over die ' ' versus " ".
    Ik gebruik altijd ' ' omdat " " door een parser gaat, en dus intensiever is, en dus trager, en dus ....
    Ik vind het trouwens ook gewoon duidelijker bij
    PHP Code:
    'Hello' .$world 
    dat er een variabele staat,
    vergeleken met iets als:
    PHP Code:
    "Hello $world
    no votes  

  9. #9
    Curahee Q's Avatar
    Registered
    07/12/07
    Location
    Hoogstraten
    Posts
    854
    iTrader
    0
    Mentioned
    0 Post(s)
    Men gebruikt eerder de single quote notation en niet de double quote notation. Voor inderdaad boven aangehaalde redenen, en dat zijn snelheid en vooral ook duidelijkheid. Met syntaxhighlighting zie je meteen wat je variabele zijn in een stuk tekst.

    Ook wordt trouwens voor de double quote notation aangeraden om variabele buiten quotes te halen om fouten tot een minimum te beperken. Zo hoef je nooit de lelijke bracket-notation te gebruiken
    PHP Code:
    $w "W";
    echo 
    "Hello ${w}orld!"
    Lame voorbeeld, maar ge snapt het wel .
    no votes  

  10. #10
    Unrach's Avatar
    Registered
    29/08/08
    Location
    Hasselt
    Posts
    1,008
    iTrader
    3 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Merci voor de reacties! Ik ga het is allemaal rustig bekijken hier :-)


    Maar euh, wat bedoel je hier mee?

    Quote Originally Posted by MiniJeffrey View Post
    This quote is hidden because you are ignoring this member. Show
    3: in je code is wel voorzien hoor dat je bij 250+ een hot label krijgt... Ik denk dat je if stucturen niet werken zoals je wil, je kan ze volgens mij ook een stuk eenvoudiger schrijven.
    Last edited by Unrach; 16-04-2010 at 13:49.
    Cinecom: Videoproducties voor bedrijven.
    no votes  

  11. #11
    MiniJeffrey's Avatar
    Registered
    24/10/07
    Location
    Harelbeke
    Posts
    7,758
    iTrader
    0
    Mentioned
    2 Post(s)
    Reputation
    1/446
    Welja je zei toch dat er een item toch hot kreeg terwijl hij slechts 250 views had? Dat is programmatisch dan ook zo voorzien bedoel ik, zie mn vorige uitleg
    Let us pray for all the fools that be
    no votes  

  12. #12
    Unrach's Avatar
    Registered
    29/08/08
    Location
    Hasselt
    Posts
    1,008
    iTrader
    3 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Quote Originally Posted by MiniJeffrey View Post
    This quote is hidden because you are ignoring this member. Show
    Welja je zei toch dat er een item toch hot kreeg terwijl hij slechts 250 views had? Dat is programmatisch dan ook zo voorzien bedoel ik, zie mn vorige uitleg
    achja, sorry. Ik was er wat te snel overgegaan. Mercikes :-) .. Ik ga het na mijn "druk druk" weekend eens oplossen.
    Cinecom: Videoproducties voor bedrijven.
    no votes  

  13. #13
    adrianhates's Avatar
    Registered
    23/01/06
    Posts
    2,115
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    23/23
    vergeet wel ook niet alle input te checken

    Global variables cannot be trusted!
    no votes  

  14. #14
    Unrach's Avatar
    Registered
    29/08/08
    Location
    Hasselt
    Posts
    1,008
    iTrader
    3 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Quote Originally Posted by adrianhates View Post
    This quote is hidden because you are ignoring this member. Show
    vergeet wel ook niet alle input te checken

    Global variables cannot be trusted!
    Ahja, thx. Als ge mijne vorige topic nog herinnerd over die PHP shell hack. Da will ik idd niet weer meemaken
    Cinecom: Videoproducties voor bedrijven.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in