Data opvragen en bewerken in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 ... 5 6 7 volgende »

Thomas Bakker

Thomas Bakker

02/08/2017 17:01:06
Quote Anchor link
Goedemiddag,

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!
 
PHP hulp

PHP hulp

25/04/2024 19:22:01
 
Thomas van den Heuvel

Thomas van den Heuvel

02/08/2017 17:27:46
Quote Anchor link
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?
 
Peter K

Peter K

03/08/2017 07:42:54
Quote Anchor link
Zoals Thomas zegt, je kunt je regels het beste identificeren d.m.v. een id.
Dit id kun je weer koppelen aan een input field:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" name="aanwezig_1">


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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $waarde = $_POST['aanwezig_1']; ?>


Ook dit kun je weer met eenzelfde loop verwerken.
 
Thomas Bakker

Thomas Bakker

03/08/2017 11:23:04
Quote Anchor link
Hey,

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)
PHP script in nieuw venster Selecteer het PHP script
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
    //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();
Gewijzigd op 03/08/2017 11:39:14 door Thomas Bakker
 
- Ariën  -
Beheerder

- Ariën -

03/08/2017 11:37:46
Quote Anchor link
Auto_increment is een functie in MySQL om records automatisch oplopend te nummeren met een uniek nummer, ter identificatie.

PS: codes kan je het best tussen code-tags plaatsen.
Gewijzigd op 03/08/2017 11:38:22 door - Ariën -
 
Thomas Bakker

Thomas Bakker

03/08/2017 11:38:53
Quote Anchor link
Kan ik die nog toepassen nadat ik alle records heb gemaakt? Dus nu alsnog alle records een Id geven m.b.v. een auto increment functie?

Edit: thanks, gewijzigd.
Gewijzigd op 03/08/2017 11:39:34 door Thomas Bakker
 
- Ariën  -
Beheerder

- Ariën -

03/08/2017 11:42:34
Quote Anchor link
Ja, geen enkel probleem. Als je ID-veld maar een Primairy Key is.
 
Thomas Bakker

Thomas Bakker

03/08/2017 11:43:18
Quote Anchor link
Oke, thanks, ik ga mijn best doen.
Als ik weer op problemen stuit horen jullie het van mij ;)
 
Peter K

Peter K

03/08/2017 11:47:22
Quote Anchor link
Je moet hiervoor eerst een extra kolom toevoegen, bijvoorbeeld: 'Aanwezigheid_id'
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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>
Gewijzigd op 03/08/2017 11:47:49 door Peter K
 
Thomas Bakker

Thomas Bakker

03/08/2017 11:49:42
Quote Anchor link
Ik heb zojuist met behulp van auto increment de ID's verkregen.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<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)
PHP script in nieuw venster Selecteer het PHP script
1
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";
?>
 
- SanThe -

- SanThe -

03/08/2017 13:14:18
Quote Anchor link
$_POST[Groep] => $_POST['Groep'] => lekker onveilig trouwens.
$_POST[Naam] => hetzelfde.
En wat mag dit zijn? => 14-8-2017='$_POST[14-8-2017]' => -2011='$_POST[-2011]'
 
Thomas Bakker

Thomas Bakker

03/08/2017 13:28:13
Quote Anchor link
Die 14-7-2017 is enkel een kolomnaam. Ik zou die ook kunnen vervangen door tekst.
 
Peter K

Peter K

03/08/2017 14:28:54
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
    ?>


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.
 
Thomas Bakker

Thomas Bakker

03/08/2017 14:57:32
Quote Anchor link
Bedankt voor de reacties, ik ben in ieder geval van die unexpected end af.
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..
 
- SanThe -

- SanThe -

03/08/2017 15:13:28
Quote Anchor link
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/
 
Peter K

Peter K

03/08/2017 15:25:55
Quote Anchor link
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 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)
 
- Ariën  -
Beheerder

- Ariën -

03/08/2017 15:55:52
Quote Anchor link
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.

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 -
 
Thomas Bakker

Thomas Bakker

03/08/2017 18:07:21
Quote Anchor link
Ik wil graag het normaliseren bekijken, maar ik krijg bij alles een Gateway error.
heeft er iemand toevallig nieuwe links?
 
Peter K

Peter K

03/08/2017 18:13:49
Quote Anchor link
- Ariën - op 03/08/2017 15:55:52:
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.

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 ;)
 
Thomas Bakker

Thomas Bakker

04/08/2017 13:20:02
Quote Anchor link
Goed, ik heb even gekeken naar het normaliseren.
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..
 
- Ariën  -
Beheerder

- Ariën -

04/08/2017 13:46:26
Quote Anchor link
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. ;-)
 

Pagina: 1 2 3 ... 5 6 7 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.