SQL DELETE door php

Pagina: 1
Acties:
  • 519 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gentillekes
  • Registratie: Juli 2010
  • Laatst online: 17-08-2023
Ik heb met php/sql/html een website opgezet waar het voor mensen mogelijk is om een kleine CV te plaatsen welke een linkje bevat naar hun LinkedIN profiel. Alles werkt tot nu toe, ik heb zelfs een zoekfunctie toe weten te voegen, alle php kennis die ik tot nu toe heb, heb ik kunnen gebruiken om deze website in elkaar te zetten.
Het leren van PHP heb ik gedaan met behulp van het boek PHP en MYSQL voor dummies :+

Op deze website kan ik als beheerder inloggen, om zo uiteindelijk ook records te kunnen verwijderen uit de database.

Het enige struikelblok dat er nog heerst, is de verwijder mogelijkheid welke nog niet vlekkeloos werkt.

Ik heb een database met daarin één tabel met kandidaatgegevens (id, naam, email en linkedin-hyperlink ed.) deze informatie wordt mbv php weergegeven in een tabel:
code:
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
48
49
<?php 

$query      =    mysql_query("
SELECT * 
FROM kandidaat
ORDER BY regio, opleiding
");



echo "
<table border='1' bgcolor='fffffff'><tr>
<td><b>id</b></td>
<td><b>achternaam</b></td>
<td><b>voornaam</b></td>
<td><b>geslacht</b></td>
<td><b>regio</b></td>
<td><b>opleiding</b></td>
<td><b>vakgebied</b></td>
<td><b>uurloon</b></td>
<td><b>dienstverband</b></td>
<td><b>linkedin</b></td>
<td><b>email</b></td>
<td><b>datum inschrijving</b></td>
<td><b>#</b></td>
</tr>
";

while($result1 = mysql_fetch_assoc($query)){
    echo "<tr>";
    echo "<td>" .$result1['id']. "</td>";
    echo "<td>" .$result1['achternaam']. "</td>";
    echo "<td>" .$result1['voornaam']. "</td>";
    echo "<td>" .$result1['geslacht']. "</td>";
    echo "<td>" .$result1['regio']. "</td>";
    echo "<td>" .$result1['opleiding']. "</td>";
    echo "<td>" .$result1['vakgebied']. "</td>";
    echo "<td>" .$result1['uurloon']. "</td>";
    echo "<td>" .$result1['dienstverband']. "</td>";
    echo "<td><a href=".$result1['linkedin']." >Klik hier</a></td>";
    echo "<td>" .$result1['email']. "</td>";
    echo "<td>" .$result1['datum']. "</td>";
    echo "<td><input type=checkbox name=checkbox[] id=checkbox[] value=".$result1['id']."></td>";
    echo "</tr>";
}
echo "</table>";
echo "</br>";

?>


Achter elke rij gegevens heb ik tevens een checkbox toegevoegd, met als doelstelling dat ik deze uiteindelijk kan aanvinken en met meerdere tegelijk kan verwijderen.
Het script om ze te verwijderen ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<input name="delete" type="submit" id="delete" value="verwijder">
<?

if($delete){
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM kandidaat WHERE id='$del_id'";

}

}
mysql_close();
?>


Kunnen jullie zien wat ik precies fout doe? voor jullie beeldvorming, wat het script zou moeten doen:
  1. laat kandidaten zien (werkt prima)
  2. vink checkboxes aan (werkt ook)
  3. delete (met een knopje, om zo meerdere records tegelijk te kunnen verwijderen).
mijn website kunnen jullie bewonderen op http://test.rogermooren.nl
logindetails nodig? *Regel dat zelf maar, zet maar gewoon open neer volgende keer*

edit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
<?php

ini_set ('display_errors', 1);

error_reporting(E_ALL);

?>
<?php
include("conf/dbconn.php");
include("header.php");
include("navigatie_beheer.php");
?>


