Errore PHP - Notice: Undefined index ...

Stato
Chiusa ad ulteriori risposte.

Sandav22051999

Nuovo Utente
3 Set 2020
4
0
1
Salve Ragazzi, Sono Nuovo nel Forum ho bisogno del Vostro Aiuto.
Ho Creato una Pagina in PHP con Conferma Email dalla Parte del login funziona tutto ma quando a gli utenti ci arriva la Pagina da confermare alla Propria Casella di Posta, la Pagina da i Seguenti Errori


PHP:
Notice: Undefined index: Email in D:\Software\Xampp\htdocs\confirm.php on line 2

Notice: Undefined index: Token in D:\Software\Xampp\htdocs\confirm.php on line 3
Non so come risolvere le ho provate tutte.
Spero che qualcuno qui e capace di risolvere questo problema e Aiutarmi
Grazie Mille in anticipo
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
PHP:
$array['email'] = 'valore';
Se chiami un array con chiave non definita ad esempio
PHP:
$array['inesistente']
il parser php ti avvisa che manca l'indice inesistente.
Su come risolvere, io suppongo riscrivere tutto penso ci siano troppo errori specialmente se ti sei appena avvicinato a php
 
Ultima modifica:

Sandav22051999

Nuovo Utente
3 Set 2020
4
0
1
$array['email'] = 'valore';
Se chiami un array con chiave non definita ad esempio $array['inesistente'] il parser php ti avvisa che manca l'indice inesistente.
Su come risolvere, io suppongo riscrivere tutto penso ci siano troppo errori specialmente se ti sei appena avvicinato a php
Ciao Hornus,
Allora ti mando il codice PHP cosi da potermi aiutare


PHP:
<?php
    $Email = $_GET['Email'];
    $Token = $_GET['Token'];

    $con = new mysqli('localhost', 'root', '', 'blackmegaitaly');

    $sql = $con->query("SELECT id FROM Utenti WHERE Email='$Email' AND Token='$Token' AND is_confirmed=0");
    if ($sql->num_rows > 0) {
        $con->query("UPDATE Utenti SET is_confirmed=1, Token='' WHERE Email='$Email'");
        echo 'Email address verified. You can <a href="http://sitespeck.com/register-login/login.php">login</a> now.';
    } else {
        echo 'Please <a href="http://sitespeck.com/register-login/login.php">login</a>';
    }
?>
Questo è il codice,
Allora di PHP ne so abbastanza, fatto sta che sono riuscito a fare il login con la registrazione e l'invio Email

Se mi puoi correggere gli errori mi daresti una Grande Mano
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.295
331
83

Hormus

Utente Attivo
26 Giu 2020
83
10
8
PHP:
<?php
if(isset($_GET['Email'], $_GET['Token'])) {
    $Email = $_GET['Email'];
    $Token = $_GET['Token'];

    $con = new mysqli('localhost', 'root', '', 'blackmegaitaly');

    $sql = $con->query("SELECT id FROM Utenti WHERE Email='$Email' AND Token='$Token' AND is_confirmed=0");
    if ($sql->num_rows > 0) {
        $con->query("UPDATE Utenti SET is_confirmed=1, Token='' WHERE Email='$Email'");
        echo 'Email address verified. You can <a href="http://sitespeck.com/register-login/login.php">login</a> now.';
    } else {
        echo 'Please <a href="http://sitespeck.com/register-login/login.php">login</a>';
    }
}
//Manca la query string nell'attributo href
?>
@Max1 come da regolamento ho modificato utilizzando il tag code ma comunque un semplice rigo non può e non deve mai considerarsi codice ma bensì una comunicazione diretta di cosa si sta sbagliando il tag code esiste per evidenziare la sintassi corretta ma su un rigo chiunque sarebbe in grado di capire il significato.
Ovviamente grazie per la segnalazione.
 

Sandav22051999

