[PHP/MySQL] Resultaten query doorgeven aan volgende pagina

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben relatief nieuw in de wereld van PHP en MySQL en ben druk bezig om van alles uit te proberen. Nu ben ik op het volgende probleem gestuit:

Ter oefening heb ik geprobeerd gegevens op te vragen uit een database en deze vervolgens netjes weer te geven, zoals dit zou gebeuren bij bijvoorbeeld een webwinkel. Dit heb ik natuurlijk gedaan met behulp van een mysql query, om zo de juiste producten uit de database te halen. Maar de producten moeten natuurlijk ook weergegeven worden. Dit heb ik gedaan met behulp van een while-loop. Alle producten worden nu netjes in een rijtje weergegeven. Ik wil echter nog een stap verder gaan. Net zoals bij webwinkels meestal te zien is kan de bezoeker meer informatie over een bepaald product opvragen door op dit product te klikken (dmv afbeelding of link). Dit is ook wat ik wil simuleren in mijn test.

De resultaten uit de query worden dus weergegeven dmv een while-loop. Bij het doorlopen van deze while-loop wordt bij ieder product ook een link meegegeven waarmee de bezoeker doorgestuurd wordt naar een pagina die meer informatie biedt over een dat specifieke product. De informatie weergegeven door de while-loop wordt vervolgens dmv een session doorgestuurd naar deze pagina met meer informatie. Dit gaat goed zolang er uit de query slechts één product wordt opgevraagd, maar zodra er meer dan één product uit de query komt wordt de informatie van alleen het laatste resultaat door de session opgeslagen waardoor elke link naar de pagina gevuld wordt met informatie van het laatst opgevraagde resultaat, terwijl de bedoeling natuurlijk is dat de informatie van ieder specifiek product wordt doorgestuurd.

Ik heb geprobeert de session buiten de while-loop te plaatsen, maar dit levert logischerwijs niks op. Ook heb ik geexperimenteerd met de foreach functie, maar mijn beperkte kennis van MySQL en PHP verhindert mij om het probleem zelf logischerwijs op te lossen. Vandaar dit topic, ik hoop dat jullie me verder kunnen helpen.

Ik hoop dat in dit lange verhaal enigszins duidelijk is geworden wat ik wil bereiken. Hieronder de code. Ik het het geheel geprobeerd terug te brengen tot de basis en ik heb sommige delen samengevat.

Dit is het script waarmee ik de gegevens opvraag en weergeef in een lijstje:
PHP:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*Allereerst natuurlijk verbinding maken met de server en de database*/

/*De sessie starten*/
session_start();

/*De query*/
$opvragen = mysql_query("SELECT * 
FROM product 
WHERE type='$type'
AND maat1='$maat1'
AND maat2='$maat2'
AND maat3='$maat3'"
)or die(mysql_error());

/*Opgevraagde gegevens weergegeven in een lijstje*/
if(mysql_num_rows($opvragen)>0){
    while($resultaten = mysql_fetch_array($opvragen))
    {
        print '<dl class="zoekresultaten">
            
            <dt class="titel"><a style="font-size:11px;" href="meerinformatie.php">'.$resultaten['merk'].' '.$resultaten['naam'].'</a></dt>
            <dt class="prijs">&euro; '.str_replace('.',',',$resultaten['prijs']).'</dt>
            <dt class="informatie">     
                <table>
                    <tr>
                        <td class="zoekres_indent">Type:</td><td>'.$resultaten['type'].'</td>
                    </tr>
                    <tr>
                        <td class="zoekres_indent">Maten:</td><td>'.$resultaten['maat1'].'/'.$resultaten['maat2'].'/'.$resultaten['maat3'].'/'.$resultaten['id'].'</td>
                    </tr>
                </table>
            <a class="meerinfo" href="meerinformatie.php">Meer Informatie</a>               
            </dt>               
            <dt><a href="meerinformatie.php"><img width="60px"src="afbeeldingen/'.$resultaten['merk'].'.jpg"/></a></dt>
            </dl>';
            
            
    $_SESSION = $resultaten;        

                
    }
} else {
    print $error;
}



