Data opvragen en bewerken in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 4 5 6 7 volgende »

Peter K

Peter K

04/08/2017 14:34:14
Quote Anchor link
Ik sluit me aan bij Arien. Je hebt zelfs een compleet voorbeeld gehad al. Hiermee kun je het vrij makkelijk doen.

Een undefined index betekend dat de variabele die gebruikt wordt nog niet benoemd is.

Zonder meer informatie (welke regel het is) en context is dit voor ons evengoed abrakadabra.
 
PHP hulp

PHP hulp

21/11/2024 18:18:25
 
Thomas van den Heuvel

Thomas van den Heuvel

04/08/2017 14:44:59
Quote Anchor link
Peter K op 03/08/2017 07:42:54:
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.


On a sidenote, aan bovenstaande werkwijze kleven wel een aantal nadelen. Zo zul je het id uit de naam moeten peuteren. Daarnaast is het met bovenstaande constructie lastig om door de gebruikers te loopen als je nog andere informatie wenst op te slaan. Houd in gedachten dat niet-gecheckte checkboxen in het geheel niet worden ge-POST.

Een handigere aanpak zou bijvoorbeeld zijn (voor gebruiker met id 5):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" name="aanwezig[]" value="5">

Of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" name="aanwezig[5]" value="whatever">

Afhankelijk van wat je met de rest van de gegevens van een gebruiker doet (of deze nu aanwezig zijn of niet) en aangenomen dat je gegevens van meerdere gebruikers tegelijkertijd verwerkt.

Je zou ook kunnen overwegen om radiobuttons te gebruiken voor aan- en afwezigheid. Op die manier dwing je af dat er altijd een "ja" of een "nee" wordt ge-POST, in tegenstelling tot een checkbox die alleen doorkomt als deze is aangevinkt.
 
Peter K

Peter K

04/08/2017 15:07:17
Quote Anchor link
Ik gebruik mijn situatie voor het updaten van de database.

Je kunt volgens mij jouw manier niet gebruiken hiervoor? Je krijgt namelijk enkel de vakken doorgestuurd die aangevinkt zijn? Dan weet je nog niet hoeveel vakken er zijn?
 
Thomas van den Heuvel

Thomas van den Heuvel

04/08/2017 19:24:41
Quote Anchor link
Hangt er vanaf hoe je je formulier(velden) initialiseert en verwerkt en ook hoe de rest van de gegevens die je opslaat er uitzien. Als je een veld hebt dat altijd ge-POST wordt en tevens een array-opzet gebruikt zou je deze als kapstop kunnen gebruiken om door alle rijen te itereren. Je kunt voor de volledigheid natuurlijk altijd hidden velden gebruiken.
 
Peter K

Peter K

04/08/2017 20:04:54
Quote Anchor link
Is het dan niet net zo eenvoudig om van te voren je velden gewoon een uniek nummer mee te geven, en dit op dezelfde manier terug op te bouwen tijdens het verwerken?
 
Thomas van den Heuvel

Thomas van den Heuvel

05/08/2017 00:28:59
Quote Anchor link
Maar als je zo'n veld/waarde dan ook meteen een betekenis geeft (denk user id) dan is dat direct je "mapping".

Plus er is geen garantie dat de samenstelling bij opstellen/tijdens verwerken hetzelfde is. Stel dat die gebaseerd is op gebruikers en er intussen een gebruiker toegevoegd wordt? Kun je beter rechtstreeks de data gebruiken waarmee je gebruikers identificeert niet?
 
Thomas Bakker

Thomas Bakker

05/08/2017 13:02:19
Quote Anchor link
Thomas van den Heuvel op 04/08/2017 14:44:59:
Peter K op 03/08/2017 07:42:54:

Een handigere aanpak zou bijvoorbeeld zijn (voor gebruiker met id 5):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" name="aanwezig[]" value="5">

Of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" name="aanwezig[5]" value="whatever">


Betekend dit dan dat ik per rij een waarde in zal moeten vullen?
Dus iedereen een 'id' zal moeten geven? Dus waar nu aanwezig[5] staat, dat zal moeten doen van aanwezig[1] tot en met aanwezig[650]?



Toevoeging op 05/08/2017 13:30:33:

