• User

    Aggiornare un campo in mysql

    Salute a tutti e, visto che ormai ci siamo, buon Natale.
    Vorrei chiedervi come fare per aggiornare un valore in una tabella mysql per l'iscrizione utente.
    Cerco di spiegarmi.
    Nel modulo iscrizione faccio inserire username e password ma (per scoraggiare i "buontemponi") registro solo l'username e chiedo conferma dell'iscrizione con una email.
    Nella conferma l'utente reinserisce username e password e vorrei a questo punto registrare nel database anche la password.
    Il problema è che vengono aggiornate le password di tutti gli iscritti e non solo quella dell'ID corrente.
    Vi mostro il codice php e vi ringrazio per l'aiuto
    ciao

    [php]
    session_start();

    if( isset($_POST['submit']) && (trim($_POST['submit']) == "Conferma") )
    {
    // controllo il formato dell'username
    if((!isset($_POST['username'])) || ($_POST['username'] == "") ) //da reinserire prima dell'ultima tonda|| (!preg_match("/^[a-z0-9]+$/i", $_POST['username']))
    {
    echo "Attenzione, username non corretta.";
    }

    // controllo sul formato della password
    elseif((!isset($_POST['password'])) || ($_POST['password'] == "") || (!preg_match("/^[a-z0-9]+$/i", $_POST['password'])))
    {
    echo "Attenzione, password non corretta.";
    }else{
    // se i parametri sono in formato corretto interrogo il database

    $password = $_POST['password'];
    $username = $_POST['username'];
    
    @include "config.php";
    
    // controllo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM iscritti WHERE  username='$username'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_login)==0)
    {
      // esito login negativo
      echo "Login incorretto. Per favore, controlla di aver inserito correttamente i dati.";
    }else{
      // esito login positivo registro la password
    
      $obj = @mysql_fetch_object($ctrl_login) or die (mysql_error());
      $query_attivo = @mysql_query("UPDATE iscritti SET password ='$password'; WHERE id=".$obj->id) or die (mysql_error());
    
      // imposto un id di sessione corrispondente all'utente
      $_SESSION['id'] = $obj->id;
    
                      
    
      // rimando alla pagina riservata
      @header("Location: /xxx/xxxx.asp");
    }
    

    }
    }else{
    // segue il form per la conferma dell'iscrizione

    [/php]


  • ModSenior

    Ciao rolandopalinoi,

    hai messo un ; di troppo, prova cosi:
    [php]
    session_start();

    if( isset($_POST['submit']) && (trim($_POST['submit']) == "Conferma") )
    {
    // controllo il formato dell'username
    if((!isset($_POST['username'])) || ($_POST['username'] == "") ) //da reinserire prima dell'ultima tonda|| (!preg_match("/^[a-z0-9]+$/i", $_POST['username']))
    {
    echo "Attenzione, username non corretta.";
    }

    // controllo sul formato della password
    elseif((!isset($_POST['password'])) || ($_POST['password'] == "") || (!preg_match("/^[a-z0-9]+$/i", $_POST['password'])))
    {
    echo "Attenzione, password non corretta.";
    }else{
    // se i parametri sono in formato corretto interrogo il database

    $password = $_POST['password'];
    $username = $_POST['username'];
    
    @include "config.php";
    
    // controllo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM iscritti WHERE  username='$username'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_login)==0)
    {
      // esito login negativo
      echo "Login incorretto. Per favore, controlla di aver inserito correttamente i dati.";
    }else{
      // esito login positivo registro la password
    
      $obj = @mysql_fetch_object($ctrl_login) or die (mysql_error());
      $query_attivo = @mysql_query("UPDATE iscritti SET password ='$password' WHERE id=".$obj->id.' Limit 1') or die (mysql_error());
    
      // imposto un id di sessione corrispondente all'utente
      $_SESSION['id'] = $obj->id;
    
                      
    
      // rimando alla pagina riservata
      @header("Location: /xxx/xxxx.asp");
    }
    

    }
    }else{
    // segue il form per la conferma dell'iscrizione
    [/php]

    Buon Natale anche a te.


  • User

    Grazie Thedarkita. Velocissimo ed efficace. Ora viene registrata correttamente la password ma ho trovato un problema nella conferma.

    Il form nella email di conferma prevede (nelle mie intenzioni) che l'utente riscriva nome e password ma questi non è vincolato alla password iniziale.
    Non sarebbe un problema, anzi sarebbe interessante se non potesse cambiare anche quelle degli altri utenti.
    Per esempio l'utente Quinto, conoscendo il nikname di Primo può nel form di risposta modificare la password di Primo (è sufficiente inserire il nome di Primo nella risposta).

    Io a questo punto sono tentato di arrendermi.
    Grazie


  • ModSenior

    Solitamente si genera una stringa casuale univoca e viene utilizzato quella come link di attivazione e non passando il nome utente.