Data opvragen en bewerken in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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

Thomas Bakker

Thomas Bakker

07/08/2017 16:20:31
Quote Anchor link
Goed, ik ga niet ontkennen dat ik niet zo heel veel snap van wat daar staat.
Zodra ik het invoer zoals het volgens mij moet zijn in mijn bestand (en ja, ik wil liever checkboxen), dan zou ik hierop moeten uitkomen volgens mij.

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

<?php

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

        //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>
<form action="Checkbox.php" method="post">

<?php
    
    while($row = mysqli_fetch_array($result))
    {

        $i = $row['id'];
        echo '<p>
              <input type="hidden" name="present['
.$i.']" id="present_'.$i.'" value="Afwezig"><input type="checkbox" name="present['.$i.']" id="present_'.$i.'" value="Present">
              <label for="present_'
.$i.'">'.$row['Naam'].'</label>
              </p>'
;

?>


<button type="submit">Opslaan</button>
</form>

</body>
</html>


Maar 't doet het niet.
Gewijzigd op 07/08/2017 16:21:52 door - Ariën -
 
PHP hulp

PHP hulp

16/02/2025 13:42:17
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 16:22:53
Quote Anchor link
Kan je wat duidelijker zijn?

Met een "Doet het niet" kunnen we vrij weinig.
Gokje: Er mist een }

Persoonlijk raad ik een radiobutton aan, omdat die makkelijker af te handelen zijn.
Gewijzigd op 07/08/2017 16:29:18 door - Ariën -
 
- SanThe -

- SanThe -

07/08/2017 16:34:07
Quote Anchor link
Doet het niet..... logisch toch.

<input type="hidden" name="present['.$i.']" ...
<input type="checkbox" name="present['.$i.']" ...

Ze hebben dezelfde name=".." en hetzelfde id=".."
Gewijzigd op 07/08/2017 16:36:16 door - SanThe -
 
Ben van Velzen

Ben van Velzen

07/08/2017 18:22:03
Quote Anchor link
Naast een cursus PHP dan ook meteen een cursus HTML? Sorry, maar dit is elementair spul, waarom ben je hiermee bezig als je geen idee hebt van wat de dingen die je doet betekenen?
 
Thomas Bakker

Thomas Bakker

07/08/2017 18:39:20
Quote Anchor link
@Arien; thanks, had ik niet gezien, inderdaad de oorzaak van de error.
@-SanThe-; heb ik aangepast, ik heb het hidden item weggehaald, had sowieso geen meerwaarde.
@BenvanVelzen; verstand van HTML heb ik zeker. Ik vind dit toch echter heel wat anders dan HTML. PHP en MySQL verschillen nogal t.o.v. HTML. Ik probeer gewoon een test setup te maken voor ik begin aan een cursus zodat ik weet of ik het uberhaupt zal begrijpen. Als het met zoiets simpels als dit al niet wil lukken, lijkt het me geen goed idee.

Hij toont nu inderdaad, zoals SanThe aangaf, alle kinderen met een checkbox. Ik kan ze allemaal aanvinken of uitvinken en opslaan, alleen communiceert hij niet goed met de DB. Althans, er wordt niets geschreven. De kolomnaam waar naartoe geschreven moet worden is Maandag, dan gebeurt via Checkbox.php. In checkbox.php staat dat de gegevens van 'Aanwezig' moeten worden geschreven naar de bijbehorende kolom. Ik vermoed dat daar iets mis gaat aangezien ik geen verdere problemen zie in de code voor groep A.

Code voor GroepA.php;
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
<html>
<head>
<title>Groep A - Aanwezigheid</title>
</head>
<body>

<?php

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

        //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>
<form action="Checkbox.php" method="post">

<?php
    
    while($row = mysqli_fetch_array($result))
    {

        $i = $row['id'];
        echo '<p>
              <input type="checkbox" name="Aanwezig_['
.$i.']" id="Aanwezig_'.$i.'" value="Present"><label for="Aanwezig_'.$i.'">'.$row['Naam'].'</label></p>';
    }

?>


<button type="submit">Opslaan</button>
</form>

</body>
</html>


Code voor Checkbox.php;
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 = "username";
    $password = "password";
    $dbname = "database";

    //Verbinden met de database
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    
    //Query opstellen door middel van variabele
    $result = "UPDATE Aanwezigheid SET Maandag='$_POST[Aanwezig]' WHERE id='$_POST[id]'";

    //Query draaien
    if(mysqli_query($conn,$result))
        header("refresh:1; url=GroepATonen.php");
    else
        echo "Not updated";
?>
Gewijzigd op 07/08/2017 18:39:57 door Thomas Bakker
 
- SanThe -

- SanThe -

07/08/2017 18:52:01
Quote Anchor link
$_POST['Aanwezig_'] zal een array() zijn.
$_POST['id'] zal niet bestaan.

Je probeert nu een (ongecontroleerd => dus onveilig) heel array() in een record te stoppen waar het id leeg is.
 
Thomas Bakker

Thomas Bakker

07/08/2017 23:26:19
Quote Anchor link
- SanThe - op 07/08/2017 18:52:01:
$_POST['Aanwezig_'] zal een array() zijn.
$_POST['id'] zal niet bestaan.

Je probeert nu een (ongecontroleerd => dus onveilig) heel array() in een record te stoppen waar het id leeg is.


Oke, daar snap ik echt de ballen van.
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 23:33:24
Quote Anchor link
$_POST['Aanwezig'] bestaat volgens mij ook niet.
En $_POST['id'] bestaat niet.

Ik zou zeggen:
Voer dit eens uit na je POST-request:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "<pre>".print_r($_POST,1)."</pre>";
?>