Ik heb het script werkend!
Hij doet wat ik wil, alleen nu moet ik nog per kind 'invoeren' klikken.
Ik wil eigenlijk dat alle wijzigingen die ik op de pagina maak in 1 keer worden doorgevoerd.
Hoe kan ik dat het beste doen?
 
Thomas van den Heuvel

Thomas van den Heuvel

07/08/2017 00:34:33
Quote Anchor link
Quote:
Ik heb het script werkend!
Hij doet wat ik wil, alleen nu moet ik nog per kind 'invoeren' klikken.
Ik wil eigenlijk dat alle wijzigingen die ik op de pagina maak in 1 keer worden doorgevoerd.
Hoe kan ik dat het beste doen?

Als je alle kinderen uniek kunt identificeren dan kun je 1 form in 1x submitten.
 
Peter K

Peter K

07/08/2017 07:02:09
Quote Anchor link
Zo te zien zit dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<form action=Checkbox.php method=post>

</form>


in de while loop. Haal dit hier uit, je hebt nu namelijk voor elk kind een eigen formulier.
Zo zul je 1 formulier maken dat je, zoals Thomas zegt, in 1x kunt submitten.
Gewijzigd op 07/08/2017 07:02:19 door Peter K
 
Thomas Bakker

Thomas Bakker

07/08/2017 12:19:51
Quote Anchor link
Ik heb dat stuk 'erbuiten' gehaald (voor zover ik weet) maar 't maakt nog geen verandering.
Begrijp ik het 'erbuiten' halen niet helemaal?

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
45
46
47
<html>
<head>
<title>Groep A - Aanwezigheid</title>
</head>
<body>

<?php

    //Alle variabelen instellen
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "database1";

    //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'");
    
?>


<a href="GroepA.php"> Registreren aanwezigheid</a><br><a href="GroepATonen.php">Aanwezigheid tonen</a><p>

<table>
    <tr>
        <th>Groep</th>
        <th>Naam</th>
        <th>Present</th>
    </tr>
    
    <?php
            echo "<form name='Opslaan' action=Checkbox.php method=post>";
    while($row = mysqli_fetch_array($result))
    {

            echo "<tr><td>{$row['Groep']}</td>";
            echo "<td>{$row['Naam']}</td>";
            echo "<td><input type='hidden' value='Afwezig' name='Aanwezig'><input type='checkbox' name='Aanwezig' value='Present'></td>";
            echo "<input type=hidden name=id value='".$row['id']."'></tr>";
    }

                        echo "<tr><td><input type=submit name='Submit'></td></tr>";
            echo "</form></tr>";
    ?>


</table>
</body>
</html>
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 13:33:21
Quote Anchor link
Je overschrijft steeds je hidden-field. Als je Thomas v/d Heuvel zijn post nog eens leest, dan zie je dat je de unieke nummers/namen tussen blokhaken in de name kan zetten.
 
Thomas Bakker

Thomas Bakker

07/08/2017 14:31:41
Quote Anchor link
Ik doe echt mijn best om het te begrijpen, maar die loop index, geen idee.
Als ik het goed begrijp zal ik dan mijn script moeten wijzigen zodat ik een foreach krijg?
Of kan ik binnen mijn while ook een loop toepassen?
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 14:34:21
Quote Anchor link
Die hidden fields heb je niet nodig.
En waarom gebruik je geen radio-buttons zoals eerder geopperd is? Dan wordt er altijd een waarde meegestuurd.
 
Thomas van den Heuvel

Thomas van den Heuvel

07/08/2017 14:34:43
Quote Anchor link
Stel dat je personen Henk, Piet en Klaas hebt die respectievelijk worden geïdentificeerd met user-id's 1, 2 en 3.

Het formulier voor aanwezigheid ziet er dan bijvoorbeeld als volgt uit:
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
<form action="..." method="post">
<p>
    <input type="checkbox" name="present[1]" id="present_1" value="1">
    <label for="present_1">Henk</label>
</p>
<p>
    <input type="checkbox" name="present[2]" id="present_2" value="1">
    <label for="present_2">Piet</label>
</p>
<p>
    <input type="checkbox" name="present[3]" id="present_3" value="1">
    <label for="present_3">Klaas</label>
</p>
<p>
    <button type="submit">opslaan</button>
