Eén tegelijk uit tabel ophalen
Wie kan mij uitleggen hoe ik een tabel zo kan benaderen, dat gegevens uit die tabel (een namenlijst) met één tegelijk worden opgehaald? Ik vermoed dat er iets moet zijn, dat aangeeft op welke positie in de tabel het gegeven moet worden opgehaald?
Ik wil de uitkomst gebruiken om deze te kunnen hyperlinken naar een bepaalde pagina. Ik lees wel overal hoe je een hele tabel kunt ophalen maar nergens hoe je een tabel één voor één kunt uitlezen.
Ik heb nu zoiets gemaakt:
"SELECT * FROM users WHERE rang LIKE '0' AND id LIKE '1'";
maar dat werkt niet want de id nummers zijn niet sequentieel aanwezig.
Is er misschien zoiets als: neem de naam op de eerste positie, dan de naam op de tweede positie, etc. ?
Afijn, ik ben een echte beginneling en weet nog te weinig van al die codes af, dus wil kan mij helpen?
Hartelijke groet,
Hans Fokker
Ik snap toch niet helemaal wat je bedoelt. Waarom wil je een tabel één voor één uitlezen? Wil je bijvoorbeeld verschillende pagina's maken met daarop steeds de volgende naam of zo?
Het gaat om een website van een basisschool met in de database 'rang' een groep leerlingnamen. Via de pagina kan de persoonlijke pagina van de leerling worden gekozen.
Op je overzichtspagina haal je alle leerlingen op alfabet op met hun id erbij:
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
$sql = "
SELECT id, achternaam
FROM leerlingen
ORDER BY achternaam
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_errno () . ': ' . mysql_error ());
echo '<pre>';
echo $sql;
echo '</pre>';
}
else {
while ($row = mysql_fetch_assoc ($res)) {
echo '<p><a href="leerling.php?id=' . $row['id'] . '">' . $row['achternaam'] . '</a></p>';
}
}
?>
$sql = "
SELECT id, achternaam
FROM leerlingen
ORDER BY achternaam
";
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_errno () . ': ' . mysql_error ());
echo '<pre>';
echo $sql;
echo '</pre>';
}
else {
while ($row = mysql_fetch_assoc ($res)) {
echo '<p><a href="leerling.php?id=' . $row['id'] . '">' . $row['achternaam'] . '</a></p>';
}
}
?>
Op de pagina leerling.php kun je nu via $_GET['id'] de juiste leerling uit de DB halen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// hier hoort eigenlijk een veiligheidscheck, iets als: if (is_numeric ($_GET['id']))
$sql = "
SELECT achternaam, veld2, veld3
FROM leerlingen
WHERE id = " . $_GET['id'];
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_errno () . ': ' . mysql_error ());
echo '<pre>';
echo $sql;
echo '</pre>';
}
else {
$row = mysql_fetch_assoc ($res));
echo '<p>' . $row['achternaam'] . '</p>';
// en de rest van de velden
}
?>
// hier hoort eigenlijk een veiligheidscheck, iets als: if (is_numeric ($_GET['id']))
$sql = "
SELECT achternaam, veld2, veld3
FROM leerlingen
WHERE id = " . $_GET['id'];
if (!$res = mysql_query ($sql)) {
trigger_error (mysql_errno () . ': ' . mysql_error ());
echo '<pre>';
echo $sql;
echo '</pre>';
}
else {
$row = mysql_fetch_assoc ($res));
echo '<p>' . $row['achternaam'] . '</p>';
// en de rest van de velden
}
?>
SELECT kolom
FROM tabel
WHERE kolom = conditie
LIMIT 0,1
Die geeft de eerste regel uit de tabel. Op de tweede pagina zou die zo zijn:
SELECT kolom
FROM tabel
WHERE kolom = conditie
LIMIT 1,1
Etc, etc. Nu zijn de cijfers achter LIMIT gemakkleijk te vervangen door variabelen die je uit $_GET kan halen ofzo...
Elwin
Dus ik ga beginnen met de tabellen te maken en dan een form om ze te laten zien en dan 1 voor 1 aanklikbaar d.m.v. een link en dan zonodig te kunnen wijzigen.
Maar zien of dit gaat lukken :)\
PS gezien de warmte kan de uitwerking ook vanavond of morgen worden.
Elwin:
De TS bedoeld denk ik meer iets in de trend van
SELECT kolom
FROM tabel
WHERE kolom = conditie
LIMIT 0,1
Elwin
SELECT kolom
FROM tabel
WHERE kolom = conditie
LIMIT 0,1
Elwin
Als je het zo doet, moet je de conditie weghalen, anders gaat het fout. Het zou zo kunnen, maar ik vind mijn manier eenvoudiger. Het is trouwens "in de trant van en niet "in de trend van". Zo'n verspreking heet een malapropisme.
Ik denk dat je verder met me mee hebt gedacht dan mijn vraag is. Ik heb namelijk bestaande pagina's waarheen ik wil gaan linken, leerling1.php, leerling2.php, etc.
Ik bedoel wel een overzichtspagina te krijgen met de leerlingnamen apart uitgelezen, zoals Elwin ook beschrijft, om vervolgens aan iedere naam een pagina (leerling1.php etc.) te linken.
De uitkomst van het script leerling.php geeft de melding 'De pagina kan niet worden weergegeven'. Ik begrijp de bedoeling van jouw script denk ik wel, maar de pagina's die je op die manier aanmaakt zijn dan allemaal identiek, en dat is in mijn voorbeeld niet de bedoeling.
Wat is de bedoeling van veld2, veld 3? Zoekt deze naar een positie in de tabel?
Alvast bedankt!
Wil je standaard alles uit je tabel hebben dan doe je dit:
Gewijzigd op 01/01/1970 01:00:00 door Lissy Pixel
Gewijzigd op 01/01/1970 01:00:00 door Lissy Pixel
Ik ben nog wel nieuwsgierig naar je opmerking over het vervangen door variabelen die je uit $_GET kunt halen?
En Lissy, bedankt! Fijn dat een newbie hier ook zo goed geholpen wordt.
Voorbeeld:
leerlingen.php
D.m.v. bijv. Jan zijn script alle leerlingen als lijs weergeven. De naam is een link die verwijst naar: leerling.php?id=hierhetleerlingid
'hierhetleerlingid' wordt vervangen door het id van de leerling die je uit de database haalt.
leerling.php
Hier haal je d.m.v. bijv. Jan zijn 2e scriptje de leerling op die bij het desbetreffende ID hoort die is meegegeven in de URL. Dan heb je 1 pagina (leerling.php) waar je de mogelijkheid hebt elke leerling stuk voor stuk weer te geven.
Ik hoop dat het zo een beetje duidelijk is wat de mogelijkheden zijn.
Mocht je een speciale reden hebben om toch aparte pagina's te willen, meld het even, misschien begrijp ik het dan beter.
Ik begrijp jouw verhaal denk ik wel, en ben het ook eens met jou en Jan dat zijn oplossing veel mooier is. Maar ik krijg een ander probleem wanneer ik zo ga werken, want de pagina waarheen wordt gelinkt is een pagina die de leerling zelf kan bewerken door een tekstbestand (eigenlijk een .dat bestand). Die is voor iedere leerling anders genummerd (1.dat, 2.dat, etc.) Ik verwijs op de leerlingpagina's die ik nu heb, in elke pagina naar een ander .dat bestandje. Ik weet niet hoe ik dat met jullie methode zou moeten oplossen?
Gewijzigd op 01/01/1970 01:00:00 door H. Fokker
De LIMIT 0,1 geeft weer dat je maar 1 resultaat wenst te zien maak je er dus LIMIT 0,5 van dan krijg je de 1e 5 resultaten de 0 hierin betekend dat hij begint te tellen vanaf 0.
In mijn eerste post gaf ik twee voorbeelden. In het tweede voorbeeld kun je dan de naam en het DAT bestand ophalen omdat de id via $_GET['id'] beschikbaar is.
Mooi is het dus niet omdat je beter alle gegegens in je DB kunt hebben. Als leerlingen hun eigen profielpagina moeten kunnen aanpassen, zou het veiliger zijn om met logincodes te werken.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Er is een goede oplossing voor mijn vraag gekomen, ik kan weer verder. Ik ga het idee van Jan overwegen, dat vraagt wel weer nieuwe toverkunst. Iedereen bedankt, Lissy in het bijzonder voor aanmoediging.
Jan:
Als je het zo doet, moet je de conditie weghalen, anders gaat het fout. Het zou zo kunnen, maar ik vind mijn manier eenvoudiger. Het is trouwens "in de trant van en niet "in de trend van". Zo'n verspreking heet een malapropisme.
Hoezo moet je de conditie weghalen?Elwin:
De TS bedoeld denk ik meer iets in de trend van
SELECT kolom
FROM tabel
WHERE kolom = conditie
LIMIT 0,1
Elwin
SELECT kolom
FROM tabel
WHERE kolom = conditie
LIMIT 0,1
Elwin
Als je het zo doet, moet je de conditie weghalen, anders gaat het fout. Het zou zo kunnen, maar ik vind mijn manier eenvoudiger. Het is trouwens "in de trant van en niet "in de trend van". Zo'n verspreking heet een malapropisme.
En bij de weg, zeik ff niet over trend of trant. Kan mij echt niet boeien met dit weer...
Elwin