[php/mysql] Delete stamement anders?

Pagina: 1
Acties:

  • Shagura
  • Registratie: Augustus 2001
  • Laatst online: 04-09 22:30
k, ik maak dus een leuk nieuwssysteempje met php/mysql en nu stuit ik op een probleempje.
Hij moet dus een nieuwsbericht verwijderen en alles gaat redelijk goed.
Nu heb ik echter het volgende stukje code:
PHP:
1
<?verbind();        $query = mysql_query("DELETE FROM nieuws WHERE id = '$id' AND auteur = '$loginnaam'");        if ($query) {            echo "Je Bericht is verwijdert";        } else {            echo "Er is iets fout gegaan bij het verwijderen van je bericht!";        }?>

de user die dit krijgt is iemand die alleen z'n eigen berichten mag verwijderen, daarom staat er ook Where id ='id' AND auteur = '$loginnaam'. $loginnaam zit in een sessie en is de naam waarvandaan je bent ingelogd.

Nu probeer ik als zo'n user die alleen z'n eigen berichten mag verwijderen (naam: Kees) een bericht te verwijderen van Piet, daardoor is $loginnaam != auteur en denk je dat de if statement FALSE moet weergeven. Dit doet ie echter niet, nee hij geeft vrolijk weer dat je bericht is verwijdert maar verwijdert vervolgens het bericht (gelukkig) niet. Maar waarom geeft ie dan weer dat hij is verwijdert?

Verwijderd

$query krijgt hier wel gewoon een waarde (geen null) dus komt ie in de eerste branch van de if terecht.. je moet volgens mij $query = blaat or die("Niet verwijderd"); gebruiken..

  • Shagura
  • Registratie: Augustus 2001
  • Laatst online: 04-09 22:30
Op donderdag 20 juni 2002 21:17 schreef kietel het volgende:
$query krijgt hier wel gewoon een waarde (geen null) dus komt ie in de eerste branch van de if terecht.. je moet volgens mij $query = blaat or die("Niet verwijderd"); gebruiken..
waarom werkt dit dan wel altijd bij SELECT statements?
Ik zou denken dat hij hem niet kan deleten omdat auteur != $loginnaam dus dat hij FALSE weergeeft.

  • wietco
  • Registratie: Augustus 2001
  • Laatst online: 04-09 16:42
Ik denk omdat SELECT een waarde terug geeft en DELETE alleen een actie uitvoerd op je mysql

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 15:27

TheDane

1.618

print $query maar eens nadat je dat delete statement hebt gedaan .. kijke wat voor waarde ie heeft

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Hij voert een statement uit. Delete alles waar de where geld. Als de where nergens geld en hij dus niks delete is het statement toch nog steeds goed uitgevoerd?

Kijk nog maar eens in de PHP manual bij mysql, daar zie je vast wel de functie die je wel nodig hebt :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Shagura
  • Registratie: Augustus 2001
  • Laatst online: 04-09 22:30
uit http://www.mysql.com/doc/D/E/DELETE.html
DELETE deletes rows from table_name that satisfy the condition given by where_definition, and returns the number of records deleted.
Hij delete toch 0 rows en zou dus toch 0 terug moeten geven wat gelijk is aan false bij deze voowaarde, dus zou hij toch de else constructie weer moeten geven :?

Maarja, weet iemand hoe ik dit dan kan oplossen?

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Op vrijdag 21 juni 2002 13:02 schreef Shagura het volgende:

[..]

Hij delete toch 0 rows en zou dus toch 0 terug moeten geven wat gelijk is aan false bij deze voowaarde, dus zou hij toch de else constructie weer moeten geven :?

Maarja, weet iemand hoe ik dit dan kan oplossen?
Nee, want zoals hierboven gezegd: de query wordt goed uitgevoerd, anders zou je een MySQL error krijgen.

Dit werkt dan wel volgens mij:
PHP:
1
<?verbind();$query = mysql_query("DELETE FROM nieuws WHERE id = '$id' AND auteur = '$loginnaam'");    if (mysql_affected_rows() !=  0) {    echo "Je Bericht is verwijdert";} else {    echo "Er is iets fout gegaan bij het verwijderen van je bericht!";}?>

/edit: layout :+

Sundown Circus


Verwijderd

owja, verwijderd is met een D

(check mijn sub...)

Verwijderd

Probeer eens

echo $id;
echo $loginnaam;

om te checken of hij wel de goede waardes ophaald uit de variabelen als dat goed is, is het toch echt wat met je code...

  • Shagura
  • Registratie: Augustus 2001
  • Laatst online: 04-09 22:30
Op zaterdag 22 juni 2002 12:53 schreef zellufs het volgende:
owja, verwijderd is met een D

(check mijn sub...)
normaal doe ik dat nooit fout |:(
en hij werkt al met mysql_affected_rows()

Verwijderd

Je zou ook dit kunnen doen:
PHP:
1
<?verbind();$query = mysql_query("DELETE FROM nieuws WHERE id = '$id' AND auteur = '$loginnaam'");if ($query !==  0) {    echo "Je Bericht is verwijdert";}else {    echo "Er is iets fout gegaan bij het verwijderen van je bericht!";}?>

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En het verschil met de topicstart is :?

Maar bij DELETE geeft mysql geen resultset terug, dus dat is een beetje zinloos.

Verwijderd

Op zondag 23 juni 2002 19:23 schreef ACM het volgende:
En het verschil met de topicstart is :?
Hij heeft zelfs dezelfde taalfout mee overgenomen... :D

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Op zondag 23 juni 2002 19:40 schreef zellufs het volgende:

[..]

Hij heeft zelfs dezelfde taalfout mee overgenomen... :D
Ik ook in bovenstaande post... oeps :* O+ ...

Maar inderdaad !== :
identical - TRUE if $a is not equal to $b, or they are not of the same type. (PHP 4 only)
Dus dat is inderdaad ook een zinloze operator in dit geval.

Sundown Circus


  • igmar
  • Registratie: April 2000
  • Laatst online: 23-08 16:57

igmar

ISO20022

Op donderdag 20 juni 2002 21:15 schreef Shagura het volgende:
Nu heb ik echter het volgende stukje code:
PHP:
1
<?verbind();        $query = mysql_query("DELETE FROM nieuws WHERE id = '$id' AND auteur = '$loginnaam'");        if ($query) {            echo "Je Bericht is verwijdert";        } else {            echo "Er is iets fout gegaan bij het verwijderen van je bericht!";        }?>

de user die dit krijgt is iemand die alleen z'n eigen berichten mag verwijderen, daarom staat er ook Where id ='id' AND auteur = '$loginnaam'. $loginnaam zit in een sessie en is de naam waarvandaan je bent ingelogd.

Nu probeer ik als zo'n user die alleen z'n eigen berichten mag verwijderen (naam: Kees) een bericht te verwijderen van Piet, daardoor is $loginnaam != auteur en denk je dat de if statement FALSE moet weergeven. Dit doet ie echter niet, nee hij geeft vrolijk weer dat je bericht is verwijdert maar verwijdert vervolgens het bericht (gelukkig) niet. Maar waarom geeft ie dan weer dat hij is verwijdert?
Omdat mysql_query alleen aangeeft of de query is goedgegaan. Indien de query goed is, maar geen rows verwijderd geeft mysql_query gewoon TRUE terug. Je moet mysql_affected_rows() gebruiken.
Pagina: 1