Dit staat nog bovenaan mijn scriptje, oa, een include naar de gegevens van de database (namen, logingegevens etc.)

nog een edit: omdat ik error reporting aan heb staan, krijg ik de volgende melding:
Notice: Undefined variable: delete in /customers/rogermooren.nl/rogermooren.nl/httpd.www/test/beheer_membersdetail.php on line 80

[ Voor 8% gewijzigd door MueR op 07-01-2011 15:34 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Het kan aan mij liggen, maar moet je $sql ook niet nog naar je database sturen? En hopelijk werken $delete en $checkbox ook niet, zie http://php.net/manual/en/security.globals.php

[ Voor 13% gewijzigd door Spider.007 op 07-01-2011 14:58 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Nu online

SinergyX

____(>^^(>0o)>____

Waar wordt $count gevuld? Je gebruikt hem wel in je loop, maar ik zie nergens in script $count ook een waarde krijgen. (zolang 1<0 -> hij doet geen loop). Krijgt de checkbox wel een unieke name per regel? checkbox[] doet volgens mij niets.

Sterk punt ook van spider :) Moet dit niet met de POST values worden gedaan?
* SinergyX PHP skills zijn wat roestig.

[ Voor 41% gewijzigd door SinergyX op 07-01-2011 15:00 ]

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

  • E-Vix
  • Registratie: Juni 2000
  • Laatst online: 13:44

E-Vix

Nu met sneeuw!

Buiten de bovengenoemde punten, is het niet verstandiger om in plaats van een record te verwijderen, een extra kolom aan je records toe te voegen met daarin of een profiel wel of niet actief is? Zo kan je bijvoorbeeld makkelijk per ongeluk verwijderde profielen weer terug halen.

Failed opening '/home/users/7942/signature.inc' for inclusion (include_path='.:') in /home/www/got/userstats.php on line 25


Acties:
  • 0 Henk 'm!

  • gentillekes
  • Registratie: Juli 2010
  • Laatst online: 17-08-2023
Hij doet inderdaad niets nee :P pak ik dit niet te complex aan? moet dit niet veel simpeler kunnen?

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Even terzijde, check je wel je inputs goed. Volgens mij staat het open voor een sql injection. Even een handgemaakt form sturen met checkbox value van "0' OR id > '0" (hele tabel weg)

[ Voor 4% gewijzigd door Zoijar op 07-01-2011 15:08 ]


Acties:
  • 0 Henk 'm!

  • gentillekes
  • Registratie: Juli 2010
  • Laatst online: 17-08-2023
E-Vix schreef op vrijdag 07 januari 2011 @ 15:05:
Buiten de bovengenoemde punten, is het niet verstandiger om in plaats van een record te verwijderen, een extra kolom aan je records toe te voegen met daarin of een profiel wel of niet actief is? Zo kan je bijvoorbeeld makkelijk per ongeluk verwijderde profielen weer terug halen.
goed punt! daar had ik nog niet aan gedacht. het is voor mij echter wel de vraag of ik weet hoe ik dit moet toepassen, laat ik eerst eens kijken naar DELETE, op het moment dat dat lukt kijk ik graag verder naar non-actief functies.

Acties:
  • 0 Henk 'm!

  • Meijuh
  • Registratie: December 2006
  • Laatst online: 17-03 21:08
Buiten de veiligheid om:
Als je $count veranderd door count($checkbox) in de for-loop, werkt het dan beter?

Asus EN8800GTS, Asus P5E, Intel E8400, 2x500gb Spinpoint (raid0), Zalman HP 600 watt, cnps 9500 led, creative xfi music, 4x1gb hyperX PC2 8500


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik heb deze al jaren niet meer hoeven linken maar volgens mij is 'ie hier weer nodig.
Programming FAQ - PHP: Mijn POST en GET forms werken niet (meer)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • gentillekes
  • Registratie: Juli 2010
  • Laatst online: 17-08-2023
code:
1
2
3
4
if($delete){
for($i=0;$i<count($checkbox);$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM kandidaat WHERE id='$del_id'";

zoiets?

veiligheid is idd nog een item waar ik nog even naar moet kijken. Dit doe ik na afloop van het hele verhaal. Dit omdat ik eerst moet kijken/leren hoe en óf het allemaal mogelijk is.

Acties:
  • 0 Henk 'm!

  • Brons
  • Registratie: April 2002
  • Laatst online: 09-09 21:55

Brons

Fail!

Achteraf naar de veiligheid kijken lijkt mij niet verstandig, je loopt dan het risico dat je zaken over het hoofd ziet. Ook leer je jezelf dan slechte gewoontes aan. SQL injection is eenvoudig te voorkomen maar ook erg gevaarlijk.

Acties:
  • 0 Henk 'm!

  • Meijuh
  • Registratie: December 2006
  • Laatst online: 17-03 21:08
gentillekes schreef op vrijdag 07 januari 2011 @ 15:13:
code:
1
2
3
4
if($delete){
for($i=0;$i<count($checkbox);$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM kandidaat WHERE id='$del_id'";

zoiets?

veiligheid is idd nog een item waar ik nog even naar moet kijken. Dit doe ik na afloop van het hele verhaal. Dit omdat ik eerst moet kijken/leren hoe en óf het allemaal mogelijk is.
Ja, en dan nog mysql_query($sql) or die(mysql_error()) er aan toevoegen.

Asus EN8800GTS, Asus P5E, Intel E8400, 2x500gb Spinpoint (raid0), Zalman HP 600 watt, cnps 9500 led, creative xfi music, 4x1gb hyperX PC2 8500


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Meijuh schreef op vrijdag 07 januari 2011 @ 15:17:
[...]

Ja, en dan nog mysql_query($sql) or die(mysql_error()) er aan toevoegen.
Ja, want het is in productie heel fijn om dat soort gegevens over je queries aan je gebruikers te geven...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Meijuh
  • Registratie: December 2006
  • Laatst online: 17-03 21:08
NMe schreef op vrijdag 07 januari 2011 @ 15:26:
[...]

Ja, want het is in productie heel fijn om dat soort gegevens over je queries aan je gebruikers te geven...
Het leren van PHP heb ik gedaan met behulp van het boek PHP en MYSQL voor dummies
Hij begint net aan PHP, ik denk dat we hem genoeg gewaarschuwd hebben om dit niet in een productieomgeving te zetten. Maar iedereen moet toch op een manier php/mysql leren? Ik denk dat dit een goed begin is.

Asus EN8800GTS, Asus P5E, Intel E8400, 2x500gb Spinpoint (raid0), Zalman HP 600 watt, cnps 9500 led, creative xfi music, 4x1gb hyperX PC2 8500


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:45

MueR

Admin Tweakers Discord

is niet lief

De helpdesk is gesloten. Als je een testcase online zet, willen we die op een publieke locatie hebben. We gaan niet wachtwoorden voor het testen bij je ophalen. Regel dat de volgende keer.

Dit topic is echt te basic. Ik mis elke vorm van debuggen. Dit is niet de eerste keer dat je hierop gewezen bent. Het wordt een beetje flauw om je te moeten blijven wijzen naar onze Het algemeen beleid #quickstart. Zorg nou eens eerst dat je zelf weet wat er met je data gedaan wordt, voordat je hier komt klagen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Even een toevoeging na het slotje:
Meijuh schreef op vrijdag 07 januari 2011 @ 15:36:
[...]

[...]

Hij begint net aan PHP, ik denk dat we hem genoeg gewaarschuwd hebben om dit niet in een productieomgeving te zetten. Maar iedereen moet toch op een manier php/mysql leren? Ik denk dat dit een goed begin is.
Best hoor. Maar dan wel met de nuance dat je dat alleen tijdens het testen laat staan. Het werd hier gebracht als de beste permanente oplossing en dat is het pertinent niet.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.