Checkbox formulier
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:
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.
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)
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
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>
';
?>
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
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.
- 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']}'");
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']}'");
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
}
?>
$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
}
?>
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.
Ik heb de tijd ik zou mijn query's eerst even moeten aanpassen.
Gewijzigd op 06/09/2011 12:26:12 door Martijn L
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?
- SanThe - op 06/09/2011 14:04:13:
Zie ik iets over het hoofd, welke vraag was dat?
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
Die beveiliging heb je er al in. Door op beide zaken te selecteren. OWNER zal trouwens waarchijnlijk een reserved word zijn
Klaasjan Boven op 06/09/2011 18:45:04:
OWNER zal trouwens waarchijnlijk een reserved word zijn
Volgens mij niet.
En daarbij is er niets mis met backticks, zolang als je maar een MySQL-server gebruikt. Santhe vind gewoon dat het er niet hoort :+).
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!
En wat doet een onervaren 'hoi-ik-gebruik-ob-start-voor-header-error-noob' dan? Natuurlijk, backticks ipv een fatsoenlijke naam!
Gewoon beiden gebruiken, ik vind backticks juist fijn voor de overzichtelijkheid.
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
Waarom ga je niet verder in http://www.phphulp.nl/php/forum/topic/checkbox-formulier/79874/ ??
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
Gewoon een nieuwe reactie posten.
Je topic aanpassen is nergens voor nodig.
Je topic aanpassen is nergens voor nodig.
Roel van de Water op 06/09/2011 22:21:29:
Gewoon een nieuwe reactie posten.
Je topic aanpassen is nergens voor nodig.
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
Maak een checkbox:
Check de checkbox:
Check de checkbox:
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.
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)
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
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>
';
?>
$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>
';
?>
Dat kan toch zo: (LET OP: Zorg dat elk $berichtinfo->ID wel het juiste nummer heeft)
Afhandeling: (LET OP: Hier zit nog geen check op of het wel allemaal getallen zijn)
Ben jij dus niet de owner, dan zal het ook niet worden verwijderd.
Code (php)
Afhandeling: (LET OP: Hier zit nog geen check op of het wel allemaal getallen zijn)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}
?>
// 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.
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.?
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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!
';
}
?>
$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




