Hallo vriendelijke php'ers
ik heb een vraagje :

ik wil graag mijn nieuws selecteren uit de database waarvan bijv. aleen de maand november is

ik heb dit nu al in mekaar geknutselt aleen werkt dit nog niet naar behoren
ik ben ook een beetje een noob met php maar ik begin er al wat meer van te snappen mischien dat jullie mij met dit probleem willen helpen (of weten wat ik fout doe) :


<?php      
       
$maand=$_GET['maand'];   
if(!empty($maand)){   
mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws WHERE MONTH(datum) = ".$maand." ORDER BY datum DESC");   
echo '

<li> <a href="#">'.$row['titel'].'</a><br />
              '.$row['nieuws'].'<br />
              <span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span> </li>
			  
			  ';   
}else{
mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws ORDER BY id DESC");   
echo '

<li> <a href="#">'.$row['titel'].'</a><br />
              '.$row['nieuws'].'<br />
              <span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span> </li>
			  
			  ';   
} 



?>





<a href="index.php?maand=11">november</a>
je haalt nergens de gegevens op met mysql_fetch_assoc of een vergelijkbare functie. Dus het is logisch dat er niet gebeurt wat je wilt.
dit onder je query:


<?php

$row = mysql_fetch_assoc(JE QUERY);

?>


geef je query dan een waarde of zet hem in de assoc.
en zorg voor een errorafhandeling! (zie beginnerstutorial!)
Trouwens - ik weet niet of dit je bedoeling is - maar nu krijg je als je bijvoorbeeld in nov. 2007 berichten hebt geplaatst én in 2008, de berichten van allebei de jaren. Ik vraag me af of je dit wilt.
dit kun je veranderen door (tog??) :

<a href="index.php?maand=1&jaar=2008">January 2008</a>

en dan in de php


<?php      
       
$maand=$_GET['maand'];
$jaar=$_GET['jaar'];   
if(!empty($maand) && !empty($jaar)){   
$row = mysql_fetch_assoc(mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws WHERE MONTH(datum) = ".$maand." AND YEAR(datum) = ".$jaar." ORDER BY datum DESC")); 

  
echo '<li> <a href="#">'.$row['titel'].'</a><br />';  
echo $row['nieuws'].'<br />';
echo '<span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span></li>'; 

  
}else{
$row = mysql_fetch_assoc(mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws ORDER BY id DESC"));


echo '<li> <a href="#">'.$row['titel'].'</a><br />';  
echo $row['nieuws'].'<br />';
echo '<span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span></li>';  

 
} 

?>	



klopt dit en kan dit??
Klopt inderdaad.

Je gooit je GET vars wel zo de query in, das een erg gevaarlijke gewoonte.

Over sql-injectie
Zo dus :


<?php      
       
$maand = mysql_real_escape_string($_GET['maand']);
$jaar = mysql_real_escape_string($_GET['jaar']);   
if(!empty($maand) && !empty($jaar)){   
$row = mysql_fetch_assoc(mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws WHERE MONTH(datum) = ".$maand." AND YEAR(datum) = ".$jaar." ORDER BY datum DESC")); 

  
echo '<li> <a href="#">'.$row['titel'].'</a><br />';  
echo $row['nieuws'].'<br />';
echo '<span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span></li>'; 

  
}else{
$row = mysql_fetch_assoc(mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws ORDER BY id DESC"));


echo '<li> <a href="#">'.$row['titel'].'</a><br />';  
echo $row['nieuws'].'<br />';
echo '<span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span></li>';  

 
} 

?>



?????
Nee eigenlijk niet, mysql_real_escape_string.. is bedoeld voor strings. Met typecasting kun je een variabele dwingen een bepaald type aan te nemen. In jouw geval

<?php
$maand = (int)$_GET['maand'];
$jaar =(int)$_GET['jaar'];   
if(!empty($maand) && !empty($jaar)){   
$row = mysql_fetch_assoc(mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws WHERE MONTH(datum) = ".$maand." AND YEAR(datum) = ".$jaar." ORDER BY datum DESC")); 

  
echo '<li> <a href="#">'.$row['titel'].'</a><br />';  
echo $row['nieuws'].'<br />';
echo '<span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span></li>'; 

  
}else{
$row = mysql_fetch_assoc(mysql_query("SELECT titel,nieuws,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM blog_nieuws ORDER BY id DESC"));


echo '<li> <a href="#">'.$row['titel'].'</a><br />';  
echo $row['nieuws'].'<br />';
echo '<span class="smaller low">Published: <strong>'.$row['show_datum'].'</strong>, <strong><a href="#"></a></strong></span></li>';  

 
} 


als iemand nu ?maand=ab"c invoert dan wordt doormiddel van typecasting $maand null.
Als je mysql_real_escape_string zou gebruiken wordt $maand 'ab\"c'. Dit zou geen resultaten of misschien een error opleveren. ;)

Reageren