View Full Version : [PHP] Notice: Undefined index
eresseie90
17-05-2019, 12:54
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
<?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, 19: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/reserved.variables.get.php
e cerca un qualsiasi esempio di utilizzo della funzione 'isset' sull'array GET in PHP.
eresseie90
18-05-2019, 23:35
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/reserved.variables.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, 10:01
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':
<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, 14:13
ma la prima volta che entri nella pagina come è definito GET['city']?
"Unable to find" appena entrato nella pagina
Volutomitra
19-05-2019, 19:00
"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, 20:42
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
Warning: file_get_contents(http://www.weather-forecast.com/locations/Milan/forecasts/latest) : failed to open stream: Unable to find the socket transport "ssl" - 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:
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)
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, 11:17
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
PHP Warning: file_get_contents(): Unable to find the wrapper "https" - 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
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/18643572/unable-to-find-the-wrapper-https-with-file-get-contents/43513546 (in fondo c'è un test per verificare che effettivamente sia attivo)
e prova anche qua: https://stackoverflow.com/questions/5444249/unable-to-find-the-wrapper-https-did-you-forget-to-enable-it-when-you-config
eresseie90
20-05-2019, 12:50
Risulta attivo con phpinfo()?
Hai dato un occhio a https://stackoverflow.com/questions/18643572/unable-to-find-the-wrapper-https-with-file-get-contents/43513546 (in fondo c'è un test per verificare che effettivamente sia attivo)
e prova anche qua: https://stackoverflow.com/questions/5444249/unable-to-find-the-wrapper-https-did-you-forget-to-enable-it-when-you-config
Ho trovato l'errore grazie al secondo link
Nel php.ini mi mancava questa stringa
extension_dir = "ext"
Il file php_openssl.dll è nella cartella xampp\php\ext
Grazie davvero :) :)
Ho trovato l'errore grazie al secondo link
Nel php.ini mi mancava questa stringa
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.
per php_openssl.dll avevo già riavviato il server di apache e risulta attivo
Quindi qua hai detto una bugia? ;)
eresseie90
20-05-2019, 13:40
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
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
PHP Warning: file_get_contents(): Unable to find the wrapper "https" - 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
non era una bugia :D :D :D
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
PHP Warning: file_get_contents(): Unable to find the wrapper "https" - 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, 06:21
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:
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, 16:54
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/language.operators.errorcontrol.php
Vabbè, lo dico. Però poi negherò di averlo fatto :p
https://www.php.net/manual/en/language.operators.errorcontrol.php
Ci credo, questo è proprio...brrrrr....
Il modo corretto è proprio quello di usare isset, dal tuo post avevo capito proprio il contrario...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.