Ik heb het volgende probleem met een databank waar ik geen oplossing voor weet. Wie kan me helpen.
Via een mailformulier kunnen deelnemers zich aanmelden en worden in een databank geregistreerd. Uiteraard staan de namen niet in alfabetische volgorde terwijl de ID wel van 1, 2, 3, 4 etc. oplopen.
In deelnemerslijst, die én online komt te staan én als drukwerk wordt verstrekt, heeft elke deelnemer ook een deelnamenummer, dat niet hetzelfde is als het ID, maar wel meeloopt met de alfabetische volgorde.
Dus na aanmelding staat dit in de databank:
ID Naam deelnamenummer
1 Jansen 0
2 Pieterse 0
3 Albers 0
4 Karelse 0
Middels $num_rows weet ik dus het aantal deelnemers en laten we dat even n noemen
Nu wil ik, nadat de inschrijving is gesloten, middels een formuliertje met één druk op de knop een Update uitvoeren waarbij het deelnamenummer van 1 tot n wordt ingevoerd en wel zodanig dat de tabel (alfabetisch op naam gesorteerd) er als volgt uit komt te zien:
ID Naam deelnamenummer
3 Albers 1
1 Jansen 2
4 Karelse 3
2 Pieterse 4
Is dat mogelijk en zo ja, hoe kan ik dat programmeren in PHP/MSQL. Wie kan me op weg helpen.
Bij voorbaat dank.
Da's nou net mijn probleem. Ik kan niet zo goed met arrays overweg en hoe zet ik een record in een array
Zou je dat misschien in code kunnen schrijven. Zou je zeer erkentelijk zijn.
Mvg.
Je kunt er ook voor kiezen om ID's op te halen, gesorteerd op Naam. Terwijl je de resultaten ophaalt houd je een deelnamenummer-teller bij en voer je bij elke stap van de ophaal-loop een UPDATE-query uit. Na afloop verhoog je de teller met 1.
Abstract:
<?php
$res = je_favoriete_query_functie('SELECT ID FROM tabel ORDER BY Naam');
$volgorde = 1;
while ($row = je_favoriete_associatieve_fetch_functie($res)) {
je_favoriete_query_functie(
'UPDATE tabel
SET deelnamenummer = '.$volgorde.'
WHERE ID = '.$row['ID']
);
$volgorde++;
}
?>
Trouwens, dit volgordenummer is "redundant", met andere woorden, is afleidbaar uit de sortering op achternaam, maar er valt iets voor te zeggen om dit "dubbel" op te slaan (is dan wat makkelijker in het gebruik).
Met één query kun je de tabel ophalen uit de database en direct in de gewenste volgorde hebben.
Op dat moment staat deze ook in een array in het geheugen maar wel gesorteerd. Het weergeven in een HTML tabel is vervolgens simpel
Ik heb nu het volgende opgezet, maar krijg deze foutmelding "Fatal error: Call to undefined function je_favoriete_query_functie() in N:\xampp\htdocs\ROOT\test_1.php on line 37". Wat moet ik bij de vetgerukte weergaven in de code anders invullen? Hoe los ik dit nu op?
Onderstaand de code:
<?php
$db = mysql_connect ("localhost", "admin", "admin")
or die ("De verbinding met de database is mislukt!". mysql_error()); // foutmelding als niet gevonden
mysql_select_db ("admin", $db) //juiste databank selecteren
or die("Helaas kon de juiste databank niet worden geselecteerd!");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test deelnamenummer</title>
</head>
<body>
<?php
$sql = "SELECT *
FROM test
ORDER BY ID ASC";
$resultaat = mysql_query($sql);
if (!is_resource($resultaat)) {
echo mysql_error(); // Er is een fout
}
?>
<table>
<?php
while ($rij = mysql_fetch_array($resultaat)) {
echo "<tr>";
echo "<td>".$rij['ID']."</td> <td>".$rij['achternaam']."</td> <td>".$rij['deelnamenummer']."</td>";
echo "</tr>";
}
?>
</table>
<?php
$res = je_favoriete_query_functie('SELECT ID FROM test ORDER BY achternaam');
$volgorde = 1;
while ($row = je_favoriete_associatieve_fetch_functie[($res)) {
je_favoriete_query_functie(
'UPDATE test
SET deelnamenummer = '.$volgorde.'
WHERE ID = '.$row['ID']
);
$volgorde++;
}
// ge_Update tabel uitlezen
$sql_1 = "SELECT *
FROM test
ORDER BY deelnamenummer";
$resultaat_1 = mysql_query($sql_1);
if (!is_resource($resultaat_1)) {
echo mysql_error(); // Er is een fout
}
?>
<table>
<?php
while ($rij_1 = mysql_fetch_array($resultaat_1)) {
echo "<tr>";
echo "<td>".$rij_1['ID']."</td> <td>".$rij_1['achternaam']."</td> <td>".$rij_1['deelnamenummer']."</td>";
echo "</tr>";
}
?>
</table>
</body>
</html>
[size=xsmall]Toevoeging op 08/02/2015 13:42:23:[/size]
Sorry voor de ongelukkige weergave maar heb nog niet in de gaten hoe ik de code in één veld kan zetten ipv op deze manier
[size=xsmall]Toevoeging op 08/02/2015 14:15:08:[/size]
Heb het probleem zelf gevonden en het resultaat is wat ik bedoelde.
Stom van me maar natuurlijk, maar het brein van een 70 jarige werkt niet meer zo snel.
Ik moest:
- je_favoriete_query_functie veranderen in: mysql_query
- je_favoriete_associatieve_fetch_functie in: mysql_fetch_array