artikel tonen aan hand van id
Voor mijn nieuwe website ben ik bezig met een artikel systeem.
Wat ik wil is het volgende.
Als ik in categorie php druk op bv. 'test artikel' en test artikel heeft als id 1 dat als je op de link klikt je het artikel te zien krijgt.
De titel kreeg ik mooi op het beeld, maar nu heb ik er een if else statement om gezet om het id op te halen etc. Enkel krijg ik nu mijn content vlak niet meer te zien. Ik zou echt niet weten wat ik verkeerd doe.
Het adres na het klikken op een artikel moet iets worden als ?p=artikelen_php&id=2
Dit krijg ik wel voor elkaar maar het uitlezen dus niet.
mijn code :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
$query_artikel = mysql_query = (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. $_GET['id'] .' ")or die(mysql_error());
if (isset($_GET['id'])){
while($artikel = mysql_fetch_array($query_artikel)){
echo $artikel['artikel'];
}
}
else{
$query = "SELECT * FROM artikelen WHERE categorie = 'php' ";
$sql = mysql_query($query) or die (mysql_error() );
while ($titel = mysql_fetch_array($sql) ) {
?><a href="?p=artikelen&id=<?php echo $titel['id']; ?>" title="<?php echo $titel['titel'];?>"> <?php echo $titel['titel']; ?> </a><?php
}
}
?>
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
$query_artikel = mysql_query = (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. $_GET['id'] .' ")or die(mysql_error());
if (isset($_GET['id'])){
while($artikel = mysql_fetch_array($query_artikel)){
echo $artikel['artikel'];
}
}
else{
$query = "SELECT * FROM artikelen WHERE categorie = 'php' ";
$sql = mysql_query($query) or die (mysql_error() );
while ($titel = mysql_fetch_array($sql) ) {
?><a href="?p=artikelen&id=<?php echo $titel['id']; ?>" title="<?php echo $titel['titel'];?>"> <?php echo $titel['titel']; ?> </a><?php
}
}
?>
Dank,
Joren
Edit:
Wat ik mij nog afvraag. Ik maak gebruik van php om mijn content te includen, maar als mijn adres dan bv. ?p=artikelen_php&id=5 is gaat hij dan geen error pagina geven ?
code :
En in mijn content staat dan
Wat ik mij nog afvraag. Ik maak gebruik van php om mijn content te includen, maar als mijn adres dan bv. ?p=artikelen_php&id=5 is gaat hij dan geen error pagina geven ?
code :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//checken of p leeg is, anders is p home
if ($_GET['p']){
$pagina = $_GET['p'];
}
else{
//als de $_GET leeg is dan home.php includen
$pagina = "home";
}
//kijken wat in pagina staat en vervolgens de variable $insluiten de naam geven van je bestand
if($pagina == "home"){
$insluiten = "home.inc.php";
}
elseif($pagina == "artikelen"){
$insluiten = "artikelen.inc.php";
}
...
if ($_GET['p']){
$pagina = $_GET['p'];
}
else{
//als de $_GET leeg is dan home.php includen
$pagina = "home";
}
//kijken wat in pagina staat en vervolgens de variable $insluiten de naam geven van je bestand
if($pagina == "home"){
$insluiten = "home.inc.php";
}
elseif($pagina == "artikelen"){
$insluiten = "artikelen.inc.php";
}
...
En in mijn content staat dan
Gewijzigd op 01/01/1970 01:00:00 door Joren vh
Code (php)
1
2
3
2
3
<?php
$query_artikel = mysql_query = (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. $_GET['id'] .' ")or die(mysql_error());
?>
$query_artikel = mysql_query = (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. $_GET['id'] .' ")or die(mysql_error());
?>
Wat doet dat 2e = tegen in deze regel? Verder gebruik je een GET variabele in je query waarvan je ten eerste niet weet of hij wel bestaat en die je ten tweede helemaal niet beveiligd hebt. Dit is vragen om problemen.
Het eerste los je op door hem binnen je if-statement van regel 5 te plaatsen en het tweede door te controleren of de waarde wel numeriek is (mbv. ctype_digit()).
ps. Wat betreft je tweede vraag: nee waarschijnlijk niet. Je includescript maakt alleen gebruik van de GET variabele 'pagina', de rest laat hij gewoon met rust...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Code (php)
1
2
3
2
3
<?
$query_artikel = mysql_query = (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. $_GET['id'] .' ")or die(mysql_error());
?>
$query_artikel = mysql_query = (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. $_GET['id'] .' ")or die(mysql_error());
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?
$query = "
SELECT
*
FROM
artikelen
WHERE
id = '".mysql_real_escape_string($_GET['id']) ."'
";
$result = mysql_query($query) or die(mysql_error().$query);
// fetchen, etc.
?>
$query = "
SELECT
*
FROM
artikelen
WHERE
id = '".mysql_real_escape_string($_GET['id']) ."'
";
$result = mysql_query($query) or die(mysql_error().$query);
// fetchen, etc.
?>
Omdat je het id hebt, hoef je niet meer op de categorie te zoeken. Er zijn geen id's met een andere categorie, het id is uniek. Je mag op categorie zoeken hoor, maar het voegt niks toe.
Foutafhandeling, die je nog moet aanpassen, en netjes schrijven, voegen wél wat toe, dat is namelijk onmisbaar.
@blanche,
Ik heb mijn query in mijn if statement gezet, die = was er inderdaad te veel aan. Maar hij toont nog steeds niet mijn overzicht etc.
Verder snap ik je niet meer.
@pqFrank,
Ik heb even nog mysql_real_escape_string toegevoegd, ik wist niet dat dit in een query moest/mocht.
De code die ik nu heb is de volgende.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
if (isset($_GET['id'])){
$query_artikel = mysql_query (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. mysql_real_escape_string( $_GET['id']) .' ")or die(mysql_error());
while($artikel = mysql_fetch_array($query_artikel)){
echo $artikel['artikel'];
}
}
else{
$query = "SELECT * FROM artikelen WHERE categorie = 'php' ";
$sql = mysql_query($query) or die (mysql_error() );
while ($titel = mysql_fetch_array($sql) ) {
?><a href="?p=artikelen&id=<?php echo $titel['id']; ?>" title="<?php echo $titel['titel'];?>"> <?php echo $titel['titel']; ?> </a><?php
}
}
?>
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
if (isset($_GET['id'])){
$query_artikel = mysql_query (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. mysql_real_escape_string( $_GET['id']) .' ")or die(mysql_error());
while($artikel = mysql_fetch_array($query_artikel)){
echo $artikel['artikel'];
}
}
else{
$query = "SELECT * FROM artikelen WHERE categorie = 'php' ";
$sql = mysql_query($query) or die (mysql_error() );
while ($titel = mysql_fetch_array($sql) ) {
?><a href="?p=artikelen&id=<?php echo $titel['id']; ?>" title="<?php echo $titel['titel'];?>"> <?php echo $titel['titel']; ?> </a><?php
}
}
?>
Dankje !!
Gewijzigd op 01/01/1970 01:00:00 door joren vh
Daarnaast is $query_artikel geen query, maar een resultset. De naam 'query' slaat dus nergens op.
Verderop maak je dezelfde fout, $sql is geen SQL, maar eveneens een resultset. $result ligt voor de hand!
Code (php)
1
2
3
2
3
<?php
mysql_query("SELECT * FROM artikelen WHERE categorie = 'php' AND id = '".mysql_real_escape_string($_GET['id'])."'")or die(mysql_error());
?>
mysql_query("SELECT * FROM artikelen WHERE categorie = 'php' AND id = '".mysql_real_escape_string($_GET['id'])."'")or die(mysql_error());
?>
astu
Gewijzigd op 01/01/1970 01:00:00 door Arwin vdv
Schrijf het netjes uit, dan zie je direct waar het fout gaat. Dit is al beter:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$sQuery = "
SELECT *
FROM artikelen
WHERE categorie = 'php'
AND id = '". mysql_real_escape_string( $_GET['id']);
if(!$rResult = mysql_query($sQuery))
{
trigger_error(mysql_error().'<br />In query: '.$sQuery);
}
elseif(mysql_num_rows($rResult) == 0)
{
trigger_error('Geen records opgehaald met query: '.$sQuery);
}
else
{
// Resultaat fetchen
}
?>
$sQuery = "
SELECT *
FROM artikelen
WHERE categorie = 'php'
AND id = '". mysql_real_escape_string( $_GET['id']);
if(!$rResult = mysql_query($sQuery))
{
trigger_error(mysql_error().'<br />In query: '.$sQuery);
}
elseif(mysql_num_rows($rResult) == 0)
{
trigger_error('Geen records opgehaald met query: '.$sQuery);
}
else
{
// Resultaat fetchen
}
?>
Verder zie ik dus niets fout in de kleur codering. Ik kijk het nu nog een keertje na.
En nogmaals, ga netjes scripten. Dat voorkomt al 9 van de 10 problemen en het laatste probleempje pluk je er bij het debuggen zo uit. Waarom? Omdat het overzichtelijk is.
Dank jullie wel allemaal. Ik krijg mijn titels nu mooi weergeven met de nette url. Enkel als ik nu klik gaat hij naar ?=artikelen
Nu doe ik geen while loop meer voor het uitlezen. Ik heb geen idee waar ik deze zou moeten plaatsen. Zouden jullie mij even kunnen helpen.
Code ziet er nu als volgt uit.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
if (isset($_GET['id'])){
$query_artikel = mysql_query("SELECT * FROM artikelen WHERE categorie = 'php' AND id = '".mysql_real_escape_string($_GET['id'])."'")or die(mysql_error());
if(!$rResult = $query_artikel){
trigger_error(mysql_error().'<br />In query: '.$query_artikel;}
elseif(mysql_num_rows($rResult) == 0){
trigger_error('Geen records opgehaald met query: '.$query_artikel);
}
}
else{
$query = "SELECT * FROM artikelen WHERE categorie = 'php' ";
$sql = mysql_query($query) or die (mysql_error() );
while ($titel = mysql_fetch_array($sql) ) {
?><a href="?p=artikelen&id=<?php echo $titel['id']; ?>" title="<?php echo $titel['titel'];?>"> <?php echo $titel['titel']; ?> </a><br /><?php
}
}
?>
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
if (isset($_GET['id'])){
$query_artikel = mysql_query("SELECT * FROM artikelen WHERE categorie = 'php' AND id = '".mysql_real_escape_string($_GET['id'])."'")or die(mysql_error());
if(!$rResult = $query_artikel){
trigger_error(mysql_error().'<br />In query: '.$query_artikel;}
elseif(mysql_num_rows($rResult) == 0){
trigger_error('Geen records opgehaald met query: '.$query_artikel);
}
}
else{
$query = "SELECT * FROM artikelen WHERE categorie = 'php' ";
$sql = mysql_query($query) or die (mysql_error() );
while ($titel = mysql_fetch_array($sql) ) {
?><a href="?p=artikelen&id=<?php echo $titel['id']; ?>" title="<?php echo $titel['titel'];?>"> <?php echo $titel['titel']; ?> </a><br /><?php
}
}
?>
Dank,
Joren
Edit:
Code geupdate
Code geupdate
Gewijzigd op 01/01/1970 01:00:00 door joren vh