PDA

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 &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:
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, 07:47
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 &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, 12:31
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 :) :)

Kaya
20-05-2019, 13:00
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 &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, 14:45
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 &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, 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:

Kaya
22-05-2019, 07:48
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

Kaya
23-05-2019, 07:35
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...