Checkbox formulier
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.
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']}'");
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
}
?>
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 :+).
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
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
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
Check de checkbox:
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>
';
?>
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.
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