Gegevens ophalen uit een database met een link
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";
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
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'];
}
}?>
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
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.
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
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.
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
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?
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.
Code (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
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'];
}
}?>
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
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.
Dus mijn "while" stukje was wel oke?
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).
De resultaten worden wel weergeven, ook allemaal achter elkaar wat inderdaad voor latere zorg is, alleen het stukje van de gevraagde pagina blijft staan...
Wat is de code die je daar nu hebt dan?
Code (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
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'];
}
}
?>
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 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?
Zelfs als ik de 1 naar een 0 verander krijg ik dezelfde melding...
Quote:
Maak van dat '!= 1' dus eens '== 0'.
Ik heb het nu drie keer hier neergezet, vaker ga ik het niet doen.
Jij hebt staan.
Dat stukje vervang je simpel weg door
Dit is toch niet moeilijk?
Jij moet ook iets doen? Wij gaan het niet voor jouw doen?
Bedankt allemaal!
<a href='pagina.php?p='></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.