[PHP] code blijft hangen in loop*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi tweakers,

In volgende PHP code blijft deze hangen op lijn elf en stop de executie van de code omdat de timer verlopen is. Als het 60s niet lukt, stop php met de uitvoering blijkbaar. Even een kleine uitleg wat deze code zou moeten doen. Op een vorige pagina kan je uit een lijst van database records met een checkbox selecteren welke records moeten verwijderd worden. Deze checkboxen krijgen de naam chkVerwijderen met daaraan vast een oplopend nummer beginnend bij 0. Als er daar op de submit pagina wordt geklikt dan gaat deze verder naar deze pagina waarin dan de records zouden moeten verwijderd worden. Bij submit worden dan de variabelen van de geselecteerde checkboxen via GET chkVerwijderen13, chkVerwijderen11,... De value van deze variabelen is dan het kaartNr waarmee dan op de onderstaande pagina het in de DELETE-query wordt ingevoegd en deze wordt dan uitgevoerd.

Nu blijft hij steeds hangen op die lijn 11 dus de if, ik heb me ziek gezocht op wat het probleem zou kunnen zijn maar vind niets.

Kan iemand mee dit uitleggen?


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 
session_start();

$N = 0;
$_SESSION['aantalRijen']--;

$con = mysql_connect("localhost","php","php");
          mysql_select_db("ecard",$con);

for($N; $_SESSION['aantalRijen']; $N++){
        if(isset($_GET['chkVerwijderen'.$N])){
        mysql_query("DELETE FROM tbl_ecard_kaarten WHERE kaartNr = ".$_GET['chkVerwijderen'.$N]);
          echo mysql_error();
                       }
}
          mysql_close($con);


?>

Acties:
  • 0 Henk 'm!

  • Hipska
  • Registratie: Mei 2008
  • Laatst online: 15-09 21:08
Misschien kan je nog eens kijken naar de php handleiding hoe een for lus nou weer moest: http://be2.php.net/manual/en/control-structures.for.php

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

PHP:
1
for($N; $_SESSION['aantalRijen']; $N++)

Endless loop. ;) Er is geen fatsoenlijke eindconditie die ooit gehaald wordt. En ik zou je aan willen raden om wat in te lezen over SQL Injection, want elke handige harry heeft met deze code complete toegang tot je database.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • mu-sick
  • Registratie: September 2005
  • Laatst online: 04-07-2024
<?php
session_start();

$N = 0;
$_SESSION['aantalRijen']--;

$con = mysql_connect("localhost","php","php");
mysql_select_db("ecard",$con);

for($N; $_SESSION['aantalRijen']; $N++){
if(isset($_GET['chkVerwijderen'.$N])){
mysql_query("DELETE FROM tbl_ecard_kaarten WHERE kaartNr = ".$_GET['chkVerwijderen'.$N]);
echo mysql_error();
}
}
mysql_close($con);


?>
Mist er geen quote aan het einde van de sql query?

code:
1
mysql_query('DELETE FROM tbl_ecard_kaarten WHERE kaartNr = ".$_GET['chkVerwijderen'.$N]');

Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 20-09 20:32
Maar goed dat er een timeout in PHP zit, anders zat je nu nog te wachten :P
(die timeout kun je ook uitzetten hoor, maar daar moet je dan wel een goeie reden voor hebben)

Ampera-e (60kWh) -> (66kWh)


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

  1. Waarom geen POST?
  2. Waarom geen array van input-elementen? Makkelijker te doorlopen.
  3. Waarom in 's hemelsnaam $_SESSION['aantalRijen']? Gebruik gewoon een variabele?
  4. SQL INJECTION. Wat als ik een checkbox post die als value "2 OR kaartNr LIKE '%%'" heeft?

[ Voor 46% gewijzigd door CodeCaster op 11-01-2010 14:23 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

5. Waarom geen normale topic titel? ( aangepast. )

Zoals hierboven aangegeven, aan de conditie om de loop te be-eindigen wordt nooit voldaan, dus blijf je continue in de loop zitten.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Sowieso hoef je maar 1 query uit te voeren als je gebruikt maakt van "IN". Overigens zou het handiger zijn als je gewoon een checkbox maakt op je invoerpagina waarin je vinkt (ik noem maar iets) welke je wilt verwijderen "delete[]" met als value het id. Dan kun je even die array valideren of het wel id's zijn (met bijv.ctype_digit) en je delete uitvoeren op je tabel.

Acties:
  • 0 Henk 'm!

Verwijderd

Buiten de VERPLICHTE KOST die voorgaande posters al medegedeeld hebben: ook is het netter dat je $n = 0 gebruikt in plaats van $N bij de initialisering van je count variabele in je for-loop, dus een waarde toekennen en camelCase je variabelen benoemen. Stel dat $N al eerder is gebruikt in een include die geeindigd is op 234!

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Nu online

MueR

Admin Tweakers Discord

is niet lief

Of iemand camelCase, hungarian notation of weet ik welke andere stijlen er nog meer zijn wil gebruiken moet ie natuurlijk helemaal zelf weten. Al geef ik toe dat ik me ook gruwelijk kan stukbijten op programmeerstijlen die niet ruwweg gelijk zijn aan die van mij.

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


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
MueR schreef op woensdag 20 januari 2010 @ 10:35:
Of iemand camelCase, hungarian notation of weet ik welke andere stijlen er nog meer zijn wil gebruiken moet ie natuurlijk helemaal zelf weten. Al geef ik toe dat ik me ook gruwelijk kan stukbijten op programmeerstijlen die niet ruwweg gelijk zijn aan die van mij.
Ik denk juist dat je programmeurs die duidelijk onervaren zijn best een beetje mag kneden wat betreft de standaard coding styles. Als niemand 't hem verteld gaat 'ie het nooit 'goed' doen.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op woensdag 20 januari 2010 @ 10:29:
ook is het netter dat je $n = 0 gebruikt in plaats van $N bij de initialisering van je count variabele in je for-loop
Er is sowieso geen enkele reden om überhaupt $N te gebruiken in het init-gedeelte van de for. Het is een expressie die niets doet, dus kun je 'm net zo goed weglaten.
dus een waarde toekennen en camelCase je variabelen benoemen
Gebruik gewoon een stijl die bij je (of het bedrijf) past. Veel belangrijker is het om consequent te zijn.
Stel dat $N al eerder is gebruikt in een include die geeindigd is op 234!
Nou kan dat hier niet, want er staat duidelijk $N = 0; bovenaan. Maar idd: initialiseer variabelen wanneer je ze nodig hebt. Niet een stukje initialisatie en dan wat code die niets met die variabelen doet. Dat maakt de code leesbaarder en vermindert de kans op bugs.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Wat betreft standaardisatie van code schrijven: je mag best eigenwijs zijn maar doe het dan wel consistent en schrijf nette code. Zoiets als een accolade altijd achter de regel of altijd aan het begin van de volgende: maakt me niks uit. Geen fatsoenlijk inspringende code en andere obfuscatiepogingen betekent een enkeltje glasbak.

Naar mijn mening schrijven de meeste PHP'ers camelCase en het is denk ik het beste dat je je daar aan houdt tenzij je met bestaande code te maken hebt. Ik volg altijd de platformspecifieke standaard in grote lijnen, in Java en C# iets meer dan in PHP wat toch altijd wat losser is geweest en geen echte overkoepelende organisatie kent.

[ Voor 8% gewijzigd door BikkelZ op 21-01-2010 11:42 ]

iOS developer

Pagina: 1