Nuovo Utente
3 Set 2020
4
0
1
PHP:
<?php
if(isset($_GET['Email'], $_GET['Token'])) {
    $Email = $_GET['Email'];
    $Token = $_GET['Token'];

    $con = new mysqli('localhost', 'root', '', 'blackmegaitaly');

    $sql = $con->query("SELECT id FROM Utenti WHERE Email='$Email' AND Token='$Token' AND is_confirmed=0");
    if ($sql->num_rows > 0) {
        $con->query("UPDATE Utenti SET is_confirmed=1, Token='' WHERE Email='$Email'");
        echo 'Email address verified. You can <a href="http://sitespeck.com/register-login/login.php">login</a> now.';
    } else {
        echo 'Please <a href="http://sitespeck.com/register-login/login.php">login</a>';
    }
}
//Manca la query string nell'attributo href
?>
@Max1 come da regolamento ho modificato utilizzando il tag code ma comunque un semplice rigo non può e non deve mai considerarsi codice ma bensì una comunicazione diretta di cosa si sta sbagliando.
Come Posso fare per riparare questo errore ? Riscrivere Tutto
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
Ti ho scritto la soluzione.
Adesso anche la spiegazione: dicasi query string i caratteri contenuti dal punto interrogativo http://[email protected]&Token=abc1234 ho anche applicato il percent enconding per la query string è urlencode mentre per le directory o comunque ad esclusione della query string è rawurlencode (in sintesi il carattere spazio bianco invece di essere + sarà %20). Le due funzioni citate esistono nel doc php net
 

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Partendo dal fatto che basterebbe intervenire in questo modo per ovviare ad errori:
PHP:
$Email = $_GET['Email']??'';
$Token = $_GET['Token']??'';
@Sandav22051999 NON SI UTILIZZANO MAI DATI IN GET PER OPERAZIONI DI VERIFICA E SCRITTURA SUL DB....


Utilizzando un pò di logica...
Il VERBO GET cosa fa??? Utilizzato per prelevare una risorsa...
Il VERBO PUT? Utilizzato per creare una risorsa o sovrascriverlo.
Il VERBO POST? Utilizzato per modificare e aggiornare una risorsa

Quindi come si DOVREBBERO passare i dati??? in POST...

Perchè?
Si da per scontato che la tupla insista sulla base dati, e di conseguenza, alterando lo stato della stessa, non può che essere utilizzato attraverso il verbo POST...

Specificato questo...

specialmente se ti sei appena avvicinato a php
Bhè, dai nessuno è perfetto, parliamo delle basi di comunicazione, quindi era DOVEROSO specificare il come passare i dati senza necessità di dover riscrivere il tutto...
 
  • Like
Reactions: MarcoGrazia

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.295
331
83
@Hormus
Niente polemiche!
Scrivi il codice con gli appositi tag e non ti preoccupare se è un rigo o di più!
Grazie
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
@macus_adi la stringa vuota non è la soluzione ma i due parametri sono obbligatori.. amplio il concetto altrimenti sembrerebbero parametri validi ma non lo sono altrimenti chi sarà il destinatario ma sono autenticato?
Beh puoi esprimere un concetto a chi è in grado di capire se non si studia è difficile comunicare con gergo tecnico. Il verbo HTTP è un gergo.
Per testare la propria capacità e volontà di apprendimento va bene scrivere codice (ma solo per un periodo limitato, poi occorre studiare e ovviamente si inizia dalle basi).
 

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
la stringa vuota non è la soluzione ma i due parametri sono obbligatori..
@Hormus manca la parte di validazione!!! è una soluzione per non andare in catch, questa fa parte delle basi di programmazione...

poi occorre studiare e ovviamente si inizia dalle basi
Ok, il forum è tecnico non è topolandia!!! Si spiega e si spronano gli utenti a fare meglio, no a fare peggio....

Il verbo HTTP
Non è un verbo ma un PROTOCOLLO!

Cmq, fa nulla... l'importante è capirsi...
 
Ultima modifica:

Hormus

Utente Attivo
26 Giu 2020
83
10
8
È anche un verbo se riferito per i metodi o più che altro il concetto di REST (poiché mi riferisco al metodo è sintatticamente corretto da scrivere anche se nomino il protocollo), questa frase è stata utilizzata in risposta dal gergo verbo GET da te menzionato.
Buona fortuna se sei di questo parere ma per me non si migliora copiando il codice occorre solo lo studio (altrimenti trova la soluzione , giustamente perché impegnarsi sul serio quando è tutto pronto).
Adesso per favore smettila di essere irrispettoso, il mio intervento non è mai stato un un'attacco verso i tuoi confronti.
Dimentichi che il codice illustrativo non è scritto correttamente, dunque se non esprimi il concetto di validazione e l'utente è appena arrivato al php può pensare che la stringa vuota sia valida ma oltretutto il parser php segnala l'errore nel caso di indice non definito va verificato inizialmente con isset.
Se hai altro da aggiungere vieni in privato non andiamo in off topic qui. Grazie.
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Stato
Chiusa ad ulteriori risposte.