Gegevens ophalen uit een database met een link

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Donny Wie weet

Donny Wie weet

09/05/2012 14:26:09
Quote Anchor link
Beste alle,

Ik heb een menu gemaakt in js die zichzelf vertakt. Alleen wil ik dat wanneer je op een link klikt, er gegevens uit de database haalt... Ik kan wel 20 verschillende pagina's maken voor rode_wijn.php, witte_wijn.php etc. etc., alleen is er voor dit een makkelijkere methode. Zelf dacht ik aan: de link een name="" meegeven, en die omzetten in een variabele, en deze variabele te verwerken in de database SELECT FROM tabel_naam WHERE etc etc...



<a href="pagina.php" name="rode_wijn">Rode Wijn</a>



$var = $_POST['rode_wijn'];



SELECT FROM tabel_naam WHERE $var="$var";
 
PHP hulp

PHP hulp

05/02/2023 06:00:24
 
Jurgen B

Jurgen B

09/05/2012 14:28:19
Quote Anchor link
href="pagina.php?p=rode_wijn" en dan het deel achter p= vervangen door wat je wilt? Pagina.php kan dan $_GET['p'] opvragen en de juiste waarde uit de database halen (wel escapen!). Aan de hand van het aantal resultaten dat terugkomt weet je of de pagina bestaat of niet en kan een bijhorende foutmelding worden getoond.
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
if (isset($_GET['p']) {
   $result = mysql_query('
      SELECT content
      FROM pages
      WHERE nav_title = "'
. mysql_real_escape_string($_GET['p']) . '"'
   );

   if ($result === false) {
      /* Query is mislukt */
      echo 'De query is niet gelukt:' . mysql_error();
   }
elseif (mysql_num_rows($result) != 1) {
      /* Er is geen resultaat gevonden in de database of meer dan 1... */
      echo 'De gevraagde pagina kan niet worden gevonden!';
   }
else {
      /* Er is 1 rij gevonden */
      $row = mysql_fetch_assoc($result);
      echo $row['content'];
   }
}
?>
Gewijzigd op 09/05/2012 15:05:33 door Jurgen B
 
Obelix Idefix

Obelix Idefix

09/05/2012 14:37:37
Quote Anchor link
p kan wel ingevuld zijn, maar met een ongeldige waarde. Dus nog wel even controleren of er 1 rij of geen rij uit is gekomen.
 
Chris PHP

Chris PHP

09/05/2012 14:42:33
Quote Anchor link
Donny,

name="" is geen geldig atribuut voor een link <a>.

Doe het zoals jurgen uitlegd via de $_GET methode.

Tevens is je SELECT statement niet correct, tenzij je veldnaam die je zoekt in je database daadwerkelijk rode_wijn heet. Tevens selecteerd hij nu niets aangezien je niet opgeeft wat hij moet selecteren. Wil je alles hebben dan gebruik je daar * (de wildcard) voor.

Als je het letterlijk zou uittypen staat er nu dit.

SELECT * FROM table_name WHERE rode_wijn="rode_wijn"

Ik neem aan dat je meerdere catagorieen hebt voor de rode wijn? Misschien moet je dan 2 GET waardes meegeven waar je dus eerst de catagorie kiest (rode of witte wijn), en vervolgens het type wijn.

Dus zoiets als deze:
<a href="pagina.php?cat=rw&typ=02">Rode wijn - type 2</a>

Echter moet je hier wel 20 links maken als je 10 rode wijnen hebt en 10 witte wijnen hebt!

Lijkt me slimmer om gewoon een form te maken waar je aangeeft rode wijn of witte wijn, en vervolgens het type of wat dan ook. Dan kun je dit in een volgende pagina gewoon ophalen met $_POST en weergeven.
Gewijzigd op 09/05/2012 14:44:05 door Chris PHP
 
Donny Wie weet

Donny Wie weet

09/05/2012 14:50:53
Quote Anchor link
Om een kort voorbeeld aan te geven van het form dat ik wil gebruiken als "admin panel":

Artikel Naam,
Artikel Categorie (voorbeeld: italiaanse_rode_wijn, italiaanse_witte_wijn, chileense_rode_wijn, etc etc.. Alles wil ik in 1 tabel zetten)
Artikel Prijs,
Eventueel een afbeelding.



Wat de links betreft weet ik wel dat de links gemaakt moeten worden, alleen wil ik niet 20 aparte pagina's en het dus met 1 pagina eruit halen. Ik ga de methode van Jurgen vanavond proberen en zal ik eens kijken of ik eruit kan komen.
 
Chris PHP

Chris PHP

09/05/2012 15:23:54
Quote Anchor link
Als ik het dus goed begrijp krijgt elke wijn+type een eigen benaming in je database zoals italiaanse_rode_wijn?

Dan kun je idd gewoon de $_GET gebruiken, zorg wel dat je het goed filtered en beveiligd. Anders kunnen ze gewoon andere waardes meesturen en dus injection uitvoeren.

succes
 
Donny Wie weet

Donny Wie weet

11/05/2012 15:42:11
Quote Anchor link
Even kort een paar kleine vragen:

result = mysql_query('
SELECT content
FROM pages
WHERE nav_title = "' . mysql_real_escape_string($_GET['p']) . '"'

SELECT content = de tabel?
FROM pages = de rij?
WHERE nav_title = Als ik het goed heb komt er in je url href="pagina.php?p=rode_wijn" en dan gaat het dus in dit geval om rode wijn?
 
Erwin H

Erwin H

11/05/2012 15:55:18
Quote Anchor link
Nee:
SELECT content = selecteer de kolom content
FROM pages = uit tabel pages
WHERE nav_title='iets' = de voorwaarde waaronder rijen worden geselcteerd, dus in dit geval worden de rijen geselecteerd waarvoor geldt dat de kolom nav_title de waarde 'iets' heeft.
 
Donny Wie weet

Donny Wie weet

11/05/2012 16:04:49
Quote Anchor link
Oke, dat is gelukt. Er word nu 1 resultaat weergeven. Alleen het volgende: Er moet een while lus aan worden toegevoegd, klopt dit? Ik moet namelijk meerdere gegevens uit een database halen... Dit is wel gelukt, alleen het probleem is nu echter dat de 'gevraagde pagina niet kan worden weergeven... Zie 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
19
20
21
22
23
24
25
26
27
<?php
if (isset($_GET['p'])) {
   $result = mysql_query('
      SELECT soort,
               land,
             prijs,
             informatie
      FROM assortiment
      WHERE soort = "'
. mysql_real_escape_string($_GET['p'],$dbconnect) . '"'
   );

   if ($result === false) {
      /* Query is mislukt */
      echo 'De query is niet gelukt:' . mysql_error();
   }
elseif (mysql_num_rows($result) != 1) {
      /* Er is geen resultaat gevonden in de database of meer dan 1... */
      echo 'De gevraagde pagina kan niet worden gevonden!';
   }

  

//mijn stukje
   while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
      echo $row['soort'];
      echo $row['land'];
      echo $row['prijs'];
   }
}
?>
Gewijzigd op 11/05/2012 16:07:57 door Donny Wie weet
 
Erwin H

Erwin H

11/05/2012 16:35:10
Quote Anchor link
De kans is groot dat als je een soort selecteert, dat je meer dan 1 rij terugkrijgt. Maak van dat '!= 1' dus eens '== 0'.

Daarna, bij mysql_fetch_array, gebruik niet MYSQL_BOTH, maar MYSQL_ASSOC. Met BOTH krijg je al je resultaten dubbel terug (associatief en met nummer indices), met MYSQL_ASSOC krijg je alleen de associatieve array terug en dat is degene die je eronder gebruikt.
 
Donny Wie weet

Donny Wie weet

11/05/2012 16:52:45
Quote Anchor link
Dus mijn "while" stukje was wel oke?
 
Erwin H

Erwin H

11/05/2012 16:55:28
Quote Anchor link
Volgens mij is er niets mis met de while loop, nee (alleen je echo's komen allemaal achter elkaar, aan elkaar geplakt op het scherm, maar dat is waarschijnlijk van latere zorg).
 
Donny Wie weet

Donny Wie weet

11/05/2012 17:06:19
Quote Anchor link
De gevraagde pagina kan niet worden gevonden!rode_wijnNederland14rode_wijnNederland14

De resultaten worden wel weergeven, ook allemaal achter elkaar wat inderdaad voor latere zorg is, alleen het stukje van de gevraagde pagina blijft staan...
 
Erwin H

Erwin H

11/05/2012 17:12:56
Quote Anchor link
Wat is de code die je daar nu hebt dan?
 
Donny Wie weet

Donny Wie weet

11/05/2012 17:15:53
Quote Anchor link
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
21
22
23
24
25
26
27
28
29
30
<?php

    if (isset($_GET['p'])) {
       $result = mysql_query('
          SELECT soort,
                   land,
                 prijs,
                 informatie
          FROM assortiment
          WHERE soort = "'
. mysql_real_escape_string($_GET['p'],$dbconnect) . '"'
       );
    
       if ($result === false) {
          /* Query is mislukt */
          echo 'De query is niet gelukt:' . mysql_error();
       }
elseif (mysql_num_rows($result) != 0) {
          /* Er is geen resultaat gevonden in de database of meer dan 1... */
          echo 'De gevraagde pagina kan niet worden gevonden!';
       }

      
    
    //mijn stukje
       while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
          echo $row['soort'];
          echo $row['land'];
          echo $row['prijs'];
       }
    }


?>
 
Erwin H

Erwin H

11/05/2012 17:25:16
Quote Anchor link
Erwin H op 11/05/2012 16:35:10:
Maak van dat '!= 1' dus eens '== 0'.

Donny van Grondelle op 11/05/2012 17:15:53:
} elseif (mysql_num_rows($result) != 0) {

Wat klopt hier dus nog niet?
 
Donny Wie weet

Donny Wie weet

11/05/2012 18:47:25
Quote Anchor link
Zelfs als ik de 1 naar een 0 verander krijg ik dezelfde melding...
 
Erwin H

Erwin H

11/05/2012 18:58:52
Quote Anchor link
Wie zegt dat je de 1 in een 0 moet veranderen. Kijk eens goed en denk eens na.
Quote:
Maak van dat '!= 1' dus eens '== 0'.


Ik heb het nu drie keer hier neergezet, vaker ga ik het niet doen.
 
 - Diov  -

- Diov -

11/05/2012 19:48:01
Quote Anchor link
Het is simpel.
Jij hebt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
!=1
staan.

Dat stukje vervang je simpel weg door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
==0


Dit is toch niet moeilijk?
Jij moet ook iets doen? Wij gaan het niet voor jouw doen?
 
Donny Wie weet

Donny Wie weet

11/05/2012 21:58:31
Quote Anchor link
Ik keek eroverheen en zag niet dat ik er een == van moest maken... Inmiddels werkt dit wel en ben ik stukken verder...


Bedankt allemaal!
 
Roy sterretje

Roy sterretje

15/05/2012 09:13:08
Quote Anchor link
Wat ik zou doen is:

<a href='pagina.php?p=
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row[id]; ?>
'>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row[wine]; ?>
</a>

Voorbeeld:

Red wine wordt een link wanneer je er op klikt ga je naar de pagina.php?p=1. De "1" staat voor het id van de wijn. Op pagina.php kan je queries maken zoals hieronder:

select wine from drank where id = '" . $_GET[p] ."' voor ieder veld wat je wilt.
 



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.