[PHP] Delete werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben al sinds gisteren bezig om een delete query aan de gang te krijgen, maar hij verwijderd niets uit mijn database. Na veel op tweakers te hebben doorgelezen en overleg met mijn kameraden heb ik veel geprobeert maar niets lijkt te werken.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    if ($_GET[id]) {
        //verbinding maken met MySQL database//
        mysql_connect("localhost", "user", "@password")
            or die("Kan verbinding niet maken: " . mysql_error());
        mysql_select_db("dvd");
        
        //gegevens verwijderen uit MySQL database//
        mysql_query("DELETE * FROM film WHERE dvd_nr='$_GET[id]'");

    printf("Je hebt een ID ingevuld namelijk: $_GET[id]");

    }

    else{
    printf("Je hebt geen ID ingevuld");
    }
?>


ID krijgt wel een waarde toegewezen...
Heb al geprobeerd:
LIKE tussen dvd_nr en $_GET gezet
een @ voor mysql_query.
een $id aangemaakt en die de waarde gegeven

Misschien zijn er nog meer mogelijkheden, maar ik weet het ff niet meer.

Acties:
  • 0 Henk 'm!

Verwijderd

Haal je * eens uit je delete query
edit:
en zet aanhalingstekens rondom de id uit $_GET[id]

[ Voor 49% gewijzigd door Verwijderd op 14-02-2004 11:28 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Lees de mysql manual eens, als je alles wilt deleten doe je:

DELETE FROM table, niet DELETE * FROM table..

en voor debuggen, zet eens: or die(mysql_error()); achter je query..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 14 februari 2004 @ 11:27:
Haal je * eens uit je delete query
thnx man, het werkt.

Maar mag ik vragen waarom het nu wel werkt, want die kan ik ff niet begrijpen???

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:31

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 14 februari 2004 @ 11:29:
[...]


thnx man, het werkt.

Maar mag ik vragen waarom het nu wel werkt, want die kan ik ff niet begrijpen???
Omdat de syntax fout was?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 14 februari 2004 @ 11:29:
[...]


thnx man, het werkt.

Maar mag ik vragen waarom het nu wel werkt, want die kan ik ff niet begrijpen???
Omdat * niet alles is zoals in een SELECT query, anyway..
wat jij doet is überhaupt niet veilig.
Verder: $_GET[id] moet $_GET['id'] worden.
PHP:
1
2
3
<?php
$query = mysql_query("DELETE FROM table WHERE id = '{$_GET['id']}'") or die('Query: ' . $query . 'Mysql Error: ' . mysql_error());
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Wat 'n vergezocht antwoord :+

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gorgi_19 schreef op 14 februari 2004 @ 11:30:
[...]

Omdat de syntax fout was?
Oke, maar ik kan jullie verzekeren dat ik begonnen wat met de * er tussen uit te laten en het toen ook niet aan de praat kon krijgen. Heb toen even overlegt met een kameraad van die al vaker met php werkt dat mij en toen heeft hij mij dit toegestuurd.......
Verwijderd schreef op 14 februari 2004 @ 11:32:
[...]

Omdat * niet alles is zoals in een SELECT query, anyway..
wat jij doet is überhaupt niet veilig.
Verder: $_GET[id] moet $_GET['id'] worden.
PHP:
1
2
3
<?php
$query = mysql_query("DELETE FROM table WHERE id = '{$_GET['id']}'") or die('Query: ' . $query . 'Mysql Error: ' . mysql_error());
?>
waarom is wat ik doe niet veilig

[ Voor 37% gewijzigd door Verwijderd op 14-02-2004 11:33 ]


Acties:
  • 0 Henk 'm!

  • arikkert
  • Registratie: Juli 2002
  • Laatst online: 17-08 19:05
select * from

delete from

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Verwijderd schreef op 14 februari 2004 @ 11:32:
waarom is wat ik doe niet veilig
Geef bijvoorbeeld maar eens "1' or 1=1 #'" door in het id veld.
Je statement wordt dan "delete from xxx where id=1 or 1=1 #"
Oftewel: delete alles uit de tabel.

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • QkE
  • Registratie: April 2002
  • Laatst online: 14-09 20:34

QkE

In your face Gnagna

Omdat je meteen een invoer waarde gebruikt om te verwijderen. Je kunt gebruikers NOOIT vertrouwen. :)

edit:

Wat justmental zei dus

