PDA

Bekijk Volledige Versie : [perl] fout in MySQL statement?



Arjen Haayman
13/02/04, 11:35
Hallo,

Ik heb een probleem met een formulier dat er vreselijk lang over doet om
1 klein recordje in een MySQL database op te slaan (heb ik al eerder
over gepost).
Het is inmiddels verslechterd: het gebeurt regelmatig dat ik helemaal
geen respons meer krijg: als ik op de knop 'Opslaan' druk krijg ik
eerst een tijd een zandloper. Na een tijd verdwijnt deze, maar blijf ik
in het formulier en blijkt de wijziging helemaal niet te zijn
opgeslagen. Pas bij een tweede keer op 'Opslaan' drukken wordt de
wijziging opgeslagen.

Doe ik hier iets vreselijk fout of inefficient?

Ik heb hier wat delen van m'n code:

in 'reservering.pl' staat het volgende:

use CGI;
use Reservering;

my $query = new CGI;

sub opslaan()
{
my $reservering = new Reservering( $query);
my $error;

if( $error = $reservering->validatie())
{
[knip]
}
else
{
$reservering->opslaan();
print $query->redirect("?action=lijst");
}
}

in Reservering.pm:

sub opslaan()
{
my ($this) = @_;
my $reservering_id = $this->{reservering_id};

if( ! $reservering_id)
{
# nieuwe opvoeren
[knip]
}
else
{
my $sth = $dbh->prepare( "update reservering ".
"set naam=?,".
"email=?,".
"aantal=?,".
"voorstelling_id=?,".
"bevestigd=?".
" where reservering_id=?;"
) or die $dbh->errstr;
$sth->execute(
$this->{naam},
$this->{email},
$this->{aantal},
$this->{voorstelling_id},
$this->{bevestigd},
$this->{reservering_id}
) or die $sth->errstr;
$sth->finish();
}
}



--
Arjen Haayman
-- cogito ergo bicyclo --

henq
14/02/04, 10:45
"Arjen Haayman" <ahaayman@deadspam.com> schreef in bericht
news:c0i8tr$17q78u$1@ID-116065.news.uni-berlin.de...
> Hallo,
>
> Ik heb een probleem met een formulier dat er vreselijk lang over doet om
> 1 klein recordje in een MySQL database op te slaan (heb ik al eerder
> over gepost).
> Het is inmiddels verslechterd: het gebeurt regelmatig dat ik helemaal
> geen respons meer krijg: als ik op de knop 'Opslaan' druk krijg ik
> eerst een tijd een zandloper. Na een tijd verdwijnt deze, maar blijf ik
> in het formulier en blijkt de wijziging helemaal niet te zijn
> opgeslagen. Pas bij een tweede keer op 'Opslaan' drukken wordt de
> wijziging opgeslagen.
>
> Doe ik hier iets vreselijk fout of inefficient?
>
> Ik heb hier wat delen van m'n code:
>
> in 'reservering.pl' staat het volgende:
>
> use CGI;
> use Reservering;
>
> my $query = new CGI;
>
> sub opslaan()
> {
> my $reservering = new Reservering( $query);
> my $error;
>
> if( $error = $reservering->validatie())
> {
> [knip]
> }
> else
> {
> $reservering->opslaan();
> print $query->redirect("?action=lijst");
> }
> }
>
> in Reservering.pm:
>
> sub opslaan()
> {
> my ($this) = @_;
> my $reservering_id = $this->{reservering_id};
>
> if( ! $reservering_id)
> {
> # nieuwe opvoeren
> [knip]
> }
> else
> {
> my $sth = $dbh->prepare( "update reservering ".
> "set naam=?,".
> "email=?,".
> "aantal=?,".
> "voorstelling_id=?,".
> "bevestigd=?".
> " where reservering_id=?;"
> ) or die $dbh->errstr;
> $sth->execute(
> $this->{naam},
> $this->{email},
> $this->{aantal},
> $this->{voorstelling_id},
> $this->{bevestigd},
> $this->{reservering_id}
> ) or die $sth->errstr;
> $sth->finish();
> }
> }
>
>
>
> --
> Arjen Haayman
> -- cogito ergo bicyclo --
>


Ik zie zo gauw niets geks, maar een paar tips:
- kijk met top welke proces veel CPU krijgt (httpd, mysqld, perl,..)
- ik vind de redirect niet elegant. Waarom niet gewoon een antwoord pagina
ge'print' ? Bovendien, een redirect van een POST is officieel niet
toegestaan, dacht ik. Probeer 's zonder.
- ik heb in het verleden wel eens problemen gehad met de placeholders '?' in
de where-clause. (leek me bug in mysql). probeer eens met gewone
substitutie: " where reservering_id = " . $this->{reservering_id}

succes

~henq

Arjen Haayman
16/02/04, 09:45
> Ik zie zo gauw niets geks, maar een paar tips:
> - kijk met top welke proces veel CPU krijgt (httpd, mysqld, perl,..)
Volgens mij is de server helemaal 'nergens' mee bezig.

> - ik vind de redirect niet elegant. Waarom niet gewoon een antwoord pagina
> ge'print' ? Bovendien, een redirect van een POST is officieel niet
> toegestaan, dacht ik. Probeer 's zonder.


> - ik heb in het verleden wel eens problemen gehad met de placeholders '?' in
> de where-clause. (leek me bug in mysql). probeer eens met gewone
> substitutie: " where reservering_id = " . $this->{reservering_id}
Ga ik proberen.

Ik heb gisteren nog een ander formulier gemaakt, die niets met MySQL
doet, maar toch errug langzaam is. Het lijkt wel of elke POST traag
is, terwijl de GET's snel zijn (ook op de database).

Is er een manier om met de CGI-module aan te geven dat er geen output
meer komt (zoals bij ASP Response.End() )

Arjen Haayman
16/02/04, 10:05
> Ik zie zo gauw niets geks, maar een paar tips:
> - kijk met top welke proces veel CPU krijgt (httpd, mysqld, perl,..)
Volgens mij is de server helemaal 'nergens' mee bezig.

> - ik vind de redirect niet elegant. Waarom niet gewoon een antwoord pagina
> ge'print' ? Bovendien, een redirect van een POST is officieel niet
> toegestaan, dacht ik. Probeer 's zonder.


> - ik heb in het verleden wel eens problemen gehad met de placeholders '?' in
> de where-clause. (leek me bug in mysql). probeer eens met gewone
> substitutie: " where reservering_id = " . $this->{reservering_id}
Ga ik proberen.

Ik heb gisteren nog een ander formulier gemaakt, die niets met MySQL
doet, maar toch errug langzaam is. Het lijkt wel of elke POST traag
is, terwijl de GET's snel zijn (ook op de database).

Is er een manier om met de CGI-module aan te geven dat er geen output
meer komt (zoals bij ASP Response.End() )