Versio

Checkbox formulier

Overzicht Reageren

Pagina: 1 2 volgende »

Martijn L

Martijn L

05/09/2011 23:41:03
Quote Anchor link
Ik heb een vraag over een checkbox.

Na een aantal avonden te hebben besteed aan het zoeken naar mijn antwoord toch maar een topic openen.

Ik had wel een een tutorial gevonden maar die was volgens een aantal mensen heel slecht:
http://www.html-form-guide.com/php-form/php-form-checkbox.html

Wat is mijn vraag?

Hoe verwerk ik data vanuit een checkbox met php.

Wat ik hierbij wil is een beveiliging.

Deze beveiliging moet uit de database kijken of bij het aangevinkte bericht (mogelijk veranderd via een browser) bij die ID van dat bericht ook zijn Gebruikersnaam staat. En als dit niet het geval is de volledige actie afbreken en dit vermelden:

Een van de door jou geselecteerde berichten is niet van jou.

Als je het zou doen met een ander soort formulier zou ik dit hebben:

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
<?php
if(isset($_POST['verwijder'])){
$controles     = mysql_query("SELECT * FROM `berichten` WHERE `ID`='$_POST['berichtnummer']' AND `owner`='{$_SESSION['login']}'");
$controle     = mysql_num_rows($controles);

if($controle < 1){
    echo'
        <tr>
            <td class="mainTxt" colspan="8">
                Een van de door jou geselecteerde auto\'s is niet van jou!.
            </td>
        </tr>
    '
;
}

else{
mysql_query("DELETE FROM `berichten` WHERE `ID`='$_POST['berichtnummer']' AND`gebruiker`='{$_SESSION['login']}'");
    echo'
        <tr>
            <td class="mainTxt" colspan="8">
                Je bericht is verwijderd!.
            </td>
        </tr>
    '
;
}
}

        echo'
                <form method="post">
                    <input type="text" name="berichtnummer" />
                                <br />
                        <input type="submit" name="verwijder" value="verwijder" />
                </form>
        '
;
?>


Ook heb ik een vraag over een aanmerking van iemand die op mij is gegeven maar waar ik geen verbetering bij kreeg.

Volgens dit desbetreffende persoon zijn mijn mysql_query's niet beveiligd. Ik begrijp niet wat hij/zij bedoeld. Als ik hierop op google zoek vind ik hoe je een server kan beveiligen.
Gewijzigd op 06/09/2011 22:55:19 door Martijn L
 
PHP hulp

PHP hulp

24/05/2012 00:35:40
Gesponsorde koppelingen:
 
- SanThe -

- SanThe -

05/09/2011 23:54:23
Quote Anchor link
Gebruik geen backtics in je query's. Hou $vars buiten de quotes. Je script in nu inderdaad lek => sql-injection. (Gebruik mysql_real_escape_string()). Waarom eerst selecteren en dan pas verwijderen? Als het verwijderen niet lukt (0 records) is dat toch ook duidelijk.
 
Martijn L

Martijn L

06/09/2011 00:07:14
Quote Anchor link
- SanThe - backtics beschermen je query toch tegen het gebruik van bijvoorbeeld als je een tabel hebt die update heet SELECT * FROM update dat die dan die tabel selecteert ipv per ongelijk updaten?


Hou $vars buiten de quotes

Bedoel je hierbij $_POST['verwijder']? dus het moet $_POST[verwijder] worden?
En wat is er verkeerd aan.

Ik wil niet eigenwijs zijn maar ben benieuwd.
Dus jij zou zeggen:

$safeid = mysql_real_escape_string($_POST[berichtnummer]);

mysql_query("DELETE FROM `berichten` WHERE `ID`='$safeid' AND`gebruiker`='{$_SESSION['login']}'");
 
- SanThe -

- SanThe -

06/09/2011 00:21:38
Quote Anchor link
Het is gewoon niet aan te raden om de reserved words van sql als tabel- of veldnaam te gebruiken. Een vergissing is dan zo gemaakt. $vars buiten quotes, zie mijn voorbeeld. Wat jij nu doet is de quotes om de key weghalen en die moeten juist blijven. Foutafhandeling ontbreekt ook.

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
<?php
$sql
= "SELECT * FROM berichten
    WHERE ID = '"
. mysql_real_escape_string($_POST['berichtnummer']) . "'
    AND owner = '"
. mysql_real_escape_string($_SESSION['login']) . "'";
$result = mysql_query($sql);
if(!$result)
{

    // error
}
else
{
    // ga verder
}
?>
 
