mysql gegevens aanpassen via html tabel of form

Status
Niet open voor verdere reacties.

Veans

Nieuwe gebruiker
Lid geworden
12 aug 2013
Berichten
4
Beste,

Een mysql-db opvullen lukt mij wel en en de inhoud weergeven in een html-tabel is ook geen probleem.
Nu vroeg ik mij af hoe ik deze informatie vanop mijn site kan aanpassen en dus wegschrijven (updaten) naar mijn database.

Op mijn site heb ik een puntensysteem voor onze leden.
In de db heb ik een 3 kolommen: naam, punten en gewicht (gewicht is uniek, bij ex aequo sorteert hij op gewicht).

mijn huisig script (toont enkel de inhoud van de db in een tabel):

<!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>Untitled Document</title>
</head>

<body>
<table border = 1>
<tr>
<td>&nbsp</td>
<td>naam</td>
<td>punten</td>
<td>&nbsp</td>
</tr>
<?php

ob_start();
$host="localhost"; // Host name
$username="********";
$password="********";
$db_name="********";
$tbl_name="members";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$query = "SELECT * FROM kampioen ORDER BY punten DESC, gewicht";
$resultaat = mysql_query($query);
$volgorde = 0;
$rij = mysql_fetch_array($resultaat);

while ($rij){
$rank++;
?>
<tr>
<td><?print $rank;?></td>
<td><?print $rij["naam"];?></td>
<td><?print $rij["punten"];?></td>
<td><?print $rij["gewicht"];?></td>
</tr>
<?
$rij = mysql_fetch_array($resultaat);
}
mysql_close();
?>
</table>
</body>
</html>




Mijn vraag:
Hoe kan ik de punten aanpassen en terugsturen naar de db?

Alvast bedankt
Veans
 
Ik weet niet waar de db voor is, maar het lijkt een soort kampioenschap gewichtheffen (vanwege veld 'kampioen' en veld 'gewicht', bedenk wel dat het kan gebeuren dat kandidaten hetzelfde tillen en je database dan dus niet werkt...

Daarbij, als je gewicht wilt aanpassen, maar gewicht ook je primairy key is wordt dat lastig aangezien UPDATE werkt als:

$nieuw= het nieuwe gewicht, bijv. 60?

UPDATE `kampioen` SET gewicht=$nieuw WHERE gewicht=???

Je moet de database vertellen wie hij moet aanpassen, anders past hij iedereen aan, of niemand...
Dus als je de enige manier om de kampioenen uit elkaar te houden gaat aanpassen gaat het al gauw mis.
Bovendien zou je dan eerst moeten controleren of dat nieuwe gewicht niet al bestaat zodat Piet niet net zoals Henk 60 heeft.
Want als Piet net als Henk 60 kilo heeft, en jij vult in dat Henk ineens 70 kilo heeft is dat dus:

UPDATE `kampioen` SET gewicht=70 WHERE gewicht=60

Waardoor ineens Piet EN Henk er 10 bij krijgen...

Het is dus veel handiger om iets te hebben waarmee je de kampioenen uit elkaar kunt houden in de database zodat zowel jij als de database weten wie er bedoelt wordt.
Als je bijvoorbeeld al:

UPDATE `kampioen` SET gewicht=70 WHERE naam='Piet'

doet helpt dat al, maar Piet kan ook een naamgenoot hebben enzovoorts...
Het maakt voor een kleine database misschien weinig uit, maar kan op den duur een groot verschil maken.
 
Laatst bewerkt:
De db dient als kampioenschap van een fietsclub.
Naam en punten zijn niet uniek. Het gewicht bevat een cijfer dat verwijst naar de stand van vorig jaar en is dus wel uniek. De tabel van de leden wordt gesorteerd op punten (van hoog naar laag uiteraard) en het gewicht wordt gebruikt om om de sorteerorde te bepalen bij gelijke stand. Piet heeft 20 punten net als Henk, maar Piet was vorig jaar 2e (gewicht=2) en Henk was 6e (gewicht=6). Dan komt in het kampioenschap Piet voor Henk te staan.

Ik zou dus de tabel willen uitlezen in een HTML-tabel wat momenteel al lukt. Vanuit deze tabel moet ik dan de punten kunnen aanpassen (niet het gewicht) en updaten naar de db.
Ik vermoed dat ik met array moet werken zoals ik dit ook al doe bij het uitlezen van de data?
Of (we hebben 27 leden) moet ik 27 keer een UPDATE opdracht geven (UPDATE `kampioen` SET punten=$nieuw WHERE gewicht=1...)

Bedankt
 
Sorry, maar je kunt de database niet uitlezen in html.
Je bedoelt php.

Of je kennis van html of php hebt, er is een wezenlijk verschil !. :P
 
I Know, maar via PHP komt hij dus wel in een HTML-tabel. Uitlezen in een HTML-tabel via PHP zou inderdaad correcter zijn. :confused:
 
Zorg dat elk record in je tabel altijd en *absoluut* uniek aan te wijzen is. In MySQL kun je dat doen door een integer kolom te maken met de auto_increment eigenschap, dan deelt MySQL zelf een uniek getal uitaan elk record dat in de tabel staat of wordt gezet. Als je dat getal, meestal "id" genoemd, meegeeft in een het HTML formulier waarmee je de nieuwe punten doorgeeft, dan kun je in je query iets doen als:

UPDATE tabel SET punten = $nieuwepunten WHERE id = $het_id_uit_het_form;

Voor wat betreft het formulier zelf, er bestaan honderden voorbeelden daarvan. Het enige waar je eventueel op kunt letten is dat je de naam van de velden tot array's kunt om laten zetten door er [] achter te plakken. Zelf mag ik graag ook de elementen van de array een nummer geven zodat ze overeenkomen met het id van de deelnemer die wordt aangepast in elke regel.

<form action="jouwscript" method="post">
<input type="text" name="deelnemers[1][punten]"/>
<input type="text" name="deelnemers[4][punten]"/>
<input type="text" name="deelnemers[5][punten]"/>
<form>

Als je dit submit krijg je in $_POST een array 'deelnemers' en daarin bestaan elementen op index 1, 4 en 5, en op elk van die indexen staat een array met alleen het element 'punten'.
Doe een var_dump() om te zien wat je precies doorkrijgt.
Zo kun je dus een hele lap gegevens van een deelnemer doorgeven en ze in PHP een-voor-een afwerken met een simpele foreach lus.

En ja, dit staat ook in tig tutorials uitgelegd, ik geef je hier slechts een grof idee van hoe het werkt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan