artikel tonen aan hand van id

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joren vh

joren vh

09/02/2008 13:51:00
Quote Anchor link
Beste,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
                        }
                    }

                    ?>


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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
    }
...


En in mijn content staat dan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include_once($insluiten); ?>

Gewijzigd op 01/01/1970 01:00:00 door Joren vh
 
PHP hulp

PHP hulp

29/03/2024 13:48:22
 
Joren de Wit

Joren de Wit

09/02/2008 13:55:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$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
 
Frank -

Frank -

09/02/2008 13:56:00
Quote Anchor link
Dit lijkt nergens op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$query_artikel
= mysql_query = (" SELECT * FROM artikelen WHERE categorie = 'php' AND id = '. $_GET['id'] .' ")or die(mysql_error());
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
?>

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.
 
Joren vh

joren vh

09/02/2008 14:04:00
Quote Anchor link
Bedankt voor jullie reactie jongens.

@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)
PHP script in nieuw venster Selecteer het PHP script
1
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
                        }
                    }

                    ?>


Dankje !!
Gewijzigd op 01/01/1970 01:00:00 door joren vh
 
Frank -

Frank -

09/02/2008 14:05:00
Quote Anchor link
Nu ga je weer de fout in me de quotes! Zie de kleurcodering.

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!
 
Arwin  vdv

Arwin vdv

09/02/2008 14:08:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
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
 
Joren de Wit

Joren de Wit

09/02/2008 14:08:00
Quote Anchor link
En waar controleer jij of je query wel resultaten opgehaald heeft? Dat zal in ieder geval niet het geval zijn, aangezien die nog fout is...

Schrijf het netjes uit, dan zie je direct waar het fout gaat. Dit is al beter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
}
?>
 
Joren vh

joren vh

09/02/2008 14:09:00
Quote Anchor link
De kleurcodering is naar mijn zin netjes. En wat maken die namen nou uit, ik weet waar voor ze dienen dus dan is het toch goed.

Verder zie ik dus niets fout in de kleur codering. Ik kijk het nu nog een keertje na.
 
Frank -

Frank -

09/02/2008 14:12:00
Quote Anchor link
Zie de voorbeelden van Arwin, Blanche en mijzelf, dan zul je zien dat daar de functie mysql_real_escape_string() een ander kleurtje heeft. Dat komt omdat deze keurig buiten de quotes van de query-string staat. Dat heeft ook als voordeel dat de functie als een functie wordt gezien (en dus ook iets uitspookt!!!) en niet als een stuk tekst in jouw query staat te staan.

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.
 
Joren vh

joren vh

09/02/2008 14:17:00
Quote Anchor link
Ik zag het net pqFrank.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
                        }
                    }

                    ?>


Dank,
Joren

Edit:

Code geupdate
Gewijzigd op 01/01/1970 01:00:00 door joren vh
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.