Martijn L

Martijn L

06/09/2011 12:18:29
Quote Anchor link
Dank je voor de zinvolle reactie (niet sarcastisch), heb je misschien ook een uitkomst voor m'n andere vraag?

Ik heb de tijd ik zou mijn query's eerst even moeten aanpassen.
Gewijzigd op 06/09/2011 12:26:12 door Martijn L
 
- SanThe -

- SanThe -

06/09/2011 14:04:13
Quote Anchor link
Martijn L op 06/09/2011 12:18:29:
heb je misschien ook een uitkomst voor m'n andere vraag?


Zie ik iets over het hoofd, welke vraag was dat?
 
Martijn L

Martijn L

06/09/2011 15:30:47
Quote Anchor link
- SanThe - op 06/09/2011 14:04:13:
Martijn L op 06/09/2011 12:18:29:
heb je misschien ook een uitkomst voor m'n andere vraag?


Zie ik iets over het hoofd, welke vraag was dat?


Hoe verwerk ik data vanuit een checkbox met php.

Wat ik hierbij wil is een beveiliging.

Deze beveiliging moet uit de database kijken of bij het aangevinkte bericht (mogelijk veranderd via een browser) bij die ID van dat bericht ook zijn Gebruikersnaam staat. En als dit niet het geval is de volledige actie afbreken en dit vermelden:

Een van de door jou geselecteerde berichten is niet van jou.

Deze vraag als je hem niet begrijpt probeer ik hem nog anders te formuleren
 
Klaasjan Boven

Klaasjan Boven

06/09/2011 18:45:04
Quote Anchor link
Die beveiliging heb je er al in. Door op beide zaken te selecteren. OWNER zal trouwens waarchijnlijk een reserved word zijn
 
- SanThe -

- SanThe -

06/09/2011 19:18:16
Quote Anchor link
Klaasjan Boven op 06/09/2011 18:45:04:
OWNER zal trouwens waarchijnlijk een reserved word zijn


Volgens mij niet.
 
Jacco Brandt

Jacco Brandt

06/09/2011 19:26:25
Quote Anchor link
En daarbij is er niets mis met backticks, zolang als je maar een MySQL-server gebruikt. Santhe vind gewoon dat het er niet hoort :+).
 
Roel van de Water
Moderator

Roel van de Water

06/09/2011 20:28:32
Quote Anchor link
Gereserveerde woorden gebruiken is spelen met vuur.
En wat doet een onervaren 'hoi-ik-gebruik-ob-start-voor-header-error-noob' dan? Natuurlijk, backticks ipv een fatsoenlijke naam!
 
Jacco Brandt

Jacco Brandt

06/09/2011 20:31:05
Quote Anchor link
Gewoon beiden gebruiken, ik vind backticks juist fijn voor de overzichtelijkheid.
 
Martijn L

Martijn L

06/09/2011 21:04:23
Quote Anchor link
Klaasjan Boven op 06/09/2011 18:45:04:
Die beveiliging heb je er al in. Door op beide zaken te selecteren. OWNER zal trouwens waarchijnlijk een reserved word zijn


Ja maar dit is voor een ander soort formulier dan dat ik wil.
Ik wil weten hoe je een Checkbox formulier verwerkt via php

En volgens dit overzicht is owner geen reserved word

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
Gewijzigd op 06/09/2011 21:06:49 door Martijn L
 
Obelix en Idefix

Obelix en Idefix

06/09/2011 21:52:24
 
Martijn L

Martijn L

06/09/2011 22:06:00
Quote Anchor link
Ik kan mijn topic niet aanpassen:S overal staat een editknopje behalve daar:S en ja ik ben ingelogd en ja hier staat die wel
 
Roel van de Water
Moderator

Roel van de Water

06/09/2011 22:21:29
Quote Anchor link
Gewoon een nieuwe reactie posten.
Je topic aanpassen is nergens voor nodig.
 
Martijn L

Martijn L

06/09/2011 22:32:25
Quote Anchor link
Roel van de Water op 06/09/2011 22:21:29:
Gewoon een nieuwe reactie posten.
Je topic aanpassen is nergens voor nodig.


Ze vonden mijn vraag niet goed geformuleerd dus dan pas ik meestal de vraag aan waardoor de vraag duidelijker wordt?

Maar heeft iemand een goede tut om de gegevens van een checkbox te verwerken via php?
Gewijzigd op 06/09/2011 22:33:08 door Martijn L
 
- SanThe -

- SanThe -