Dan zie je een schematische weergave van je $_POST array. Dit is dan tevens een handige leidraad over je die de data eruit moet aanroepen.
Gewijzigd op 07/08/2017 23:33:39 door - Ariën -
 
Thomas Bakker

Thomas Bakker

07/08/2017 23:36:53
Quote Anchor link
Ik geloof dat er niet veel mis is..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
Array
(
    [Aanwezig_] => Array
        (
            [1] => Present
        )

)


Dit ziet er naar mijn gevoel logisch uit..
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 23:41:24
Quote Anchor link
$_POST['Aanwezig_'][1]

Maar waarom die underscore eigenlijk?

Waarom een waarde met Present, en niet logisch een 0 (niet present) of een 1 (present).
Programmeertechnisch werkt dit ook makkelijker.
 
Thomas Bakker

Thomas Bakker

07/08/2017 23:43:17
Quote Anchor link
Ik heb die underscore overgenomen van de tekst van SanThe, ik dacht zodat je dan Aanwezig_1 o.i.d. krijgt..

Edit: het gaat ergens in de Query mis, snap alleen niet waar.
Gewijzigd op 07/08/2017 23:45:05 door Thomas Bakker
 
- Ariën  -
Beheerder

- Ariën -

07/08/2017 23:52:38
Quote Anchor link
Vraag het eens aan MySQL met: mysqli_error($conn);
Je string $result echo'en helpt ook.
Gewijzigd op 07/08/2017 23:59:40 door - Ariën -
 
Thomas Bakker

Thomas Bakker

08/08/2017 00:01:20
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE Aanwezigheid SET Maandag='Array' WHERE id='..'


Als ik mijn $result echo krijg ik deze, dus bij het ID gaat iets mis..
Edit: de Mysqli error geeft geen resultaat.
Gewijzigd op 08/08/2017 00:02:43 door Thomas Bakker
 
- Ariën  -
Beheerder

- Ariën -

08/08/2017 00:05:54
Quote Anchor link
Klopt, want ik zie geen [id] de POST-array.
Wel is dit de key in je array. Dus kijk eens naar key

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= key($_POST['Aanwezig_'][1]);
?>
 
Thomas Bakker

Thomas Bakker

08/08/2017 00:13:32
Quote Anchor link
De ID wordt hier gepost toch?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$result = "UPDATE Aanwezigheid SET Maandag='$_POST[Aanwezig]' WHERE id='$_POST[id]'";
 
- Ariën  -
Beheerder

- Ariën -

08/08/2017 00:15:33
Quote Anchor link
Je weet wat $_POST['id'] doet? Het maakt in ieder geval geen waarde aan ;-)
Zo niet, dan vraag ik me toch af of je niet beter bij een tutorial kan beginnen.

Ik heb net de oplossing gepost, dus nu moet je toch wel de ID kunnen pakken uit je POST-request. Vergeet hem niet te escapen met mysqli_real_escape_string voordat iemand je hackt.
Gewijzigd op 08/08/2017 00:16:57 door - Ariën -
 
Thomas Bakker

Thomas Bakker

08/08/2017 00:18:34
Quote Anchor link
Dan snap ik hem inderdaad niet.. De ID wordt toch verkregen door een verzoek vanuit mijn query?
Vervolgens wordt door middel van de result query de aanwezigheid (0 of 1) gepost daar waar het id overeenkomt met de query waarmee ik de data heb opgevraagd?
 
- Ariën  -
Beheerder

- Ariën -

08/08/2017 00:25:49
Quote Anchor link
Je doet hier een UPDATE-query, en die vindt plaats NADAT je formulier verstuurd is via de POST methode.

En om de absentie bij de juiste persoon te zetten moet je het ID weten, en die staat in de POST-array, omdat die in je checkbox staat.

In de array staat de key tussen blokhaken en daarachter staat de value "present". Het met aanroepen van de variabele alleen kan je normaal alleen de waarde oproepen, maar als je de key wilt oproepen gebruik je dus key().
Gewijzigd op 08/08/2017 00:26:20 door - Ariën -
 
Thomas Bakker

Thomas Bakker

08/08/2017 00:39:05
Quote Anchor link
Oke, dus wat zou ik dan aan moeten passen om het voor elkaar te krijgen?
Ik heb in de checkbox.php, want daar ligt de fout, nu het volgende gedaan;

- Ik heb de ID een variabele gegeven
- Ik heb de query aangepast zodat deze variabele wordt opgevraagd

Als ik de check weer run, blijft hij 'WHERE id=""' geven.

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
<?php

    //Alle variabelen instellen
    $servername = "nee";
    $username = "ja";
    $password = "nee;
    $dbname = "
ja";

    //Verbinden met de database
    $conn = mysqli_connect($servername, $username, $password, $dbname);

        $id = key($_POST['Aanwezig_'][1]);
    
    //Query opstellen door middel van variabele
    $result = "
UPDATE Aanwezigheid SET Maandag='$_POST[Aanwezig]' WHERE id='$id'";

    //Query draaien
    if(mysqli_query($conn,$result))
                echo "
$result";
    else
                echo "
Not updated";
?>
 
- Ariën  -
Beheerder

- Ariën -

08/08/2017 00:51:30
Quote Anchor link
Je mist een dubbele quote op lijn 7, maar dat zal wel een foutje in je bericht zijn.

Los daarvan heb ik het idee dat je POST niet mee wordt gestuurd? Wat meldt de genoemde print_r en houd die er eens bij als leidraad.

Enne:
- $_POST[Aanwezig] bevat een array, waar je niks mee kan in een query
- Gebruik quotes tussen je blokhaken bij strings
- Zorg voor escaping met mysqli_real_escape_string($conn,.....)
Gewijzigd op 08/08/2017 00:56:10 door - Ariën -
 

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.