Newsgroup: it.comp.lang.perl
Titolo: Dove sbaglio?

Salve a tutti,
Uso il Perl 5 su Windows 95.
Ho appena installato il MySql. Uso un web server di pubblico dominio.
Il seguente script mi funziona se lo lancio da shell, ma non mi
funziona se lo chiamo da una pagina web:
--8<---
#!/usr/local/bin/perl
use DBI;
$dbh =
DBI->connect("DBI:mysql:database=prova;host=localhost",undef,undef);
$sth = $dbh->prepare("SELECT nome FROM tabella WHERE visibile='1'");
$sth->execute();
print "Content-type: text/html\n\n";
print "<html><head><title>Prova sql</title></head><body>\n\n";
while (@row = $sth->fetchrow_array)
{
  print "@row<BR>\n";
}
$dbh->disconnect;
print "</body></html>\n";
exit (0);
--8<---
Note:
Per creare la tabella di prova ho fatto:
- mysqladmin create prova;
- mysql -u root prova;
- create table tabella (nome char(20), visibile char(1));
- insert into tabella values ('mario', '1');
- insert into tabella values ('paolo', '0');
- select nome from tabella where visibile='1';
Tutto ok, mi mostra "mario".
Esco dal prompt sql e lancio a mano lo script perl: tutto ok, mi dà il
medesimo risultato.
Da cgi, invece, non funziona (errore 500). Il problema non sta nel web
server perché con altri script (che non usano l'sql) non ci sono
problemi.
Ho sbagliato qualcosa nello script?
Saluti,
Daniele Franza
<Isauricus>

 ICQ# 1980563

 Ho sbagliato qualcosa nello script?
A parte il suggerimento gia' datoti di verificare lo stato di errore di
tutte le operazioni, ritorno a suggerire la solita cosa: se devi provare dei
CGI, usa il modulo CGI.pm e provali dalla riga di comando.
In questo modo:
1) sei sicuro di aver risolto tutti i problemi del programma PRIMA di
  metterlo nel server, con il risultato di poter distinguere meglio tra
  problemi del server e tuoi (tu comunque sai gia' che il server funziona)
2) VEDI tu stesso quale output viene presentato al server, per cui VEDI
  anche gli eventuali messaggi del tuo programma che danno fastidio al server
Inoltre, se non erro, eventuali errori di Mysql dovrebbero apparire nel file
di log del server: verifica.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

"prepare" on an undefined value'.
Allora:
- execute() ritorna 1;
- $dbh ha valore "DBI::db=HASH(0x672bcc)";
- $sth ha valore "DBI::st=HASH(0x669e38)";
- In $DBI::err e $DBI::errstr non c'č niente.
Lo script continua a funzionare se lo lancio "a mano", e mi stampa la
pagina html corretta:
--8<---
C:\www\root\cgi-bin\prove>
provasql4.pl
Content-type: text/html
<html><head><title>Prova sql</title></head><body>
mario<BR>
</body></html>
C:\www\root\cgi-bin\prove>
--8<---
Da browser, invece, niente (errore 500).
Il server http funziona e ne sono sicurissimo (tutti gli script che
non usano DBI funzionano). Non so piů che pesci prendere :-(
Saluti,
Daniele Franza
<Isauricus>

 non usano DBI funzionano). Non so più che pesci prendere :-(
Problemi di path/environment/utente? 
Prova a mandare il content type 'text/plain' prima di qualsiasi altra cosa
(anche prima della connessione DBI) e vedere cosa ti appare sullo schermo.


 ICQ# 1980563
"Luoga prumna sakju im systol usij vekguojo."
(P. Labjoya, Ujm Tomua Gomnar, 12:3)

Problemi di path/environment/utente? 
Ho risolto!
Andava in timeout la connect perché non "trovava" l'host:
$dbh =
DBI->connect("DBI:mysql:database=prova;host=localhost",root,undef);
Ho allora messo l'IP e cosě funziona:
$dbh =
DBI->connect("DBI:mysql:database=prova;host=192.168.1.151",root,undef);
Non chiedetemi perché da shell va anche "localhost" mentre da browser
occorre l'IP.
Tutto č bene quel che finisce bene comunque... grazie a chi mi ha
aiutato :-)
Saluti,
Daniele Franza
<Isauricus>

che hai riportato?
Da shell.
Saluti,
Daniele Franza
<Isauricus>

 <Isauricus>


sparo la mia:
magari mancava host=
http://localhost
 ....
$dbh=DBI->connect("DBI:mysql:database=prova;host=
http://localhost
",root,undef);
per funzionare da browser ???
l'ho detta grossa ??
ciao,
Mattia