Pagina 1 di 2

passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun feb 21, 2011 11:43 am
da pivello in gondola
Salve a tutti!
Il problema è il seguente.
Ho creato alcuni siti in Aruba con php4 su server linux, contenenti database (MySQL) molto semplici.
Ho aggiornato php da 4 a 5 in locale e quando apro le pagine dinamiche con chiamate al db, il browser (Firefox) mi dà un messaggio di errore dicendo che le variabili non sono dichiarate.
Sottolineo che gli script sono molto semplici e che il tutto funziona perfettamente con php4.

Riporto di seguito il codice che non funziona:

Codice: Seleziona tutto
         <?
            $sezione = "contemp";
            $path_img = "immagini";
         if ($IDpsopere == ""){
            print "
            <p> ...testo...
            ";
            include ("mostra_immagini.php");
         }else{
            $IDpsopere = $IDpsopere;
            include ("mostra_opera.php");
         }
         ?>


Codice: Seleziona tutto
include ("mostra_immagini.php");
funziona
Codice: Seleziona tutto
include ("mostra_opera.php");
non funziona e mi dà l'errore

tratto di mostra_immagini.php:
Codice: Seleziona tutto
   $datiOpera = mysql_query("SELECT IDpsopere, titolo FROM psopere WHERE sezione='$sezione' AND pubblicato='si' ORDER BY IDpsopere ASC LIMIT 0,7") or die ("<b>Impossibile estrarre i dati dell'opera scelta. Server non attivo. Riprova pi˘ tardi.</b>");
   /*
    [0] IDpsopere
    [1] titolo
   */

   if (mysql_num_rows($datiOpera)!=0){
      while ($riga=mysql_fetch_array($datiOpera)){
         print "<td align='center' valign='top'>
         <a href='$file.php?IDpsopere=$riga[IDpsopere]&titolo=$riga[titolo]' target='_top'>
         <img src='$path_img/$riga[IDpsopere].jpg' alt='$riga[titolo]' title='$riga[titolo]' border=no></a>
         </td>";
      }
   }else{
      print"";
   }