[ Voor 18% gewijzigd door QkE op 14-02-2004 11:41 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Het is gewoon vrij logisch, hoe kun je nou ooit alleen een bepaald veld uit een bepaalde rij verwijderen? Dat gaat nergens over.

@ts: controleer eerst eens of de id wel werkelijk voldoet aan is_numeric en laat addslashes() er wat slahes omheen zetten zodat het veiliger wordt.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Omdat iedere random gek nu dingen uit je tabel kan verwijderen.

Of erger nog stel dat ze iets als dit erin zetten.
code:
1
http://server.domein/pagina.php?Id=3;+DROP+TABLE+table;

Je Query wordt dan:
DELETE FROM table WHERE id = 3; DROP TABLE table;
Ben je mooi mee genaaid.
een
PHP:
1
is_numerid($_GET['id']) or die('hack!');
geeft extra veiligheid.
Of nog beter:
PHP:
1
preg_match("^\d+$",$_GET['id']) or die('hack!');

Maar die is misschien wat moeilijker te begrijpen.
Wat ook zou kunnen:
PHP:
1
mysql_query("DELETE FROM film WHERE dvd_nr='".addslashes($_GET[id])."'");

edit:

So many great minds alike... wat een gevoel voor veiligheid hier!

[ Voor 46% gewijzigd door Skaah op 14-02-2004 11:47 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke thnx, voor de snelle reacties.

Wat ik dan in het begin fout heb gedaan zo het niet meer weten. Ik moet, zoals jullie al wel kunnen denken, toegeven dat ik nog maar net met php begin. Ik wou eerst de belangrijkste scripts klaar hebben en daarna de beveiliging toepassen, omdat ik mij hierin nog moet verdiepen.....

Maar nogmaals bedankt voor jullie hulp _/-\o_

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

PHP:
1
mysql_query("DELETE FROM film WHERE dvd_nr='".addslashes($_GET[id])."'");


Nu ga je op string zoeken in een int-veld. Kan wel en zal in MySQL wel niet zoveel uitmaken, maar dit is ook te overwegen:

PHP:
1
mysql_query("DELETE FROM film WHERE dvd_nr=" . ((int) $_GET['id']) );

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Dat is wel een hele mooie oplossing bosmonster _/-\o_

Als het geen int is dan krijg jer gewoon geen resultaat als ik het goed begrijp omdat er dan op false gezocht wordt?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

djluc schreef op 14 februari 2004 @ 12:25:
Dat is wel een hele mooie oplossing bosmonster _/-\o_

Als het geen int is dan krijg jer gewoon geen resultaat als ik het goed begrijp omdat er dan op false gezocht wordt?
(int) geeft 0 als je er string mee convert. Als het gaat om ID's (iig in MySQL) zou dit geen probleem op moeten leveren, want die beginnen toch altijd bij 1.

Niet altijd bruikbaar dus, maar voor autoincrements met indices kan het wel uitmaken.

[ Voor 10% gewijzigd door Bosmonster op 14-02-2004 12:34 ]


Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Wat dachten jullie van gewoon mysql_escape_string??

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Verwijderd schreef op 14 februari 2004 @ 11:25:
Ben al sinds gisteren bezig om een delete query aan de gang te krijgen, maar hij verwijderd niets uit mijn database. Na veel op tweakers te hebben doorgelezen en overleg met mijn kameraden heb ik veel geprobeert maar niets lijkt te werken.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    if ($_GET[id]) {
        //verbinding maken met MySQL database//
        mysql_connect("localhost", "user", "@password")
            or die("Kan verbinding niet maken: " . mysql_error());
        mysql_select_db("dvd");
        
        //gegevens verwijderen uit MySQL database//
        mysql_query("DELETE * FROM film WHERE dvd_nr='$_GET[id]'");

    printf("Je hebt een ID ingevuld namelijk: $_GET[id]");

    }

    else{
    printf("Je hebt geen ID ingevuld");
    }
?>

Misschien zijn er nog meer mogelijkheden, maar ik weet het ff niet meer.
Wel eens van gehoord om return waardes van je functies te checken ? Dan had je namelijk gemerkt dat de query niet goed gaat, en indien je ook nog eens mysql_error() had gebruikt had je dat zeker geweten.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Verwijderd schreef op 14 februari 2004 @ 11:55:
Oke thnx, voor de snelle reacties.

Wat ik dan in het begin fout heb gedaan zo het niet meer weten. Ik moet, zoals jullie al wel kunnen denken, toegeven dat ik nog maar net met php begin. Ik wou eerst de belangrijkste scripts klaar hebben en daarna de beveiliging toepassen, omdat ik mij hierin nog moet verdiepen.....

Maar nogmaals bedankt voor jullie hulp _/-\o_
Achterstevoren werken is dubbel lastig.

Bedenk altijd: wat kan hier misgaan? Want Murphy zei het al: was mis kan gaan, zal ook mis gaan (en wel op het moment dat het je het slechtst uitkomt).

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

djluc:
Dat is wel een hele mooie oplossing bosmonster _/-\o_
Ik al een tijdje voor dit soort dingen een vsprintf om een query te formatten. SQL nooit meer in de PHP zelf, maar een directory met sql bestanden in ongeveer dit formaat:
SQL:
1
2
3
4
5
6
7
UPDATE
   some_table
SET
   name=%s,
   position=%d
WHERE
   some_table_id=%d

Strings worden door een aparte functie escaped die de queries "preparen" aan de hand van het type argument.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
De meeste hosters voegen automatisch magic quotes toe, en dan hoef je je om de meeste beveiliging niet druk om te maken.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

drm schreef op 14 februari 2004 @ 16:20:
[...]
Ik al een tijdje voor dit soort dingen een vsprintf om een query te formatten. SQL nooit meer in de PHP zelf, maar een directory met sql bestanden in ongeveer dit formaat:
SQL:
1
2
3
4
5
6
7
UPDATE
   some_table
SET
   name=%s,
   position=%d
WHERE
   some_table_id=%d

Strings worden door een aparte functie escaped die de queries "preparen" aan de hand van het type argument.
Lijkt me eerlijk gezegd nogal onoverzichtelijk. Bovendien worden (bij mij althans) query's regelmatig helemaal dynamisch opgebouwd.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
drm schreef op 14 februari 2004 @ 16:20:
[...]
Ik al een tijdje voor dit soort dingen een vsprintf om een query te formatten...
Interessant, eigenlijk is het dus een soort van template parser opzet voor een query?

Acties:
  • 0 Henk 'm!

Verwijderd

djluc schreef op 14 februari 2004 @ 16:31:
[...]
Interessant, eigenlijk is het dus een soort van template parser opzet voor een query?
vsprintf wrap je met je eigen query parser functie :)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op 14 februari 2004 @ 16:50:
[...]
vsprintf wrap je met je eigen query parser functie :)
Klinkt heel erg slim maar helemaal begrijpen doe ik je post niet (8> Wat is wrappen dan volgens jou? Parsen weet ik wel, maar wrappen zegt me helemaal niets... oja wrappen is natuurlijk het eten van die overheerlijke opgerolde pannekoeken met vanalles er in :9

[ Voor 15% gewijzigd door djluc op 14-02-2004 16:55 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Bosmonster:
Lijkt me eerlijk gezegd nogal onoverzichtelijk. Bovendien worden (bij mij althans) query's regelmatig helemaal dynamisch opgebouwd.
Mja, maar de vorm waarop je queries dynamisch opbouwt is meestal toch hetzelfde, dus daar schrijf ik dan gewoon wrappers voor. Bijvoorbeeld een assoc. array die veldnamen/veldwaarden bevat voor een where clause of een array voor in een IN(...) conditie.

Onoverzichtelijk wordt het niet, het is een kwestie van je queries goed categoriseren en gewoon in directories onderverdelen. Ik vind het echt een ideaal systeem.


edit:
djluc:
Klinkt heel erg slim maar helemaal begrijpen doe ik je post niet (8> Wat is wrappen dan volgens jou?
Wrappen is niets anders dan een functie of een class schrijven die de functionaliteit bevat die je anders vaak moet herhalen. Je "wrapt" dus wat functionaliteit om een aantal standaard aanroepen heen.

In het geval van zo'n prepare functie zal het iets van deze strekking zijn:
PHP:
1
2
3
4
5
6
7
8
function prepare () {
   $args = func_get_args ();
   $template = $this->lookup ( array_shift ( $args ) );
   foreach ( $args as $i => $value ) {
       $args [$i] = $this->escape ( $value );
   }
   return vsprintf ( $template, $args );
}

[ Voor 37% gewijzigd door drm op 14-02-2004 17:05 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op 14 februari 2004 @ 11:32:
[...]
PHP:
1
2
3
<?php
$query = mysql_query("DELETE FROM table WHERE id = '{$_GET['id']}'") or die('Query: ' . $query . 'Mysql Error: ' . mysql_error());
?>
id is een numerieke waarde, dus je moet de quotes eromheen droppen...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Grijze Vos, dat hoeft niet in MySQL.
Pagina: 1