Hardware Upgrade Forum

Hardware Upgrade Forum (https://www.hwupgrade.it/forum/index.php)
-   Programmazione (https://www.hwupgrade.it/forum/forumdisplay.php?f=38)
-   -   [PHP] Notice: Undefined index (https://www.hwupgrade.it/forum/showthread.php?t=2884376)


eresseie90 17-05-2019 13:54

[PHP] Notice: Undefined index
 
Ciao a tutti, sto seguendo un corso online ma non riesco ad uscirne.. mi esce questo errore:
Notice: Undefined index: city in C:\xampp\htdocs\Weather\index.php on line 3

Codice:

<?php

if ($_GET['city']) {
       
        $forecastPage = file_get_contents("https://www.weather-forecast.com/locations/Milan/forecasts/latest");
        echo $forecastPage;
       
}

?>

<html lang="it">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <title>Weather Screper</title>
          <style type="text/css">
                               
                html { 
  background: url(background.jpg) no-repeat center center fixed;
  -webkit-background-size: cover;
  -moz-background-size: cover;
  -o-background-size: cover;
  background-size: cover;
                }

body {
        background:none;       
}
.conteiner{
       
       
        text-align: center;
        margin-top:280px;
        color:white;
        text-shadow: 2px 2px 4px black;

        }
       
.form-control{
        width:500px;
        text-align: center;
        display: inline-block;
}

</style>

</head>
  <body>
    <div class="conteiner">
<h1>Che tempo fa?</h1>
<form>
<fieldset class="form-group-">
<label for="city">Inserisci il nome della città</label><br>
<input type="text" class="form-control" name="city" id="city" placeholder="inserisci la città">
</fieldset><br>
<button type="submit" class="btn btn-primary">Invia</button>
</form>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
  </body>
</html>

La cosa divertente è che mi sembra uguale a quello che ha fatto il corso.. c'è qualche cosa che mi sfugge?

Volutomitra 18-05-2019 20:15

Se la variabile di indice 'city' non è definita in GET è ovvio che ti venga segnalato l'errore. Non so che corso sia, ma se il tuo codice è uguale c'è qualcosa che non va. :D

Comunque, per verificare se una variabile esiste vedi questo:

https://www.php.net/manual/en/reserv...iables.get.php

e cerca un qualsiasi esempio di utilizzo della funzione 'isset' sull'array GET in PHP.

eresseie90 19-05-2019 00:35

Quote:

Originariamente inviato da Volutomitra (Messaggio 46222790)
Se la variabile di indice 'city' non è definita in GET è ovvio che ti venga segnalato l'errore. Non so che corso sia, ma se il tuo codice è uguale c'è qualcosa che non va. :D

Comunque, per verificare se una variabile esiste vedi questo:

https://www.php.net/manual/en/reserv...iables.get.php

e cerca un qualsiasi esempio di utilizzo della funzione 'isset' sull'array GET in PHP.

Scusa ma quel city non lo va a prendere dal "name" del form? :muro: :muro: :muro: almeno così ho capito da quanto ha spiegato (ps: e dal video sembra che a lui funzioni il comando... magari mi è sfuggito qualcosa nel file php.ini

Volutomitra 19-05-2019 11:01

Quote:

Originariamente inviato da eresseie90 (Messaggio 46223001)
Scusa ma quel city non lo va a prendere dal "name" del form? :muro: :muro: :muro: almeno così ho capito da quanto ha spiegato (ps: e dal video sembra che a lui funzioni il comando... magari mi è sfuggito qualcosa nel file php.ini

Certo. Ma lo prende dopo che hai inviato il form cliccando sul pulsante 'Invia':

Codice:

<form>
...
<button type="submit" class="btn btn-primary">Invia</button>
</form>

ma la prima volta che entri nella pagina come è definito GET['city']?

eresseie90 19-05-2019 15:13

Quote:

Originariamente inviato da Volutomitra (Messaggio 46223233)
ma la prima volta che entri nella pagina come è definito GET['city']?

"Unable to find" appena entrato nella pagina

Volutomitra 19-05-2019 20:00

Quote:

Originariamente inviato da eresseie90 (Messaggio 46223583)
"Unable to find" appena entrato nella pagina

Appunto. Non lo trova perché non è definito. E per verificare se è definito si usa la 'isset'. Mi sembra semplice, no? :D

eresseie90 19-05-2019 21:42

Quote:

Originariamente inviato da Volutomitra (Messaggio 46223961)
Appunto. Non lo trova perché non è definito. E per verificare se è definito si usa la 'isset'. Mi sembra semplice, no? :D

Semplice grazie e ancora una cosa :D :D :D :D (non mandarmi a quel paese)
Ora mi indica
Quote:

Warning: file_get_contents(http://www.weather-forecast.com/loca...recasts/latest) : failed to open stream: Unable to find the socket transport &quot;ssl&quot; - did you forget to enable it when you configured PHP? in C:\xampp\htdocs\Weather\index.php on line 5
Cercando in rete indicano di rimuovere il punto e virgola da questa espressione

extension=php_openssl.dll

L'avevo già fatto ma il problema rimane :mc: :mc:

Modifica: e se aggiungessi la "s" in http mi darebbe un errore aggiuntivo:
Quote:

failed to open stream: No such file or directory in C:\xampp\htdocs\Weather\index.php on line 5
(ho provato anche con il sito del meteo.it ma nulla)

Kaya 20-05-2019 08:47

Quote:

Originariamente inviato da eresseie90 (Messaggio 46224073)
Semplice grazie e ancora una cosa :D :D :D :D (non mandarmi a quel paese)
Ora mi indica


Cercando in rete indicano di rimuovere il punto e virgola da questa espressione

extension=php_openssl.dll

L'avevo già fatto ma il problema rimane :mc: :mc:

Modifica: e se aggiungessi la "s" in http mi darebbe un errore aggiuntivo:


(ho provato anche con il sito del meteo.it ma nulla)

Siccome anche se togli la 's' il sito ti ridirige verso l'https la cosa NON può funzionare.

Dopo aver attivato il modulo php_openss.dll hai riavviato il server apache?
hai fatto un phpinfo() per verificare che effettivamente il modulo si sia caricato?
I log di apache dicono qualcosa in merito?

eresseie90 20-05-2019 12:17

Quote:

Originariamente inviato da Kaya (Messaggio 46224367)
Siccome anche se togli la 's' il sito ti ridirige verso l'https la cosa NON può funzionare.

Dopo aver attivato il modulo php_openssl.dll hai riavviato il server apache?
hai fatto un phpinfo() per verificare che effettivamente il modulo si sia caricato?
I log di apache dicono qualcosa in merito?

per php_openssl.dll avevo già riavviato il server di apache e risulta attivo
nei file log non risulta niente di strano a parte l'errore che ho descritto nel messaggio precedente

Quote:

PHP Warning: file_get_contents(): Unable to find the wrapper &quot;https&quot; - did you forget to enable it when you configured PHP? in C:\\xampp\\htdocs\\Weather\\index.php on line 5

PHP Warning: file_get_contents(https://www.ilmeteo.it/meteo/Milano): failed to open stream: No such file or directory in C:\\xampp\\htdocs\\Weather\\index.php on line 5
EDIT:
ps: la pagina è composta solo dal codice che ho messo all'inizio del topic

Kaya 20-05-2019 13:31

Quote:

Originariamente inviato da eresseie90 (Messaggio 46224845)
per php_openssl.dll avevo già riavviato il server di apache e risulta attivo
nei file log non risulta niente di strano a parte l'errore che ho descritto nel messaggio precedente



EDIT:
ps: la pagina è composta solo dal codice che ho messo all'inizio del topic

Risulta attivo con phpinfo()?
Hai dato un occhio a https://stackoverflow.com/questions/...tents/43513546 (in fondo c'è un test per verificare che effettivamente sia attivo)
e prova anche qua: https://stackoverflow.com/questions/...hen-you-config

eresseie90 20-05-2019 13:50

Quote:

Originariamente inviato da Kaya (Messaggio 46225037)
Risulta attivo con phpinfo()?
Hai dato un occhio a https://stackoverflow.com/questions/...tents/43513546 (in fondo c'è un test per verificare che effettivamente sia attivo)
e prova anche qua: https://stackoverflow.com/questions/...hen-you-config

Ho trovato l'errore grazie al secondo link

Nel php.ini mi mancava questa stringa

Codice:

extension_dir = "ext"
Il file php_openssl.dll è nella cartella xampp\php\ext

Grazie davvero :) :)

Kaya 20-05-2019 14:00

Quote:

Originariamente inviato da eresseie90 (Messaggio 46225087)
Ho trovato l'errore grazie al secondo link

Nel php.ini mi mancava questa stringa

Codice:

extension_dir = "ext"
Il file php_openssl.dll è nella cartella xampp\php\ext

Grazie davvero :) :)

Onestamente però mi sembra strano che nel log di apache o pho non ci fosse l'errore che diceva di non aver trovato la libreria.

Quote:

per php_openssl.dll avevo già riavviato il server di apache e risulta attivo
Quindi qua hai detto una bugia? ;)

eresseie90 20-05-2019 14:40

Quote:

Originariamente inviato da Kaya (Messaggio 46225117)
Onestamente però mi sembra strano che nel log di apache o pho non ci fosse l'errore che diceva di non aver trovato la libreria.


Quindi qua hai detto una bugia? ;)

non era una bugia :D :D :D
Codice:

OPENSSL_CONF        C:/xampp/apache/bin/openssl.cnf
SERVER_SIGNATURE        <address>Apache/2.4.39 (Win64) OpenSSL/1.0.2r PHP/7.1.28 Server at localhost Port 80</address>
SERVER_SOFTWARE        Apache/2.4.39 (Win64) OpenSSL/1.0.2r PHP/7.1.28

o non sono capace di leggere il phpinfo() :doh:
e gli errori che ho indicato erano solo
Codice:

PHP Warning: file_get_contents(): Unable to find the wrapper &quot;https&quot; - did you forget to enable it when you configured PHP? in C:\\xampp\\htdocs\\Weather\\index.php on line 5

PHP Warning: file_get_contents(https://www.ilmeteo.it/meteo/Milano): failed to open stream: No such file or directory in C:\\xampp\\htdocs\\Weather\\index.php on line 5

Nel log :rolleyes: :rolleyes:

Dire bugie per risolvere un problema sarebbe controproduttivo :Prrr: :Prrr: :Prrr:

Ad ogni modo grazie per avermi aiutato a risolvere

Kaya 20-05-2019 15:45

Quote:

Originariamente inviato da eresseie90 (Messaggio 46225220)
non era una bugia :D :D :D
Codice:

OPENSSL_CONF        C:/xampp/apache/bin/openssl.cnf
SERVER_SIGNATURE        <address>Apache/2.4.39 (Win64) OpenSSL/1.0.2r PHP/7.1.28 Server at localhost Port 80</address>
SERVER_SOFTWARE        Apache/2.4.39 (Win64) OpenSSL/1.0.2r PHP/7.1.28

o non sono capace di leggere il phpinfo() :doh:
e gli errori che ho indicato erano solo
Codice:

PHP Warning: file_get_contents(): Unable to find the wrapper &quot;https&quot; - did you forget to enable it when you configured PHP? in C:\\xampp\\htdocs\\Weather\\index.php on line 5

PHP Warning: file_get_contents(https://www.ilmeteo.it/meteo/Milano): failed to open stream: No such file or directory in C:\\xampp\\htdocs\\Weather\\index.php on line 5

Nel log :rolleyes: :rolleyes:

Dire bugie per risolvere un problema sarebbe controproduttivo :Prrr: :Prrr: :Prrr:

Ad ogni modo grazie per avermi aiutato a risolvere

Allora io se faccio un phpinfo ottengo:
OpenSSL support enabled
OpenSSL Library Version OpenSSL 1.1.0g 2 Nov 2017
OpenSSL Header Version OpenSSL 1.1.0g 2 Nov 2017
Openssl default config /usr/lib/ssl/openssl.cnf

che mi pare un pelo diverso dal tuo.
Anche perchè lì indica la configurazione (OPENSSL_CONF C:/xampp/apache/bin/openssl.cnf)
ma non dice se è o meno ENABLED

Per scrupolo ho provato ad attivare una libreria che NON HO e ottengo nei log " ...cannot open shared object file: No ..." come mi aspettavo.
Dovrei per scrupolo capire come lavora XAMPP ma non ho una macchina windows su cui testare.

Buono comunque tu abbia risolto: pro futuro suggerisco caldamente la migrazione sotto linux!

Volutomitra 21-05-2019 07:21

Quote:

Originariamente inviato da Kaya (Messaggio 46225358)
pro futuro suggerisco caldamente la migrazione sotto linux!

Mi aggiungo calorosamente al consiglio! ;)

E faccio una nota a margine: il problema principale (la mancata definizione di GET['city']) in realtà si poteva risolvere anche senza usare la 'isset'. Ma dato che è un metodo barbaro non l'ho detto e non lo dirò :fagiano: E' troppo importante imparare a usare le cose fatte bene piuttosto che metodi veloci ma pericolosi :doh:

Kaya 22-05-2019 08:48

Quote:

Originariamente inviato da Volutomitra (Messaggio 46226252)
Mi aggiungo calorosamente al consiglio! ;)

E faccio una nota a margine: il problema principale (la mancata definizione di GET['city']) in realtà si poteva risolvere anche senza usare la 'isset'. Ma dato che è un metodo barbaro non l'ho detto e non lo dirò :fagiano: E' troppo importante imparare a usare le cose fatte bene piuttosto che metodi veloci ma pericolosi :doh:

Vado un po OT per comprendere di più: cosa useresti al posto di isset per valutare se la variabile è impostata? empty?

Volutomitra 22-05-2019 17:54

Quote:

Originariamente inviato da Kaya (Messaggio 46228448)
Vado un po OT per comprendere di più: cosa useresti al posto di isset per valutare se la variabile è impostata? empty?

Vabbè, lo dico. Però poi negherò di averlo fatto :p

https://www.php.net/manual/en/langua...rorcontrol.php

Kaya 23-05-2019 08:35

Quote:

Originariamente inviato da Volutomitra (Messaggio 46229568)
Vabbè, lo dico. Però poi negherò di averlo fatto :p

https://www.php.net/manual/en/langua...rorcontrol.php

Ci credo, questo è proprio...brrrrr....

Il modo corretto è proprio quello di usare isset, dal tuo post avevo capito proprio il contrario...


Tutti gli orari sono GMT +1. Ora sono le: 08:05.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.