tratto di mostra_opera.php:
Codice: Seleziona tutto
   while ($riga=mysql_fetch_array($datiOpera)){
      print "<div id='dati'>";
         print "<img src='$path_img/$riga[IDpsopere].jpg' title='$riga[titolo]' border=no><br /><br />";
         print "ID <span class='campo_dati'>$riga[IDpsopere]</span><br />";
         if ($riga[titolo]){
            print "titolo <span class='campo_dati'>$riga[titolo]</span><br />";
         }
         if ($riga[anno]){
            print "anno di realizzazione <span class='campo_dati'>$riga[anno]</span><br />";
         }
         if ($riga[tecnica]){
            print "tecnica <span class='campo_dati'>$riga[tecnica]</span><br />";
         }
         if ($riga[dimensioneB]){
            print "dimensioni (cm) <span class='campo_dati'>$riga[dimensioneB]</span>
            x
            <span class='campo_dati'>$riga[dimensioneH]</span>
            x
            <span class='campo_dati'>$riga[dimensioneZ]</span><br />";
         }
         if ($riga[peso]){
            print "peso (kg) <span class='campo_dati'>$riga[peso]</span><br />";
         }
         if ($riga[colore]){
            print "colore <span class='campo_dati'>$riga[colore]</span><br />";
         }
         if ($riga[descrizione]){
            print "descrizione <span class='campo_dati'>$riga[descrizione]</span><br /><br />";
         }
      print "</div>"; //fine div dati


Spero sia sufficiente ciò che ho riportato.

In attesa di qualche aiuto, ringrazio in anticipo.

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun feb 21, 2011 2:31 pm
da Andy94
Ciao.
Per una prossima volta, le questioni legate a PHP starebbero meglio nella sezione Sviluppo Web (ma grossomodo è lo stesso).

Detto questo, ti spiace riportare anche gli errori che ti vengono forniti? Penso che la variabile non dichiarata sia $IDpsopere, ma vorrei esserne certo.

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun feb 21, 2011 3:37 pm
da dararag
in effetti, probabilmente il fatto è che tu controlli il valore di una variabile a cui il valore non l'hai mai dato, neanche implicitamente [:)]
come fai ad avere un valore per quella variabile?

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun feb 21, 2011 8:44 pm
da pivello in gondola
Grazie per la tempestività.
In effetti IDpsopere la controllo senza averci dato un valore precedentemente. Faccio una prova e vi so dire.
Quello che mi chiedo è: in php4 funziona anche senza dare un valore alla var prima di controllarla. E' una novità di php5?

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: mar feb 22, 2011 10:41 am
da ilNotturno
Se non ricordo male (sono anni che non uo php4), usare una variabile senza verla inizializzata è uguale a fare una cosa del genere:

$var = "";
if($var....)

In php5 devono necessariamente essere definite perché un malintenzionato potrebbe ridefinire la variabile incriminata tramite $_GLOBAL e superare i tuoi controlli.

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: mar feb 22, 2011 2:55 pm
da Andy94
In effetti IDpsopere la controllo senza averci dato un valore precedentemente

È probabile che sia quella, infatti. [^]

La precisazione di ilNotturno è corretta, non credo che ci sia altro da dire.
Ti basterebbe anche piazzare
Codice: Seleziona tutto
$IDpsopere;

Prima dei controlli per essere a posto. Almeno la variabile, seppure NULL, è dichiarata.

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: mar feb 22, 2011 5:12 pm
da pivello in gondola
Ragazzi che team!
Grazie mille!

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: mar feb 22, 2011 6:15 pm
da Andy94
Hai risolto quindi?

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: mar feb 22, 2011 8:58 pm
da dararag
Che team [bleh]
apriamo il centro assistenza? [:D]
comunque, se ha funzionato, buon per te [^]

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: mar feb 22, 2011 9:09 pm
da ilNotturno
Mi chiedevo: visto che lavoro come webdesigner, se a qualcuno interessa potrei scrivere o postarvi gli articoli che reputo più interessanti... Sto iniziando a studiare un framework piuttosto noto, uscito da poco, e magari potrei aiutare qualcuno.

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: mar feb 22, 2011 9:57 pm
da Andy94
Liberissimo di farlo, e benvenuto: siamo sempre alla ricerca di nuove persone che scrivono.
Come regole generali, sappi solamente che quanto scriverai nel portale (accedendo direttamente alla pagina di scrittura con /nuovoarticolo) dovrà essere in esclusiva e non scopiazzato da altri siti web.

Per ogni chiarimento in merito all'attività editoriale ed al funzionamento del CMS non esitare a porci qualunque domanda nella sezione "Benvenuto in MegaLab.it", dove qualcuno dello Staff sarà subito pronto a risponderti! [^]

[ciao]

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 9:20 am
da pivello in gondola
dararag ha scritto:comunque, se ha funzionato, buon per te [^]


Invece no [V] (e scusate se non mi sono più fatto vivo).

Il punto è che online con PHP 5.2.17 funziona (http://www.paoloscarpa.it), mentre in locale con PHP 5.3.2 no.

In locale ho installato MAMP (ho un iMac). La connessione al db funziona per la pagina mostra_immagini.php ma non per la pagina mostra_opera.php.
Non so più dove andare a guardare [boh].

Vi chiedo nuovamente e umilmente aiuto.

grazie mille

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 12:22 pm
da pivello in gondola
non posso mettere $IDpsopere prima di questo codice:
Codice: Seleziona tutto
         <?
            $sezione = "contemp";
            $path_img = "immagini";
         if ($IDpsopere == ""){
            print "
            <p> ...testo...
            ";
            include ("mostra_immagini.php");
         }else{
            $IDpsopere = $IDpsopere;
            include ("mostra_opera.php");
         }
         ?>

perché altrimenti me lo dà sempre NULL; invece la prima volta che accedo al file contemporanea.php dev'essere NULL, ma poi ha un valore dato da:

Codice: Seleziona tutto
      while ($riga=mysql_fetch_array($datiOpera)){
         print "<td align='center' valign='top'>
         [color=#00FF00]<a href='$file.php?IDpsopere=$riga[IDpsopere]&titolo=$riga[titolo][/color]' target='_top'>
         <img src='$path_img/$riga[IDpsopere].jpg' alt='$riga[titolo]' title='$riga[titolo]' border=no></a>
         </td>";

del file mostra_immagini.php che è incluso in contemporanea.php.

[b]Cerco di spiegarmi meglio.[/b]
Il file principale è contemporanea.php nel quale ci sono due include:
- il primo (mostra_immagini.php), che viene caricato se $IDpsopere è NULL, presenta le miniature
- il secondo (mostra_opera.php), che viene caricato se $IDpsopere è diverso da NULL, presenta gli ingrandimenti della miniatura cliccata

Quindi, quando accedo a contemporanea.php la prima volta, $IDpsopere è NULL e consente l'apertura di mostra_immagini.php con le miniature.
Quandi vi accedo la seconda volta, $IDpsopere ha valore diverso da NULL e consente l'apertura di mostra_opera.php con gli ingrandimenti della miniatura cliccata.

Sottolineo che online (Aruba con PHP 5.2.17 http://www.paoloscarpa.it/) tutto funziona, mentre in locale ( con PHP 5.3.2) no.
Se fosse un problema di parametri del db non si aprirebbe nemmeno mostra_immagini.php.
Se al'inizio di mostra_opera.php inserisco un valore per $IDpsopere, il file viene chiamato e mostra i dati corretti. Se invece lo chiamo tramite il link di mostra_immagini.php, rimane la schermata di quest'ultimo, come se non venisse passato il valore di $IDpsopere.

non so che pesci pigliare

ringrazio per ogni suggerimento

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 1:20 pm
da Andy94
Non ho capito proprio bene quello che intendi, ti chiedo di scusarmi [^]
Potresti postare un screenshot degli errori rilevati in locale, cortesemente?

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 2:57 pm
da pivello in gondola
http://www.retesonora.net/screen-01.jpg
http://www.retesonora.net/screen-02.jpg
http://www.retesonora.net/screen-03.jpg

se non è sufficiente, sono qui

grazie

PS se vuoi ti posto il link ad una cartella zip coi php

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 3:13 pm
da pivello in gondola

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 3:45 pm
da pivello in gondola
Sto provando vari siti e con nessuno riesco ad entrare al secondo livello di db.
Esempio: ho tre files: A, B e C.
Il file A linka al file B passandogli il valore della variabile x.
Il file B visualizza correttamente la chiamata al db secondo il valore di x.
Il file B linka al file C passandogli il valore della var y.
Il file C NON visualizza il risultato della chiamata al db secondo il valore di y.

Questo accade con tutti i siti che provo in locale, mentre funzionano online.

Che sia un'impostazione di MySql? E se sì, quale?

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 4:08 pm
da Andy94
Hai fatto un buon lavoro nel riportarmi le immagini, ma non era quello che avevo chiesto.
Ciò che voglio capire è se PHP dà errori (fatal, notice, parse, ecc).

Per farlo, devi controllare la direttiva ERROR_REPORTING nel file php.ini nella directory di PHP.
Tieni altresì conto che alcune cose sono cambiate da PHP 5.2 alla versione 5.3: è probabile che si riscontrino errori come questi, bisogna investigare e capire dove il codice causa queste anomalie.

MODIFICA:
Mi rendo conto di una cosa però... La variabile IDpsopere fa parte della querystring: tu non la prendi mai con $_GET...

Il suo valore lo devi controllare con $_GET['IDpsopere'], e di conseguenza se non è presente nell'url non sarà settata (controlla con la funzione isset(var)), altrimenti sarà isset e avrà un valore.

[ciao]

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 4:47 pm
da pivello in gondola
Ti ringrazio moltissimo per la risposta.

- ERROR_REPORTING riporta 30719 (e non so che significa)

- per il resto capisco circa 1/3 di quello che mi scrivi. Provo a studiarmi $_GET e vedo che succede

- ho provato col PHP 5.2.13 su MAMP, ma senza successo

[grazie] [grazie]

Re: passaggio da php4 a php5: variabili non dichiarate

MessaggioInviato: lun apr 18, 2011 4:59 pm
da Andy94
Il discorso è questo: se tu devi prendere delle informazioni dalla querystring (parte dell'URL, nel tuo caso IDpsopere), non hai altro modo se non con $_GET.

Quando devi controllare qual è l'ID dell'opera selezionata, devi per forza recuperarlo con $_GET['IDpsopere'], che ti restituisce NULL se non c'è niente (usa la funzione isset($_GET['IDpsopere']) che torna false in quel caso) e quindi vuol dire che non è nemmeno scritto nell'indirizzo. Altrimenti, ti ritorna il numero dell'opera che hai selezionato, da usare anche nelle query al database.