08/09/2011 15:49:37
Quote Anchor link
Maak een checkbox:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<input type="checkbox" name="box" value="blabla">';
?>


Check de checkbox:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if(isset($_POST['box']))
{

    // aangevinkt
}
else
{
    // niet aangevinkt
}
?>
 
Martijn L

Martijn L

08/09/2011 16:17:19
Quote Anchor link
Nou ik heb een formulier via een checkbox. (ingekort)

En nu wil ik dus als ik meerdere berichten heb aangevinkt dat hij deze verwijderd uit de database.

En ik vraag me af of iemand dit weet hoe dit moet?

Maar aangezien je via chrome en misschien meerdere browsers html kan wijzigen wil ik een beveiliging erin zoals:

Je berichten zijn niet verwijderd omdat een aantal niet van jou waren. Of tenminste dat ze niet verwijderd worden.

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
<?php
$sql
        =     "SELECT * FROM berichten
                WHERE ID='"
.mysql_real_escape_string($_POST['berichtnummer'])."' AND owner='".mysql_real_escape_string($_SESSION['login'])."'";
$berichten  = mysql_query($sql);
$berichtnr     = mysql_num_rows($controles);
    echo'
        <table>
    '
;
if($berichtnr < 1){
    echo'
        <tr>
            <td>
                Je hebt geen berichten in je inbox.
            </td>
        </tr>
    '
;    
}

else{
    while($berichtinfo = mysql_fetch_object($berichten)){
        echo'
            <tr>
                <td>
                    '
.$berichtinfo->afzender.'
                </td>
                <td>
                    '
.$berichtinfo->onderwerp.'
                </td>
                <td>
                    <input type="checkbox" name="berichtnummer" value="'
.$berichtinfo->ID.'" />
                </td>
            </tr>
        '
;
    }
}

    echo'
            <tr>
                <td>
                    <input type="submit" value="Verwijder" name="verwijder" />
                </td>
            </tr>
        </table>
    '
;
?>
 
- SanThe -

- SanThe -

08/09/2011 16:41:30
Quote Anchor link
Dat kan toch zo: (LET OP: Zorg dat elk $berichtinfo->ID wel het juiste nummer heeft)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// formulier
echo '<input type="checkbox" name="berichtnummer[]" value="' . $berichtinfo->ID1 . '" />';
echo '<input type="checkbox" name="berichtnummer[]" value="' . $berichtinfo->ID2 . '" />';
echo '<input type="checkbox" name="berichtnummer[]" value="' . $berichtinfo->ID3 . '" />';
?>


Afhandeling: (LET OP: Hier zit nog geen check op of het wel allemaal getallen zijn)
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
<?php
// totaal aangevinkt
$totaal = count($_POST['berichtnummer'];
$alle_idnummers = implode(',', $_POST['berichtnummer']);
$sql = "DELETE FROM ...
        WHERE owner = '"
. mysql_real_escape_string($_SESSION['login']) . "'
        AND ID IN ("
. $alle_idnummers . ")";
$result = mysql_query($sql);
if(!$result)
{

    // error
}
else
{
    $gelukt = mysql_affected_rows();
    echo 'Aangevinkte records: ' . $totaal . ', waarvan verwijderd: ' . $gelukt;
}

?>

Ben jij dus niet de owner, dan zal het ook niet worden verwijderd.
 
Martijn L

Martijn L

08/09/2011 16:47:55
Quote Anchor link
Dank je voor je uitleg, ik ga het proberen.

En de tut die ik bovenaan heb staan is een totaal verkeerde manier?


Toevoeging op 08/09/2011 17:04:01:

Aangevinkte records: 2, waarvan verwijderd: 2

Dank je voor je hulp.


Toevoeging op 08/09/2011 20:15:44:

Mag ik uit het onderstaande script concluderen dat $game veilig is voor een mysql_query zonder injecties enz.?

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
<?php
    $games
= ctype_digit($_GET['game']);
        if($games     == '1'){
            $sql      = "SELECT * FROM users WHERE game='{$_GET['game']}'";
            $check    = mysql_query($sql);
            if(!$check){
                echo'
                    Error!
                '
;
            }

            else{
                $setsave = mysql_fetch_object($check);
                $game = $setsave->game;
            }
        }

        else{
            echo'
                Je bent bezig met onveilig gedrag. Stop hiermee!
            '
;
        }

?>
Gewijzigd op 08/09/2011 17:03:53 door Martijn L
 

Pagina: 1 2 volgende »



Overzicht Reageren