• User

    codice reindirizzamento non corretto

    Ciao a tutti!

    Qualcuno riuscirebbe a capire il perchè non reindirizza in modo giusto quando uno inserisce dei valori che non esistono nel dataase?(in particolare non funziona l'ultimo if...) grazie mille!!
    :arrabbiato: :arrabbiato:

    $editFormAction = $_SERVER['PHP_SELF'];
    if (isset($_SERVER['QUERY_STRING'])) {
    $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
    }
    if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
    if ($_POST['password'] != $_POST['conferma_password']) {
    echo "<font face=$font size=$size>ERRORE!La modifica non è andata a buon fine perchè le due password correnti che hai inserito non coincidono!Inserisci nuovamente i tuoi dati premendo il tasto indietro del tuo browser!</font>";
    echo (!$editFormAction);
    }
    else if ($_POST['email'] != $_POST['conferma_email']) {
    echo "<font face=$font size=$size>ERRORE!La modifica non è andata a buon fine perchè le due email che hai inserito non coincidono!Inserisci nuovamente i tuoi dati premendo il tasto indietro del tuo browser!</font>";
    echo (!$editFormAction);
    }
    else if ($_POST['password1'] != $_POST['conferma_password1']) {
    echo "<font face=$font size=$size>ERRORE!La modifica non è andata a buon fine perchè le due nuove password che hai inserito non coincidono!Inserisci nuovamente i tuoi dati premendo il tasto indietro del tuo browser!</font>";
    echo (!$editFormAction);
    }
    else {

    $updateSQL = sprintf("UPDATE iscritti SET password=%s WHERE username=%s AND password=%s AND email=%s",
    GetSQLValueString($_POST['password1'], "text"),
    GetSQLValueString($_POST['username'], "text"),
    GetSQLValueString($_POST['password'], "text"),
    GetSQLValueString($_POST['email'], "text"));
    mysql_select_db($database_database_iscritti, $database_iscritti);
    $Result1 = mysql_query($updateSQL, $database_iscritti) or die(mysql_error());

    $updateGoTo = "home page.php";
    $erroreGoTo = "errore_modifica.php";
    if (isset ($_SERVER['QUERY_STRING']) && $Result1) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
    header(sprintf("Location: %s", $updateGoTo));
    }
    else {
    $erroreGoTo .= (strpos($erroreGoTo, '?')) ? "&" : "?";
    header(sprintf("Location: %s", $erroreGoTo));
    }
    }
    }


  • User

    La funzione header deve essere usata prima di qualsiasi output (nota anche un carattere di invio dà problemi), quindi se ho ben capito mandi un messaggio di errore e reindirizzi automaticamente la pagina, ma la funzione header và in errore. E' così?


  • User

    @sten said:

    La funzione header deve essere usata prima di qualsiasi output (nota anche un carattere di invio dà problemi), quindi se ho ben capito mandi un messaggio di errore e reindirizzi automaticamente la pagina, ma la funzione header và in errore. E' così?

    Ciao Sten!

    no no non viene fuori nessun errore!Il problema è che, a prescindere da quella che è la condizione dell'ultimo if, avviene sempre il reindirizzamento come se le condizioni fossero rispettate..
    :arrabbiato:


  • User

    Vediamo... quando il database non trova i dati viene richiamata la funzione die(). Puoi provare a mettere la funzione header() lì dentro?


  • User

    @sten said:

    Vediamo... quando il database non trova i dati viene richiamata la funzione die(). Puoi provare a mettere la funzione header() lì dentro?

    non va.......fa sempre la stessa cosa, come prima...


  • User

    if (isset ($_SERVER['QUERY_STRING']) && $Result1) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
    header(sprintf("Location: %s", $updateGoTo));
    }
    else {
    $erroreGoTo .= (strpos($erroreGoTo, '?')) ? "&" : "?";
    header(sprintf("Location: %s", $erroreGoTo));
    }

    UGH!

    Tu parli di questo blocco di codice, giusto? Che valore ha $Result1? Non è che invece di testare il valore della variabile, stai testando solamente il fatto che questa variabile esiste?


  • User

    @sten said:

    UGH!

    Tu parli di questo blocco di codice, giusto? Che valore ha $Result1? Non è che invece di testare il valore della variabile, stai testando solamente il fatto che questa variabile esiste?

    $Result1 = mysql_query($updateSQL, $database_iscritti) or die(mysql_error());


  • User

    @sten said:

    UGH!

    Tu parli di questo blocco di codice, giusto? Che valore ha $Result1? Non è che invece di testare il valore della variabile, stai testando solamente il fatto che questa variabile esiste?

    Se gli passo il valore invece va sempre nell'else..............anche quando inserisco tutto giusto..........:x :arrabbiato: :arrabbiato: :arrabbiato: :arrabbiato: :arrabbiato: :arrabbiato: :arrabbiato: :arrabbiato:


  • User

    Ok, quello che voglio sapere, è il valore che assume $Result1 in caso di estrazione di dati corretta o nel caso di fallimento della stessa: scrivi echo $Result1 dopo la riga " $Result1 = mysql_query($updateSQL, $database_iscritti) or die(mysql_error());". Prova a vedere che valore ha, poi nell'istruzione if fai un paragone esplicito tra $Result1 e il valore della variabile. Te lo dico perchè mi sembra che scrivere if($variabile) significhi solo controllare se la variabile esiste ed è stata valorizzata (che nel tuo caso avviene comunque) e non se ha un certo valore o no.


  • User

    @sten said:

    Ok, quello che voglio sapere, è il valore che assume $Result1 in caso di estrazione di dati corretta o nel caso di fallimento della stessa: scrivi echo $Result1 dopo la riga " $Result1 = mysql_query($updateSQL, $database_iscritti) or die(mysql_error());". Prova a vedere che valore ha, poi nell'istruzione if fai un paragone esplicito tra $Result1 e il valore della variabile. Te lo dico perchè mi sembra che scrivere if($variabile) significhi solo controllare se la variabile esiste ed è stata valorizzata (che nel tuo caso avviene comunque) e non se ha un certo valore o no.

    mi dà il valore 1...metto la condizione e non va...................


  • User

    Ti dà valore 1 se la query ha avuto successo, ma se il risultato è nullo che valore ti dà?


  • User

    domanda scema: tu scrivi if($Result1 == 1) vero?


  • User

    @sten said:

    domanda scema: tu scrivi if($Result1 == 1) vero?

    Si lo scrivo così, il problema è che però il valore è sempre 1 anche se il database non viene aggiornato...


  • User

    @marco1981 said:

    Si lo scrivo così, il problema è che però il valore è sempre 1 anche se il database non viene aggiornato...

    Il problema è che comunque scrive nel database e quindi il risultato sarà sempre 1 per $Result1..
    Secondo me potrebbe essere necessario un controllo sull'esistenza di queste variabili nel database..ma come faccio??


  • User

    Scusa non ho capito, ci sono altri campi oltre a quelli che mi hai detto?
    Controllare l'esistenza di variabili equivale a fare una select sul singolo campo, il risultato lo usi per stabilire il reindirizzamento.

    Altra cosa: hai provato la funzione mysql_**db_**query()? si comporta in modo leggermente diverso:
    http://it.php.net/manual/it/function.mysql-db-query.php

    Poi c'è mysql_affected_rows() che ti dà il numero esatto di righe modificate:
    http://it.php.net/manual/it/function.mysql-affected-rows.php

    Infine darei anche un'occhiata alla precedenza degli operatori logici, in pratica riscriverei l'IF in questa maniera:

    if ( (isset ($_SERVER['QUERY_STRING'])) && ($Result1==1) )

    Forse php lo digerisce meglio....


  • User

    @sten said:

    Scusa non ho capito, ci sono altri campi oltre a quelli che mi hai detto?
    Controllare l'esistenza di variabili equivale a fare una select sul singolo campo, il risultato lo usi per stabilire il reindirizzamento.

    Altra cosa: hai provato la funzione mysql_**db_**query()? si comporta in modo leggermente diverso:
    http://it.php.net/manual/it/function.mysql-db-query.php

    Poi c'è mysql_affected_rows() che ti dà il numero esatto di righe modificate:
    http://it.php.net/manual/it/function.mysql-affected-rows.php

    Infine darei anche un'occhiata alla precedenza degli operatori logici, in pratica riscriverei l'IF in questa maniera:

    if ( (isset ($_SERVER['QUERY_STRING'])) && ($Result1==1) )

    Forse php lo digerisce meglio....

    Ciao Sten,

    grazie mille ma ho risolto finalmente...
    ho fatto prima di tutto una query al database nella quale venissero cercati nella tabella i valori del determinato utente. In seguito faccio estrarre i valori dalla tabella e li faccio scrivere in un vettore. Nel caso in cui ai valori forniti dall'utente viene associata una riga della tabella, allora il vettore si riempie, altrimenti (nel caso in cui l'utente sbagli ad inserire i valori con cui si è registrato) crea un vettore vuoto.
    In seguito ho indirizzato i reindirizzamenti con le condizioni di vuoto o pieno dell'array e finalmente funziona tutto correttamente. Il problema a usare le condizioni sulla variabile $result è dovuto al fatto che questa associa 1 sempre in quanto la query la esegue sempre senza feedback sul fatto che abbia o meno modificato una riga esistente a database..In sostanza così non c'è modo di capire se effettivamente ha modificato il valore della password in quanto non si riesce ad avere un controllo sul fatto che abbia trovato una riga della tabella che matcha o meno...
    Grazie mille per il tempo che mi hai dedicato!!

    :ciauz: :ciauz: