Thread: Vreemde dingen
-
15-04-2010, 19:49 #1Approved 9-lifer
- 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:
Ik heb deze problemen op de namecheap en versio host. (heb nog niet verder kunnen testen)PHP Code:hotchecker = $row["VIEWS"];
if ($hotchecker > 500){
echo '<img class="postchecker" src="img/hot.png" alt="Hot" />';
}
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
-
-
15-04-2010, 19:56 #2
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
-
15-04-2010, 20:09 #3Approved 9-lifer
- Registered
- 29/08/08
- Location
- Hasselt
- Posts
- 1,008
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
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);
$now= date("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);
$now= date("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);
$now= date("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:
Is dit genoeg informatie? Al bedankt voor de reactie!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"]; ?>)Cinecom: Videoproducties voor bedrijven.no votes
-
15-04-2010, 20:31 #4
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
-
15-04-2010, 22:08 #5Approved 9liver
- 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.
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.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" />'; }Let us pray for all the fools that beno votes
-
15-04-2010, 22:50 #6
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
ook niet echt geweldig. SQL kan dat allemaal veel beter zelf uitrekenen (als je zoals het hoort met datetime-velden werkt tenminste.)PHP Code:list($date, $time) =str_split($row["TIME"],11);
$now= date("Y-m-d", time());
$nownew = strtotime($now);
$datenew = strtotime($date);
$diff = $nownew - $datenew;
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
-
15-04-2010, 23:31 #7Approved 9liver
- 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 beno votes
-
15-04-2010, 23:31 #8
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:
is voor zover ik weet gewoon fout?PHP Code:$sort == ($_GET["sort"];
$filter == ($_GET["filter"];
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
dat er een variabele staat,PHP Code:'Hello' .$world
vergeleken met iets als:
PHP Code:"Hello $world"
no votes
-
16-04-2010, 00:51 #9
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
Lame voorbeeld, maar ge snapt het welPHP Code:$w = "W";
echo "Hello ${w}orld!";
.
no votes
-
16-04-2010, 13:35 #10Approved 9-lifer
- Registered
- 29/08/08
- Location
- Hasselt
- Posts
- 1,008
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
no votes
-
16-04-2010, 14:08 #11Approved 9liver
- 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 beno votes
-
16-04-2010, 16:46 #12Approved 9-lifer
- Registered
- 29/08/08
- Location
- Hasselt
- Posts
- 1,008
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
no votes
-
17-04-2010, 00:19 #13
vergeet wel ook niet alle input te checken

Global variables cannot be trusted!no votes
-
17-04-2010, 14:43 #14Approved 9-lifer
- Registered
- 29/08/08
- Location
- Hasselt
- Posts
- 1,008
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
no votes

