Data opvragen en bewerken in PHP
Pagina: 1 2 3 ... 5 6 7 volgende »
Ik ben retenieuw met PHP en ik heb een vraag.
Het is niet dat ik er niet uit kom, maar meer dat ik niet weet waar ik moet zoeken.
Ik heb een PHP pagina gemaakt die gelinkt is aan een database in MySQL.
De database in MySQL bestaat uit 3 kolommen, namelijk;
- Groep
- Naam
- Aanwezig
Ik heb nu een query opgesteld die, afhankelijk in welke groep je je bevind, iedereen toont in de groep.
Hij toont dus Groep, Naam en Aanwezig die nu nog leeg is.
Ik wil het zo kunnen maken dat de 'leiding' van een groep aanwezigheid kan registreren door middel van een checkbox.
Zodra de checkbox is aangevinkt, krijgt de kolom 'Aanwezig' de waarde 'Present' in de database.
Zo een checkbox wil ik dus voor iedereen aan kunnen vinken.
Zodra iedereen op de lijst is gecontroleerd, moet het resultaat naar de database worden verzonden en opgeslagen.
Zodra ik dan wil zien wie er allemaal zijn, moet hij de lijst tonen met de zojuist aangevinkte checkboxen.
Kolom 1 en kolom 2 moeten dus 'read only' worden en kolom 3 moet 'editable' worden.
Hoe kan ik dit het beste doen? Als het nodig is, wil ik hier wel mijn code plaatsen.
Er hoeft niet een hele code voor mij geschreven te worden, maar ik wil weten hoe ik dit aanpak.
Alvast bedankt!
Gewoon als tekst weergeven? En je moet ervoor zorgen dat je op een of andere manier weet voor welke (personen uit een) groep je de aanwezigheid aanvinkt. Dit hangt af van de manier waarop je groepen en personen identificeert, hopelijk met een auto increment id of een andere unieke identificatie?
Dit id kun je weer koppelen aan een input field:
Zo kun je een loop maken voor alle id's, waarin je de 1 vervangt door je loop index.
Later haal je dit weer op met
Ook dit kun je weer met eenzelfde loop verwerken.
Bedankt voor jullie antwoorden.
Bij het woord Auto Increment slaat mijn hoofd al op hol (ja, ik ben écht nieuw).
Ik heb het als volgende 'georganiseerd';
- Ik heb een MySQL database
- Op dit moment worden de resultaten getoond d.m.v. een query
Een auto increment functie maak ik dan ook geen gebruik van.
Aan het formulier om alles aan te passen ben ik nog niet begonnen, dat gaat een nieuwe uitdaging vormen.
Edit: even voor het gemak hier een overzicht van mijn code.
--
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Alle variabelen instellen
$servername = "servername";
$username = "username";
$password = "password";
$dbname = "databasename";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
//Controleren van de verbinding
if ($conn->connect_error) {
die("Verbinden mislukt: " . $conn->connect_error);
}
//Query opstellen door middel van variabele
$result = mysqli_query($conn,"SELECT * FROM `Aanwezigheid` WHERE `Groep` = 'A'");
echo"<table border='1'>";
echo"<tr><th>Groep</th><th>Naam</th><th>14-8-2017</th></tr>";
while($row = mysqli_fetch_assoc($result)) {
echo"<tr><td>{$row['Groep']}</td><td>{$row['Naam']}</td><td>{$row['14-8-2017']}</td></tr>";
}
echo"<table>";
$conn->close();
$servername = "servername";
$username = "username";
$password = "password";
$dbname = "databasename";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
//Controleren van de verbinding
if ($conn->connect_error) {
die("Verbinden mislukt: " . $conn->connect_error);
}
//Query opstellen door middel van variabele
$result = mysqli_query($conn,"SELECT * FROM `Aanwezigheid` WHERE `Groep` = 'A'");
echo"<table border='1'>";
echo"<tr><th>Groep</th><th>Naam</th><th>14-8-2017</th></tr>";
while($row = mysqli_fetch_assoc($result)) {
echo"<tr><td>{$row['Groep']}</td><td>{$row['Naam']}</td><td>{$row['14-8-2017']}</td></tr>";
}
echo"<table>";
$conn->close();
Gewijzigd op 03/08/2017 11:39:14 door Thomas Bakker
Ja, geen enkel probleem. Als je ID-veld maar een Primairy Key is.
Als ik weer op problemen stuit horen jullie het van mij ;)
Deze geef je vervolgens de auto increment mee, not null.
Wat betreft je data ophalen en de index meenemen: (een heel simpel voorbeeld)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$result = mysqli_query("
SELECT `Aanwezigheid_id` FROM Aanwezigheid WHERE ....
");
$rows = mysqli_num_rows($result);
for ($index = 0 ; $index < $rows; $index++)
{
$data = mysqli_fetch_object($result);
$gegeven[$index]['id'] = $data->Aanwezigheid_id;
}
?>
$result = mysqli_query("
SELECT `Aanwezigheid_id` FROM Aanwezigheid WHERE ....
");
$rows = mysqli_num_rows($result);
for ($index = 0 ; $index < $rows; $index++)
{
$data = mysqli_fetch_object($result);
$gegeven[$index]['id'] = $data->Aanwezigheid_id;
}
?>
Gewijzigd op 03/08/2017 11:47:49 door Peter K
Alle rijen hebben nu een ID. Ik ga jouw commentaar meenemen Peter.
Alvast bedankt zover.
Toevoeging op 03/08/2017 13:08:11:
Oke, ik heb dus een nieuw scriptje opgesteld.
Ik krijg alleen een foutmelding, unexpected end of file en ik snap niet waarom.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
<html>
<head>
<title>Groep A - Aanwezigheid</title>
</head>
<body>
<?php
//Alle variabelen instellen
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "aanwezigheid";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
//Query opstellen door middel van variabele
$result = mysqli_query($conn,"SELECT * FROM `aanwezigheid` WHERE `Groep` = 'A'");
?>
<table>
<tr>
<th>Groep</th>
<th>Naam</th>
<th>14-8-2017</th>
</tr>
<?php
while($row = mysqli_fetch_array($result))
{
echo "<tr><form action=Checkbox.php method=post>";
echo "<td>{$row['Groep']}</td>";
echo "<td>{$row['Naam']}</td>";
echo "<td><input type=checkbox name=presentie value='".$row['14-8-2017']."'</td>";
echo "<input type=hidden name=id value='".$row['ID']."'>";
echo "<td><input type=submit></td>";
echo "</form></tr>";
?>
</table>
</body>
</html>
<head>
<title>Groep A - Aanwezigheid</title>
</head>
<body>
<?php
//Alle variabelen instellen
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "aanwezigheid";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
//Query opstellen door middel van variabele
$result = mysqli_query($conn,"SELECT * FROM `aanwezigheid` WHERE `Groep` = 'A'");
?>
<table>
<tr>
<th>Groep</th>
<th>Naam</th>
<th>14-8-2017</th>
</tr>
<?php
while($row = mysqli_fetch_array($result))
{
echo "<tr><form action=Checkbox.php method=post>";
echo "<td>{$row['Groep']}</td>";
echo "<td>{$row['Naam']}</td>";
echo "<td><input type=checkbox name=presentie value='".$row['14-8-2017']."'</td>";
echo "<input type=hidden name=id value='".$row['ID']."'>";
echo "<td><input type=submit></td>";
echo "</form></tr>";
?>
</table>
</body>
</html>
Dit is mijn Checkbox.php, maar daar komt ie nog niet eens, dus heb het nog niet kunnen testen, maar zou volgens mij moeten werken..
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
//Alle variabelen instellen
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "aanwezigheid";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
//Query opstellen door middel van variabele
$result = "UPDATE aanwezigheid SET Groep='$_POST[Groep]',Naam='$_POST[Naam]',14-8-2017='$_POST[14-8-2017]' WHERE ID='$_POST[id]'";
//Query draaien
if(mysqli_query($conn,$result))
header("refresh:1; url=GroepA.php");
else
echo "Not updated";
?>
//Alle variabelen instellen
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "aanwezigheid";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
//Query opstellen door middel van variabele
$result = "UPDATE aanwezigheid SET Groep='$_POST[Groep]',Naam='$_POST[Naam]',14-8-2017='$_POST[14-8-2017]' WHERE ID='$_POST[id]'";
//Query draaien
if(mysqli_query($conn,$result))
header("refresh:1; url=GroepA.php");
else
echo "Not updated";
?>
$_POST[Naam] => hetzelfde.
En wat mag dit zijn? => 14-8-2017='$_POST[14-8-2017]' => -2011='$_POST[-2011]'
Die 14-7-2017 is enkel een kolomnaam. Ik zou die ook kunnen vervangen door tekst.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
while($row = mysqli_fetch_array($result))
{
echo "<tr><form action=Checkbox.php method=post>";
echo "<td>{$row['Groep']}</td>";
echo "<td>{$row['Naam']}</td>";
echo "<td><input type=checkbox name=presentie value='".$row['14-8-2017']."'</td>";
echo "<input type=hidden name=id value='".$row['ID']."'>";
echo "<td><input type=submit></td>";
echo "</form></tr>";
?>
while($row = mysqli_fetch_array($result))
{
echo "<tr><form action=Checkbox.php method=post>";
echo "<td>{$row['Groep']}</td>";
echo "<td>{$row['Naam']}</td>";
echo "<td><input type=checkbox name=presentie value='".$row['14-8-2017']."'</td>";
echo "<input type=hidden name=id value='".$row['ID']."'>";
echo "<td><input type=submit></td>";
echo "</form></tr>";
?>
Hier mist nog een sluiting.
Wat SanThe probeert aan te geven, is dat je niet controleert of de input veilig is.
Verder, waarom heb je een kolomnaam als datum gekozen? Waarom maak je niet een kolom genaamd datum.
Vul hier tijdens het invullen dan now() in. Heb je gelijk de timestamp etc etc.
Inderdaad, het invoegen van } verhielp dat probleem.
Ik ga de kolomnaam aanpassen naar 'Maandag 1' in plaats van 14-8-2017, die tip kreeg ik ook al op een ander forum. Ik heb naast 14-8-2017 namelijk nog 9 andere kolommen met een datum, die ga ik op dezelfde wijze vervangen. Er moet zegmaar in de periode van 14-8 tot en met 25-8 iedere dag een aanwezigheidslijst worden aangevinkt en die moet kunnen worden bekeken / teruggezien / gewijzigd. Vandaar dat mijn kolomnamen data zijn, eronder komt dan te staan 'Present' of 'Afwezig'.
Mijn query werkt nog niet naar behoren. Ik krijg een 'undefined index' terwijl de namen overeenkomen met de kolommen in de database..
Thomas Bakker op 03/08/2017 14:57:32:
Ik heb naast 14-8-2017 namelijk nog 9 andere kolommen met een datum.
https://www.phphulp.nl/php/tutorial/overig/normaliseren/150/
Je moet je ontwerp nu zo opzetten dat je er later alle kanten mee uitkunt, zonder nog een tabel te moeten toevoegen.
Ik zou hem nog niet maandag_1 noemen, maar ik zou per regel gewoon de datum toevoegen:
Tabel groepen:
groepen_id (INT)
groep_naam
Tabel aanwezigheid:
aanwezigheid_id (INT)
groepen_groepen_id (INT)
aanwezig (TIMESTAMP)
Peter K op 03/08/2017 15:25:55:
Mijn advies is inderdaad ook om eens goed te kijken naar hoe je je database wilt opzetten.
Je moet je ontwerp nu zo opzetten dat je er later alle kanten mee uitkunt, zonder nog een tabel of veld te moeten toevoegen.
Je moet je ontwerp nu zo opzetten dat je er later alle kanten mee uitkunt, zonder nog een tabel of veld te moeten toevoegen.
Ik heb even een kleine toevoeging gedaan. Als je data toevoegt is het niet de bedoeling dat je de structuur van je database, waaronder tabellen en velden aanpast. Dit gebeurt alleen als je extra informatie bij je records wilt toevoegen (geboortedatum, functie, e-mailadres) en dan alsnog geldt er regelmatig nog een vorm van normalisatie. Volg daarom eens de link die gegeven is.
Gewijzigd op 03/08/2017 15:57:58 door - Ariën -
heeft er iemand toevallig nieuwe links?
- Ariën - op 03/08/2017 15:55:52:
Ik heb even een kleine toevoeging gedaan. Als je data toevoegt is het niet de bedoeling dat je de structuur van je database, waaronder tabellen en velden aanpast. Dit gebeurt alleen als je extra informatie bij je records wilt toevoegen (geboortedatum, functie, e-mailadres) en dan alsnog geldt er regelmatig nog een vorm van normalisatie. Volg daarom eens de link die gegeven is.
Peter K op 03/08/2017 15:25:55:
Mijn advies is inderdaad ook om eens goed te kijken naar hoe je je database wilt opzetten.
Je moet je ontwerp nu zo opzetten dat je er later alle kanten mee uitkunt, zonder nog een tabel of veld te moeten toevoegen.
Je moet je ontwerp nu zo opzetten dat je er later alle kanten mee uitkunt, zonder nog een tabel of veld te moeten toevoegen.
Ik heb even een kleine toevoeging gedaan. Als je data toevoegt is het niet de bedoeling dat je de structuur van je database, waaronder tabellen en velden aanpast. Dit gebeurt alleen als je extra informatie bij je records wilt toevoegen (geboortedatum, functie, e-mailadres) en dan alsnog geldt er regelmatig nog een vorm van normalisatie. Volg daarom eens de link die gegeven is.
Bedankt voor de toevoeging.
Wat betreft normalisatie, kijk eens op Google. Het ontploft er van! En luister goed wat hier gezegd wordt ;)
Begrijp me niet verkeerd, maar gezien het doel wat ik heb zie ik het nut niet in van normaliseren.
Ik heb eigenlijk geen gegevens die afgesplitst moeten worden..
Ik heb alleen een ID, Groepsletter (met nummer), Naam en Presentie.
Ik vind het niet nodig om daar een aparte tabel voor op te stellen, zelfs niet met die andere 9 kolommen extra.
Ik zal ook even uitleggen waarom;
- We gaan telkens maar 1 kolom tonen van die 9
- Dit is puur en alleen een test
We zijn een proef aan het doen met digitaliseren van ons systeem. We willen een kleine test uitvoeren en daarvoor wil ik even een basic scriptje hebben wat doet wat wij nodig hebben, namelijk data opvragen, wijzigen en met 1 knop alle wijzigingen die zijn gemaakt opslaan.
Als de test succesvol blijkt, dan gaan we alles groots aanpakken en dan zal normaliseren zeker een must zijn, omdat de database dan meerdere jaren mee zal gaan en zal blijven bestaan. Maar op dit moment zie ik het nut niet in van het normaliseren aangezien de database maar heel klein gaat worden.
Ik heb het script nu bijna werkend, maar zo gauw als ik op verzenden klik, krijg ik de error 'Undefined Index: Maandag_1'. Heb zitten googlen, maar het toevoegen van een isset heeft geen nut, veranderd niets aan de zaak tenzij ik zelf iets fout doe natuurlijk..
Quote:
Maar op dit moment zie ik het nut niet in van het normaliseren aangezien de database maar heel klein gaat worden.
Ook als het klein is, is normaliseren geen enkel probleem. Je maakt je database er overzichtelijker van, en je kan makkelijk velden met elkaar combineren in queries, zodat je diverse calculaties en verwante koppelingen kan maken. Wacht dat je bijvoorbeeld met het aantal gebruikers die op maandag actief zijn, of het percentages van de meeste bezoekers op een bepaalde dag in de week. Met niet-genormaliseerde velden worden zulke dingen behoorlijk lastig.
Oh ja, en zeg NOOIT dat je dit niet zal gebruiken. ;-)