Dit is de pagina die de doorgestuurde informatie weergeeft en zo meer moet vertellen over het product:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*De sessie starten*/
session_start();

                print '<dl class="zoekresultaten">
                    <dt class="titel">'.$_SESSION['merk'].' '.$_SESSION['naam'].'</dt>
                    <dt class="prijs">&euro; '.str_replace('.',',',$_SESSION['prijs']).'</dt>
                    <dt class="informatie" style="margin-left:160px;">      
                            <table>
                                <tr>
                                    <td class="zoekres_indent">Type:</td>
                                    <td>'.$_SESSION['type'].'</td>
                                </tr>
                                <tr>
                                    <td class="zoekres_indent">Maten:</td>
                                    <td>'.$_SESSION['maat1'].'/'.$_SESSION['maat2'].'/'.$_SESSION['maat3'].'</td>
                                </tr>
                            </table>
                    </dt>
                    <dt><img style="height:auto;margin-left:3px;" src="afbeeldingen/'.$_SESSION['merk'].'G.jpg"/></dt>
                </dl>';

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Je zoekt het een beetje in de verkeerde hoek, je wil de resultaten van je query namelijk helemaal niet opslaan.

Wat je wilt is dat je voor elk product een link maakt naar een productinformatie pagina. Aan die pagina geef je middels een GET-variabele ( ?product_id=15 ) mee van welk product de bezoeker meer wilt weten. Op die pagina doe je dan een aparte query die alle gegevens van alleen dat product opvraagt, en die geef je dan weer :)

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Inderdaad, wat je omschrijft is precies wat ik wil. Het klinkt ook enigszins logischer :p. Bedankt!.

Ik heb net even lopen zoeken hoe ik dit precies werkt, maar heb zo snel niks kunnen vinden. Ik weet namelijk wel hoe dit werk ivm formilieren en dergelijke, maar hoe pas je GET (of POST) toe zonder de hulp van de form-tag? Misschien dat iemand een link is tegengekomen die dit goed uitlegt?

Is het ook mogelijk om bijvoorbeeld POST te gebruiken zodat de gegevens niet in de URL komen te staan?

--- EDIT ---

Ik heb even verder gezocht en het is me gelukt om het door te geven dmv van de volgende link:

code:
1
<a class="meerinfo" href="meerinformatie.php?id='.$resultaten['id'].'">


Nu is het de bedoeling dat met behulp van het id er opnieuw een query wordt gedaan naar de desbetreffende informatie en deze dan vervolgens weer te geven. Dat moet lukken. Prima, bedankt!

[ Voor 28% gewijzigd door Verwijderd op 06-03-2009 14:12 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als je een get request naar een pagina wilt doen, kan je dat gewoon d.m.v. een A tag doen
HTML:
1
<a href="product.php?product_id=15">Product Naam Hier</a>

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

HTML:
1
<a href='eenlink.php?variabelenaam=waarde'>link</a>


vrij basic ;)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jullie zijn er snel bij. Ben er zelf net ook achter gekomen :P (zie post hierboven), inderdaad heb het veel moeilijker gemaakt dan nodig was, super! Bedankt!

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Nog iets anders. $_SESSION is een array, maak daar gebruik van. Ergens in je code doe je $_SESSION = $resultaten, waarmee je de complete session leegveegt voor een enkel product. Als je zoiets zou doen:
PHP:
1
2
3
4
while ($row = mysql_fetch_array($opvragen))
{
  $_SESSION['resultaten'][] = $row;
}

Zo kan je op de volgende pagina gewoon loopen over $_SESSION['resultaten'].

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Inderdaad, zo benut je de sessie volledig in plaats slechts één variabele erin op te slaan. Dat is er één om te onthouden.
Pagina: 1