</p>
</form>

$_POST bevat vervolgens enkel die namen die aangevinkt zijn.

Als het handiger is om alle namen te POSTen kun je op een soortgelijke wijze radio-buttons gebruiken, bijvoorbeeld als volgt (voor Piet):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<p>
    <input type="radio" name="present[2]" id="present_2_1" value="1"><label for="present_2_1">aanwezig</label>
    <input type="radio" name="present[2]" id="present_2_0" value="0"><label for="present_2_0">afwezig</label>
</p>

Hierbij kun je er ook voor kiezen om standaard "afwezig" te selecteren.
 
Thomas Bakker

Thomas Bakker

07/08/2017 14:41:05
Quote Anchor link
Thomas Bakker op 05/08/2017 13:02:19:
Thomas van den Heuvel op 04/08/2017 14:44:59:
Peter K op 03/08/2017 07:42:54:

Een handigere aanpak zou bijvoorbeeld zijn (voor gebruiker met id 5):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" name="aanwezig[]" value="5">

Of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="checkbox" name="aanwezig[5]" value="whatever">


Betekend dit dan dat ik per rij een waarde in zal moeten vullen?
Dus iedereen een 'id' zal moeten geven? Dus waar nu aanwezig[5] staat, dat zal moeten doen van aanwezig[1] tot en met aanwezig[650]?


Dat is dus hetgeen wat ik vroeg.
Ik moet dus voor iedereen, dus alle 650, apart optie maken met de juiste id's?
Gewijzigd op 07/08/2017 14:42:51 door Thomas Bakker
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 14:47:08
Quote Anchor link
Klopt, voor zoveel keuzes zou ik liever wel aan pagination (paginaverdeling) denken. Maximaal 25 per pagina bijvoorbeeld, voor het goede overzicht.

En bij voorkeur met een radiobuttons.
Gewijzigd op 07/08/2017 14:48:11 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

07/08/2017 14:51:11
Quote Anchor link
Of een andere indeling die mogelijk zinniger is, zoals een indeling in groepen of klassen?

Je moet je database wel een beetje structureren uiteraard, alleen dan kun je daar ook echt van profiteren. In de tabel met namen zul je dus ook aan moeten geven tot welke groep deze personen behoren. En de groepen identificeer je bij voorkeur ook met een (intern) uniek nummer.

Databases vormen het fundament van applicaties. Als het fundament niet goed is dan wordt het lastig om hier iets moois bovenop te bouwen.
 
Thomas Bakker

Thomas Bakker

07/08/2017 14:52:35
Quote Anchor link
Jemig.. Is er niet een makkelijkere oplossing dat gewoon alle wijzigingen op 1 pagina in 1 keer worden doorgevoerd?
Vreemd dat PHP zoiets niet ondersteund.. En pagination wil ik juist niet aan beginnen, er worden maximaal 100 kinderen in 1 keer getoond afhankelijk van de query die ik per groep opstel. De grootste groep is 100 en ik wil dus juist alles in 1 keer kunnen aanvinken..

Mocht dat het enige antwoord zijn om 650 opties te maken, dan begin ik daar niet aan en dan is helaas al mijn en jullie moeite voor niets geweest..
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 14:53:21
Quote Anchor link
Het mooiste is als je op je lijst een filter kan toepassen, zoals bijvoorbeeld:
Aanmelddatum, Geslacht, Klas/Groep, Presentie.

Verder kan je prima in PHP en loop draaien met alle namen en radiobuttons voor de presentie. Als ze maar per groep dezelfde name met het ID-nummer hebben.
Gewijzigd op 07/08/2017 14:55:11 door - Ariën -
 
Thomas Bakker

Thomas Bakker

07/08/2017 14:55:15
Quote Anchor link
- Ariën - op 07/08/2017 14:53:21:
Het mooiste is als je op je lijst een filter kan toepassen, zoals bijvoorbeeld:
Aanmelddatum, Geslacht, Klas/Groep, Presentie.

Verder kan je prima in PHP en loop drasien met alle namen en radiobuttons voor de presentie. Als ze maar per groep dezelfde name met het ID-nummer hebben.


Doe ik dit niet al d.m.v. een query?
 

Pagina: « vorige 1 2 3 4 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.