Archief - Vreemde dingen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Unrach

Legacy Member
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:
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!

Curahee Q

Legacy Member
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"];

Unrach

Legacy Member
Curahee Q zei:
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:
<?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:

PHP:
<?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!

GivenToFly

Legacy Member
Dump (var_dump) uw variabelen is nadat ze uit de database worden uitgelezen en vlak voor ze in uw if-statement worden gebruikt.

MiniJeffrey

Legacy Member
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.

GivenToFly

Legacy Member
MiniJeffrey zei:
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:
list($date, $time) =str_split($row["TIME"],11);
$now= date("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.

MiniJeffrey

Legacy Member
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 " ". :p

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.

Fromzon

Legacy Member
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:
$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:
'Hello' .$world
dat er een variabele staat,
vergeleken met iets als:
PHP:
"Hello $world"

Curahee Q

Legacy Member
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:
$w = "W";
echo "Hello ${w}orld!";
Lame voorbeeld, maar ge snapt het wel ;).

Unrach

Legacy Member
Merci voor de reacties! Ik ga het is allemaal rustig bekijken hier :-)


Maar euh, wat bedoel je hier mee?

MiniJeffrey zei:
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.

MiniJeffrey

Legacy Member
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 :p

Unrach

Legacy Member
MiniJeffrey zei:
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 :p

achja, sorry. Ik was er wat te snel overgegaan. Mercikes :-) .. Ik ga het na mijn "druk druk" weekend eens oplossen.

adrianhates

Legacy Member
vergeet wel ook niet alle input te checken ;)

Global variables cannot be trusted!

Unrach

Legacy Member
adrianhates zei:
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 :D
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan