problema if else..

Salve, volevo sapere come mai non mi stampa il messaggio del controllo per non iscrivere doppie email, nella modifica del profilo. ora vi posto il codice:

<?php
session_start();
require_once(dirname(__FILE__) . "/include.php");
require_once(dirname(__FILE__) . "/header.php");
   checkLogin('1 2');
   
   $query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );
   $row = mysql_fetch_assoc ( $query );
   
   if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if ( valid_email ( $_POST['email'] ) )
      {if (checkUnique('Email', $_POST['email']) )   // Questo deve fare il controllo e stampare il messaggio qui sotto :->
         {
            $error = 'The email you used is associated with another user. Please try again or use the "forgot password" feature!';
         }
         else {         
         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator';
         }    
      }
      }
      else {
         $error = 'Invalid email address';
      }
      }
?>

<?php   if ( isset ( $error ) )   { echo '         <p class="error">' . $error . '</p>' . "\n";   }   ?>
<?php   if ( isset ( $msg ) )   { echo '         <p class="msg">' . $msg . '</p>' . "\n";   }   ?>

   <form class="form" action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
   
      <input type="hidden" name="_submit_check" value="1"/> 
   
      <table align="center" width="99%">
      
         <tr>
            <td><div align="left">Username</div></td>
         </tr>
         <tr>
            <td><div align="left"><input disabled class="input" type="text" name="username" id="username" size="25" maxlength="40" value="<?php echo $row['Username']?>" /></div></td>            
         </tr>
         <tr>
            <td><div align="left">Password</div></td>
         </tr>
         <tr>            
            <td><div align="left"><input class="input" type="password" name="password" id="password" size="25" maxlength="32" /></div></td>            
         </tr>
         <tr>
            <td><div align="left">Email</div></td>
         </tr>
         <tr>         
            <td><div align="left"><input class="input" type="text" name="email" id="email" size="25" value="<?php if ( isset ( $_POST['email'] ) ) { echo $_POST['email']; } else { echo $row['Email']; } ?>" /></div></td>
         </tr>
         
         <tr>
            <td>
            <input type="submit" name="Update" value="Update"  class="submit-btn" src="images/btn.gif" alt="submit" title="submit" />
            <br class="clear" />
            </td>
         </tr>
         
      </table>
               
   </form>
   
   <a href="logout.php">logout</a>
   
<?php require_once(dirname(__FILE__) . "/footer.php");

e la funziona è questa quella che controlla il doppione:

function checkUnique($field, $compared)
   {
      $query = mysql_query ( "SELECT `" . mysql_real_escape_string ( $field ) . "` FROM `users` WHERE `" . mysql_real_escape_string ( $field ) . "` = '" . mysql_real_escape_string ( $compared ) . "'" );
      if ( mysql_num_rows ( $query ) == 0 )
      {
         return TRUE;
      }
      else {
         return FALSE;
      }
   }

Mi potete aiutarmi grazie?.

inviato 7 anni fa
luigi
X 0 X

La funzione che hai creato funziona correttamente e il problema sta solo nella stampa dell'errore o la funzione ritorna sempre il valore "true" anche se è già presente una email nel database?

risposto 7 anni fa
Mario Santagiuliana
X 0 X
La funzione che hai creato funziona correttamente e il problema sta solo nella stampa dell'errore o la funzione ritorna sempre il valore "true" anche se è già presente una email nel database?

si funziona , benissimo la funzione , ad esempio sulla pagina register , funziona e stampa il messaggio.

e solo qui non mi riesce ad capire come mai non mi stampa il messaggio e non so se va messo in cima o in fondo all'else.

Mi dici come posso fare?.

risposto 7 anni fa
luigi
X 0 X

if (checkUnique('Email', $_POST['email']) )   // Questo deve fare il controllo e stampare il messaggio qui sotto :->

{

    $error = 'The email you used is associated with another user. Please try again or use the "forgot password" feature!';

}

Forse deve essere così?

if (!checkUnique('Email', $_POST['email']) )   // Questo deve fare il controllo e stampare il messaggio qui sotto :->
{
    $error = 'The email you used is associated with another user. Please try again or use the "forgot password" feature!';
}

Se non è vero che è unica allora assegna l'avviso a error. Altrimenti fa il resto.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

scusa, a che punto deve stare l'else?.

perchè inserendo quello che mi hai detto mi stampa il messaggio senza modificare l'email.

Mi dici che punto deve stare?.

grazie.

lo script lo preso da qui: http://www.roscripts.com/ , ma ora non è più raggiungibile (per me).

risposto 7 anni fa
luigi
X 0 X
scusa, a che punto deve stare l'else?.

 :o

Non devi spostare nessun else...ti ho suggerito di mettere nell'if un "not" (cioè "!").

Ma il codice che hai riportato, non ho capito, lo hai creato te o lo hai copiato da qualche parte?

Puoi riportare lo spezzo del codice della pagina "register" che dici funzionare?

Inoltre come si chiama il campo nel tuo database? "Email" o "email"?

P.S. Dal sito che indichi forniscono tantissimi script, come puoi pretendere che trovi quello che hai usato te?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

Rettifico, ho capito dove sta il problema: non hai specificato esattamente cosa volevi:

perchè inserendo quello che mi hai detto mi stampa il messaggio senza modificare l'email.

Perchè hai messo l'if in modo tale che se trova nel database un record con già presente l'email indicata, non fa niente se non apparire, giustamente, l'avviso che esiste già una email associata ad un altro utente:

if (!checkUnique('Email', $_POST['email']) )   // Questo deve fare il controllo e stampare il messaggio qui sotto :->

         {

            $error = 'The email you used is associated with another user. Please try again or use the "forgot password" feature!';

         }

else {         

         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";

         /* if we have a new password via POST we update the old one */

         if ( $_POST['password'] != '' ):

            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";

         endif;

         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";

         if ( mysql_query ( $update ) )

         {

            $msg = 'Your profile was successfully updated!';

         }

         else {

            $error = 'I was unable to save your profile. Please contact the administrator';

         }   

      }

A questo punto, dato che il mio precedente intervento non ha senso, cosa vuoi ottenere/fare?

Non volevi che venisse stampato l'errore dell'esistenza di una email nel database nel caso fosse stata trovata e passasse avanti?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

ciao, ti allego tutto il login e la pagina registrazione....

la checkunique si trova in functions.php.

ecco i link :

http:// w w w  . 7 - l a b . o r g/login_11.rar

ovvio devo rimettere le lettere tutte attacate per scaricare il file, lo fatto per forza cosi per i motori di ricerca.

Mi dici come posso fare ?,

è nell'update_profile.php , che voglio mettere quel controllo lì.

grazie.

risposto 7 anni fa
luigi
X 0 X

ti ho messo il file originale come lo scaricato dal sito registrandomi al quel sito roscripts.com.

risposto 7 anni fa
luigi
X 0 X

ora semberebbe che funge ...

<?php
session_start();
require_once(dirname(__FILE__) . '/../include.php');
require_once(dirname(__FILE__) . '/header.php');

   checkLogin('1 2');
   
   $query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );
   $row = mysql_fetch_assoc ( $query );
   
   if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if (!checkUnique('Email', $_POST['email']) )   // Questo deve fare il controllo e stampare il messaggio qui sotto :->
      {
      
         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }else
         {$error = 'The email you used is associated with another user. Please try again or use the "forgot password" feature!';
      }
         }
         }
         
?>
risposto 7 anni fa
luigi
X 0 X

nisba, funziona si e no.

mi protesti aiutarmi?

grazie.

risposto 7 anni fa
luigi
X 0 X

Allora il discorso è molto semplice, spero di interpretare correttamente ciò che vuoi ottenere:

L'utente vuole aggiornare il proprio profilo, inserisce una nuova email, se l'email che inserisce già esiste allora si avvisa l'utente che non può usare quella email, altrimenti fa l'aggiornamento giusto?

Lo script di base da dove parti è questo:

<?php 

   session_start();
   require_once('db.php');
   include('functions.php');
   include('settings.php');
   checkLogin('1 2');
   
   $query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );
   $row = mysql_fetch_assoc ( $query );
   
   if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if ( valid_email ( $_POST['email'] ) )
      {         
         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator';
         }          
      }
      else {
         $error = 'Invalid email address';
      }
   }
   

?>

Tu praticamente a questo script di base (preso lindo dal pacchetto che ci hai fornito) vuoi aggiungere il controllo fatto tramite la funzione checkUnique giusto?

Bene, puoi fare così:

<?php 

   session_start();
   require_once('db.php');
   include('functions.php');
   include('settings.php');
   checkLogin('1 2');
   
   $query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );
   $row = mysql_fetch_assoc ( $query );
   
   if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if ( valid_email ( $_POST['email'] ) ) // Se è stata fornita una email valida procedo...
      {         
                    if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo
                    {
         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator';
         }          
                    }
                    else { // se l'email fornita è già presente nel database allora invio questo messaggio e non faccio nessuna modifica
         $error = 'The email you used is associated with another user, change it.';
                    }
      }
      else {
         $error = 'Invalid email address';
      }
   }
   

?>
risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

si giusto vorrei fare cosi:

ma ora mi dice:

I was unable to save your profile. Please contact the administrator

io il db lo lasciato cosi come è nel file rar.

come mai?.

grazie.

risposto 7 anni fa
luigi
X 0 X

Non fare semplici copia e incolla!!!  :tichedoff:

Ragiona su quello che ti viene suggerito.

Questa parte che io ho lasciato "inalterato" dallo script di base:

session_start();

require_once('db.php');

include('functions.php');

include('settings.php');

checkLogin('1 2');

Tu negli script che avevi fornito prima era così:

session_start();

require_once(dirname(__FILE__) . '/../include.php');

require_once(dirname(__FILE__) . '/header.php');

risposto 7 anni fa
Mario Santagiuliana
X 0 X

si lo so. ma perchè include altre funzioni e la testata del sito (admin), e la chiusara del db con la footer.

ecco cosa ho scritto io:

<?php
session_start();
require_once(dirname(__FILE__) . '/../include.php');
require_once(dirname(__FILE__) . '/header.php');

checkLogin('1 2');
$query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );
$row = mysql_fetch_assoc ( $query );
if ( array_key_exists ( '_submit_check', $_POST ) )
{
if ( valid_email ( $_POST['email'] ) ) // Se &#232; stata fornita una email valida procedo...
{
  if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo
     {
$update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";

/* if we have a new password via POST we update the old one */

if ( $_POST['password'] != '' ):

$update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";

endif;

$update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";

if ( mysql_query ( $update ) )
$msg = 'Your profile was successfully updated!';
}

else {
$error = 'I was unable to save your profile. Please contact the administrator';
}
          }
                    else { // se l'email fornita &#232; gi&#224; presente nel database allora invio questo messaggio e non faccio nessuna modifica
$error = 'The email you used is associated with another user, change it.';
                    }
}
else {
$error = 'Invalid email address';
}

?>

<?php   if ( isset ( $error ) )   { echo '         <p class="error">' . $error . '</p>' . "\n";   }   ?>
<?php   if ( isset ( $msg ) )   { echo '         <p class="msg">' . $msg . '</p>' . "\n";   }   ?>

   <form class="form" action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
   
      <input type="hidden" name="_submit_check" value="1"/> 
   
      <table align="center" width="99%">
      
         <tr>
            <td><div align="left">Username</div></td>
         </tr>
         <tr>
            <td><div align="left"><input disabled class="input" type="text" name="username" id="username" size="25" maxlength="40" value="<?php echo $row['Username']?>" /></div></td>            
         </tr>
         <tr>
            <td><div align="left">Password</div></td>
         </tr>
         <tr>            
            <td><div align="left"><input class="input" type="password" name="password" id="password" size="25" maxlength="32" /></div></td>            
         </tr>
         <tr>
            <td><div align="left">Email</div></td>
         </tr>
         <tr>         
            <td><div align="left"><input class="input" type="text" name="email" id="email" size="25" value="<?php if ( isset ( $_POST['email'] ) ) { echo $_POST['email']; } else { echo $row['Email']; } ?>" /></div></td>
         </tr>
         
         <tr>
            <td>
            <input type="submit" name="Update" value="Update"  class="submit-btn" src="images/btn.gif" alt="submit" title="submit" />
            <br class="clear" />
            </td>
         </tr>
         
      </table>
               
   </form>
   
   <a href="logout.php">logout</a>
   
<?php require_once(dirname(__FILE__) . '/footer.php');
risposto 7 anni fa
luigi
X 0 X

Ottimo, ora dovrebbe funzionare correttamente come volevi.  :coolsmiley:

risposto 7 anni fa
Mario Santagiuliana
X 0 X
Ottimo, ora dovrebbe funzionare correttamente come volevi.  :coolsmiley:

ok, per me non fa un ciclo per vedere dentro il db se esistono o no.

Perchè ho inserito due email una gmail.com e una yahoo.it.

e mi da:

I was unable to save your profile. Please contact the administrator

come mai ?.

se provo ad cambiare l'email dell'utente con una delle poste.it

risposto 7 anni fa
luigi
X 0 X
per me non fa un ciclo per vedere dentro il db se esistono o no.

Scusami il tono: lo script lo hai letto?

1) Non deve fare nessun ciclo per vedere se esiste già quella email, c'è una funzione che fa una query.

2) Il controllo dell'esistenza della email è già stato fatto: tu inserisci l'email delle poste, lo script supera i controlli e ti ritorna l'errore:

"I was unable to save your profile. Please contact the administrator"

Hai provato a vedere nello script dove si trova questo errore?

E' qui:

         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator';
         }         

Questo pezzo di codice è all'interno della condizione if con checkUnique. Ciò significa che il controllo è stato fatto.

Qui c'è un errore di query.

O leggi i log di php per vedere l'errore o se no prova a modificare la riga dell'errore in questo modo:

            $error = 'I was unable to save your profile. Please contact the administrator'.mysql_error();

Riprocedi con l'aggiornamento del profilo, ti verrà di nuovo fuori l'errore ma con anche qualche informazione in più sul perchè.

Ci riporti l'errore così vediamo di capire cosa non va nella query  :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

si, ho controllato cosi e dice cosi:

I was unable to save your profile. Please contact the administratorDuplicate entry 'xxxxxxx@yahoo.it' for key 'Email'

quindi problema sempre dell'if?.

grazie.

risposto 7 anni fa
luigi
X 0 X

comunque se metto la gmail.com, e quella dell'utente iscritto "xxx.gmail.com" quindi funziona e aggiorna il db.

però se provo ad inserire le email yahoo.it, per fare il controllo salta quell'errrore lì.

come mai?.

grazie mille per la pasienza.

risposto 7 anni fa
luigi
X 0 X

si, ho controllato cosi e dice cosi:

I was unable to save your profile. Please contact the administratorDuplicate entry 'xxxxxxx@yahoo.it' for key 'Email'

quindi problema sempre dell'if?.

No...è un problema nel tuo database.

Come hai creato il campo Email?

comunque se metto la gmail.com, e quella dell'utente iscritto "xxx.gmail.com" quindi funziona e aggiorna il db.

però se provo ad inserire le email yahoo.it, per fare il controllo salta quell'errrore lì.

come mai?.

Hai impostato un valore di default per il campo "Email"?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

si, ho controllato cosi e dice cosi:

I was unable to save your profile. Please contact the administratorDuplicate entry 'xxxxxxx@yahoo.it' for key 'Email'

quindi problema sempre dell'if?.

No...è un problema nel tuo database.

Come hai creato il campo Email?

comunque se metto la gmail.com, e quella dell'utente iscritto "xxx.gmail.com" quindi funziona e aggiorna il db.

però se provo ad inserire le email yahoo.it, per fare il controllo salta quell'errrore lì.

come mai?.

Hai impostato un valore di default per il campo "Email"?

ok, e cosi:

CREATE TABLE `users` (
  `ID` int(11) NOT NULL auto_increment,
  `Username` varchar(255) NOT NULL,
  `Password` varchar(255) NOT NULL,
  `Temp_pass` varchar(55) default NULL,
  `Temp_pass_active` tinyint(1) NOT NULL default '0',
  `Email` varchar(255) NOT NULL,
  `Active` int(11) NOT NULL default '0',
  `Level_access` int(11) ,
  `Random_key` varchar(32) default NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Username` (`Username`),
  UNIQUE KEY `Email` (`Email`)
) ENGINE=MyISAM;

Percaso devo cambiare qualcosa?.

grazie.

Scusa, ma tra poco devo andare via.. ci risentiamo domani se vuoi.

risposto 7 anni fa
luigi
X 0 X

C'è questo che da "problemi":

UNIQUE KEY `Email` (`Email`)

Il controllo dell'esistenza di una email uguale nel database (la famosa funzione checkUnique) funziona correttamente vero?

Cioè l'errore non lo stai ottenendo con il tentativo di inserire una email che già è presente nel database vero?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

C'è questo che da "problemi":

UNIQUE KEY `Email` (`Email`)

Il controllo dell'esistenza di una email uguale nel database (la famosa funzione checkUnique) funziona correttamente vero?

Cioè l'errore non lo stai ottenendo con il tentativo di inserire una email che già è presente nel database vero?

si , funziona corretamente perchè la register.php , funziona e fa il controllo.

Quindi che devo fare?.

devo levare quel controllo al db?

grazie.

risposto 7 anni fa
luigi
X 0 X
l'errore non lo stai ottenendo con il tentativo di inserire una email che già è presente nel database vero?

Rettifico, modifica così questa riga:

if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo

Con:

if(!checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo

Occhio che c'è un not "!" davanti.

Riprova.

L'errore era proprio nell'if, mi hai confuso!!  :tichedoff: Avevi detto funzionava correttamente, che nel tentativo di inserire una email già presente nel database dava l'avviso "Già esiste l'email", non è invece così o sbaglio?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X
l'errore non lo stai ottenendo con il tentativo di inserire una email che già è presente nel database vero?

scusa, ma non sto cappendo più nulla ,

in questa riga di codice ci vuole not o senza not?

......

  if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo

                    {

.....

risposto 7 anni fa
luigi
X 0 X
l'errore non lo stai ottenendo con il tentativo di inserire una email che già è presente nel database vero?

Rettifico, modifica così questa riga:

if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo

Con:

if(!checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo

Occhio che c'è un not "!" davanti.

Riprova.

ritorna di nuovo:

I was unable to save your profile. Please contact the administratorDuplicate entry '[privata]@yahoo.it' for key 'Email'

li avevo già provati sia con e non.

Ma salta fuori quell'errore lì.

risposto 7 anni fa
luigi
X 0 X

Ci vuole il not!!!

Ho dato una modifica alla mia ultima risposta, dagli un attimo una letta  ;)

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Direi di fare un attimo il punto della situazione che ci stiamo confondendo le idee  O0 ?

Con la riga dell'if con il "!" davanti, l'errore "I was unable to save your profile. Please contact the administratorDuplicate entry '[privata]@yahoo.it' for key 'Email'" ti salta fuori esattamente quando? Quando stai tentando di aggiornare l'email dell'utente con una già presente nel database?

O stai usando una nuova email?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Uff allora ciò ragionato ancora su sullo script che ti avevo dato ancora prima (senza il "!") e logicamente mi sembra di avere fatto tutto correttamente.

L'errore del database salta fuori nel momento in cui si sta tentando di aggiornare una email già presente nel database.

Questo però non dovrebbe avvenire perchè abbiamo messo un controllo all'inizio, non ha per niente senso.

Per cui puoi riportare esattamente le condizioni in cui saltano fuori i vari messaggi di errori?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Direi di fare un attimo il punto della situazione che ci stiamo confondendo le idee  O0 ?

Con la riga dell'if con il "!" davanti, l'errore "I was unable to save your profile. Please contact the administratorDuplicate entry '[privata]@yahoo.it' for key 'Email'" ti salta fuori esattamente quando? Quando stai tentando di aggiornare l'email dell'utente con una già presente nel database?

O stai usando una nuova email?

no, aggiorno  con una email già inserita nel db per verificare se funziona il controllo,

però mi salta fuori quell'errore lì.

idee?

risposto 7 anni fa
luigi
X 0 X

Nell'if con checkUnique non ci va il not: "!"

Lo script come ti avevo suggerito all'inizio è corretto logicamente e sintatticamente.

1) Ora senza il "!" se provi ad aggiornare il profilo dell'utente con una email già presente nel database dovresti avere questo errore:

The email you used is associated with another user, change it.

Giusto?

2) Se invece usi un'altra email non esistente nel database dovresti riuscire ad aggiornare il profilo senza problemi, giusto?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ora viene anche se non cambio nessuna email ad esempio se lascio solo pippo@gmail.com senza fARE modifiche alla textbox mi dici quel messaggio.

The email you used is associated with another user, change it.

idee?.

grazie.

risposto 7 anni fa
luigi
X 0 X

Mi sembra ovvio che venga quel messaggio, il controllo avviene in modo corretto...

Volevi che fosse così no?

idee?.

Per cosa?

Puoi essere più preciso su quello che vuoi ottenere?

Magari anche sull'esplicazione degli errori che ti vengono fuori perchè ci siamo scambiati un sacco di messaggi su un problema inesistente!!!

Grazie.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

se premo il pulsante aggiorna senza inserire nessuna email ma lasciando la email dell'utente,

viene fuori il messaggio che esiste già l'email.

invece deve dare modifica ok.

??

risposto 7 anni fa
luigi
X 0 X

se premo il pulsante aggiorna senza inserire nessuna email ma lasciando la email dell'utente,

viene fuori il messaggio che esiste già l'email.

invece deve dare modifica ok.

??

Oh e allora bisogna modificare lo script, non credo sia difficile da così:

   if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if ( valid_email ( $_POST['email'] ) ) // Se è stata fornita una email valida procedo...
      {         
                    if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo
                    {
         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator';
         }          
                    }
                    else { // se l'email fornita è già presente nel database allora invio questo messaggio e non faccio nessuna modifica
         $error = 'The email you used is associated with another user, change it.';
                    }
      }
      else {
         $error = 'Invalid email address';
      }
   }

Il controllo di checkUnique lo fai dopo:

   if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if ( valid_email ( $_POST['email'] ) ) // Se è stata fornita una email valida procedo...
      {         
                    if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo
                    {
         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
                    }
                    else { // se l'email fornita è già presente nel database allora invio questo messaggio e non faccio nessuna modifica
         $update = "UPDATE `users` SET '";
         $error = 'The email you used is associated with another user, change it.';
                    }         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator';
         }          
      }
      else {
         $error = 'Invalid email address';
      }
   }

Però devi modificare lo script a tuo piacimento e facendo i dovuti controlli!!!!

Lo script è semplice e basilare, autoesplicativo, non credo che debba spiegartelo giusto?

Sarebbe anche il caso di cambiare il messaggio di errore che vuoi fornire all'utente con qualcosa di più idoneo...

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

io ho provato cosi:

<?php
session_start();
require_once(dirname(__FILE__) . '/../include.php');
require_once(dirname(__FILE__) . '/header.php');

checkLogin('1 2');
   $query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );
   $row = mysql_fetch_assoc ( $query );
   
if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if ( valid_email ( $_POST['email'] ) ) // Se è stata fornita una email valida procedo...
      {         
                    if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo
                    {
         $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
                    }
                    else { // se l'email fornita è già presente nel database allora invio questo messaggio e non faccio nessuna modifica
         $update = "UPDATE `users` SET '";
         $error = 'The email you used is associated with another user, change it.';
                    }         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator';
         }          
      }
      else {
         $error = 'Invalid email address';
      }
   }
?>

<?php   if ( isset ( $error ) )   { echo '         <p class="error">' . $error . '</p>' . "\n";   }   ?>
<?php   if ( isset ( $msg ) )   { echo '         <p class="msg">' . $msg . '</p>' . "\n";   }   ?>

   <form class="form" action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
   
      <input type="hidden" name="_submit_check" value="1"/> 
   
      <table align="center" width="99%">
      
         <tr>
            <td><div align="left">Username</div></td>
         </tr>
         <tr>
            <td><div align="left"><input disabled class="input" type="text" name="username" id="username" size="25" maxlength="40" value="<?php echo $row['Username']?>" /></div></td>            
         </tr>
         <tr>
            <td><div align="left">Password</div></td>
         </tr>
         <tr>            
            <td><div align="left"><input class="input" type="password" name="password" id="password" size="25" maxlength="32" /></div></td>            
         </tr>
         <tr>
            <td><div align="left">Email</div></td>
         </tr>
         <tr>         
            <td><div align="left"><input class="input" type="text" name="email" id="email" size="25" value="<?php if ( isset ( $_POST['email'] ) ) { echo $_POST['email']; } else { echo $row['Email']; } ?>" /></div></td>
         </tr>
         
         <tr>
            <td>
            <input type="submit" name="Update" value="Update"  class="submit-btn" src="images/btn.gif" alt="submit" title="submit" />
            <br class="clear" />
            </td>
         </tr>
         
      </table>
               
   </form>
   
   <a href="logout.php">logout</a>
   
<?php require_once(dirname(__FILE__) . '/footer.php');

Mi viene "I was unable to save your profile. Please contact the administrator".

si , dopo metto tutto in italiano i messaggi per ora li lascio cosi come per verificare se funzionano.

risposto 7 anni fa
luigi
X 0 X

Questo errore che ci segnali:

Mi viene "I was unable to save your profile. Please contact the administrator".

Può solo dirci che c'è un problema con l'esecuzione della query.

Devi fornirci più elementi, come già ti avevo detto prima o guardando i log di php o inserendo nell'echo dell'errore mysql_error().

Così possiamo vedere l'errore che sta alla base.

Io credo sia un problema della query costruita male.

Devi implementare meglio il tuo codice secondo le tue esigenze e necessità, ti ho buttato giù una cosa veloce.

 :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

si, query:

I was unable to save your profile. Please contact the administratorYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' WHERE `ID` = '1'' at line 1

risposto 7 anni fa
luigi
X 0 X

Guarda il modo con cui viene costruita la query (c'è anche un errore con un apice in più mi pare...).

Io dopo il controllo ho tolto dal set l'email, però se non è stata impostata anche una password la query finale è tipo così con lo script se non si cambia niente:

UPDATE `users` SET ' WHERE `ID` = quello che è

Non è corretta!!!

Devi modificare lo script secondo le tue esigenze.

Ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X

dimmi se va bene:

<?php
session_start();
require_once(dirname(__FILE__) . '/../include.php');
require_once(dirname(__FILE__) . '/header.php');

   checkLogin('1 2');
   $query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );
   $row = mysql_fetch_assoc ( $query );
   
if ( array_key_exists ( '_submit_check', $_POST ) )
   {
      if ( valid_email ( $_POST['email'] ) ) // Se è stata fornita una email valida procedo...
      {         
                    if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo
                    {
                  $update = "UPDATE `users` SET ID=".mysql_codifica($_SESSION["user_id"])."";
         $error = 'The email you used is associated with another user, change it.';
               }
                    else { // se l'email fornita è già presente nel database allora invio questo messaggio e non faccio nessuna modifica
      $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
                    
                    }         
         /* if we have a new password via POST we update the old one */
         if ( $_POST['password'] != '' ):
            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";
         endif;
         
         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";
         
         if ( mysql_query ( $update ) )
         {
            $msg = 'Your profile was successfully updated!';
         }
         else {
            $error = 'I was unable to save your profile. Please contact the administrator'.mysql_error();
         }          
         echo $update;
      }
      else {
         $error = 'Invalid email address';
      }
   }
?>

Ma salta fuori questo: se inserisco un'altra email che è nel db:

I was unable to save your profile. Please contact the administratorDuplicate entry '[privata]@yahoo.it' for key 'Email'

Quindi è il db? come si diceva un pò prima.

giusto?

risposto 7 anni fa
luigi
X 0 X

dimmi se va bene:

                    if(checkUnique('Email', $_POST['email'])) // Se non esiste una email $POST['email'] nel database allora procedo
                    {
                  $update = "UPDATE `users` SET ID=".mysql_codifica($_SESSION["user_id"])."";
         $error = 'The email you used is associated with another user, change it.';
               }
                    else { // se l'email fornita è già presente nel database allora invio questo messaggio e non faccio nessuna modifica
      $update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";
                    
                    }         

Questa parte non ha senso: perchè vuoi aggiornare l'id dell'utente? Tanto più che è una chiave primaria, ovviamente ti restituirà errore il database.

Inoltre hai invertito la logica di funzionamento, ora il tuo script fa:

Se non esiste già l'email fornita nel database allora aggiorno l'id dell'utente(e avrai sicuramente un errore) altrimenti se esiste già una email aggiorna l'email con quella fornita...

E' ovvio che restituisce quell'errore!!!!

Ti invito a fermarti un attimo e pensare a cosa stai facendo, senza essere precipitoso. RAGIONA (scusate se urlo).

Tu devi fare un controllo, se esiste già l'email nel database allora o stampi l'errore (nel caso l'email presente nel db sia associata ad un utente diverso da quello che vuole aggiornare il proprio profilo) o altrimenti esegui le operazioni successive e non aggiorni l'email che è rimasta invariata.

Hai capito la logica di funzionamento?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

io non sto cappendo più nulla, ma è cosi difficile ad fare un controllo per verificare se non c'è già una email.

ciao.

mi poi aiutarmi ... ? :)

risposto 7 anni fa
luigi
X 0 X

Non c'è niente di difficile.

Devi solo ragionare sui passi da compiere e come li vuoi compiere.

Prendi un pezzo di carta e inizia a pensare ai passi che il computer deve fare per ottenere quello che vuoi (te li ho detti prima in parte).

A me sembra di averti spiegato prima....devi semplicemente ragionare un attimo...

risposto 7 anni fa
Mario Santagiuliana
X 0 X

io non son tanto esperto di php. ma è  5 giorni che lo uso ....

Mi dici come fare , ?

grazie.

io non sto capendo più nulla, ma quella funzione non fa un ciclo e nemmeno un count(*),

per me , poi non lo so.

Perchè se guardi:

function checkUnique($field, $compared)

   {

      $query = mysql_query ( "SELECT `" . mysql_real_escape_string ( $field ) . "` FROM `users` WHERE `" . mysql_real_escape_string ( $field ) . "` = '" . mysql_real_escape_string ( $compared ) . "'" );

      if ( mysql_num_rows ( $query ) == 0 )

      {

         return TRUE;

      }

      else {

         return FALSE;

      }

   }

come fa a capire di andare a cercare nel db nel campo "Email" tutte le email che si trovano??

me lo spiegi?

Lei trova solo l'email che ha come sessione -> l'id del'utente apena loggato, ma non di tutto.

ok?

mi spiegi come fa ad capire se ci sono altre email.

o sono fuso io.

grazie.

risposto 7 anni fa
luigi
X 0 X

Ahahha vedo di commentarti la funzione allora:

function checkUnique($field, $compared)
   {
//la query viene generata usando le variabili field e compared passate alla funzione php non centra niente l'id, vedi qualche variabile id?
      $query = mysql_query ( "SELECT `" . mysql_real_escape_string ( $field ) . "` FROM `users` WHERE `" . mysql_real_escape_string ( $field ) . "` = '" . mysql_real_escape_string ( $compared ) . "'" );
      if ( mysql_num_rows ( $query ) == 0 ) // se la query non produce nessun risultato allora mysql_num_rows restituisce valore 0
      {
         return TRUE; // se mysql_num_rows da valore 0 allora vuol dire che nel database non esiste nessuna email che si sta cercando
      }
      else {
         return FALSE;
      }
   }
risposto 7 anni fa
Mario Santagiuliana
X 0 X

allora perchè non funziona in tutti i modi?.

risposto 7 anni fa
luigi
X 0 X

cavolo e due giorni che ci stò dietro ad questo cazzo di script che non vuole andare....

poteva funzionare tutto già  dal primo giorno con il ! (not) invece no, non funziona ,

come mai?

grazie.

risposto 7 anni fa
luigi
X 0 X

neanche cosi:

ora questa addiritura se metto il ! (not davanti),

mi da questo errore:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\xampp\htdocs\admin\default\edit.php on line 37

<?php 

require_once(dirname(__FILE__) . '/../auth.php');

require_once(dirname(__FILE__) . '/../../include.php');

require_once(dirname(__FILE__) . '/../header.php');?>

<?

?>

<ul id="maintab">

<li  class="selected" ><a href="/admin/default/">Home</a></li>

<li><a href="/admin/news/">Post</a></li>

<li><a href="/admin/photo/">Photo</a></li>

<li ><a href="/admin/atleti/">Atleti</a></li>

<li><a href="/admin/logout.php">Logout</a></li>

</ul>

<div id="tabcontent" class="clearfix">

<ul class="selected">

<li><a href="edit.php">Profilo utente</a></li>

</ul>

</div>

<?php

$id = mysql_codifica((int)$_SESSION["user_id"]);

$username = mysql_codifica($_POST["username"]);

$pwd = md5(mysql_codifica($_POST["pwd"]));

$email = mysql_codifica($_POST["email"]);

$ip = mysql_codifica($_POST["ip"]);

$livello = mysql_codifica($_POST["level"]);

$key = mysql_codifica($_POST["key"]);

$attivita = mysql_codifica($_POST["attivita"]);

if(isset($_POST))

{//Poi verifichiamo che l'username e l'email non siano gia presenti nel db

$query = "SELECT Email , Username FROM users " .

          "WHERE Username = '$username' " .

          "OR Email = '$email' ";

$result = mysql_query($query) or die (mysql_error());

if (mysql_num_rows($result) != 0)

{

while ($row = mysql_fetch_array($result))

{

  

  //email già presente nel db --------------------------------<<<<<<<<<----------------QUI  METTO !row[  ----->

  if ($row['Email'] == $email)

  {

   

   $error =  "La casella E-mail, <b>" . $row['Email'] . "</b> è già presente nel Data Base, scegliere una diversa";

   

  }

      

      

    else

      {

   

$query = "UPDATE users set Username='$username',";

$query .="Password='$pwd',";

$query .="Email='$email',";

$query .="birth='$birth',";

$query .="Level_access='$livello',";

$query .="Active='$attivita',";

$query .="Random_key='$key'";

$query .="WHERE ID=$id";

$result = mysql_query($query);

$error =  "<p style=\"background-color:red;color:black;\" align=\"center\">Profilo salvato. Attendere prego..</p>";

//redirect("index.php",5);

      }

}}

}

$id = mysql_codifica((int)$_SESSION["user_id"]);

$query = "SELECT * FROM users WHERE ID = $id";

$result = mysql_query($query);

if(empty($id)) {

echo  "ID non specificato";

}

elseif (mysql_num_rows($result) == 0) { echo "Record non trovato"; }

else

{

while($r=mysql_fetch_array($result))

{   

/* Questo inizializza i dati di ogni riga come variabile, per rendere semplice la visualizzazione */

$username = $r["Username"];

$pwd = $r["Password"];

$email = $r["Email"];

$level = $r["Level_access"];

$key = $r["Random_key"];

$attivita = $r["Active"];

?><?php   if ( isset ( $error ) )   { echo '         <p class="error">' . $error . '</p>' . "\n";   }   ?>

<?php   if ( isset ( $msg ) )   { echo '         <p class="msg">' . $msg . '</p>' . "\n";   }   ?>

    <form name="edit_process.php" method="post" action="edit.php?Id=<?php echo mysql_codifica($_SESSION["user_id"]); ?>">

  <table width="100%" border="0" cellspacing="2" cellpadding="2">

   

    <tr>

      <td>Username,</td>

      <td><input type="text" name="username" value="<?php echo $username; ?>" /></td>

    </tr>

    <tr>

      <td>Password</td>

      <td><input type="text" name="pwd" value="<?php echo $pwd; ?>" /></td>

    </tr>

    <tr>

      <td>Email</td>

      <td><input type="text" name="email" value="<?php echo $email; ?>" /></td>

    </tr>

 

  

   

    <tr>

      <td>Livello Account</td>

      <td><input type="text" name="level" value="<?php echo $level; ?>" /></td>

    </tr>

    <tr>

      <td>key</td>

      <td><input type="text" name="key" value="<?php echo $key; ?>" /></td>

    </tr>

  

    <tr>

      <td>Pubblicazione</td>

      <td><select name="attivita">

        <option value="0">:: seleziona ::</option>

        <option value="0" selected="selected" <?php if($attivita==0) echo 'selected="selected"'?>>Dissativato</option>

        <option value="1" <?php if($attivita==1) echo 'selected="selected"'?>>Pubblicato</option>

      </select></td>

    </tr>

    <tr>

      <td>&nbsp;</td>

      <td><input type="submit" name="Submit" value="Save" /></td>

    </tr>

  </table>

</form>

<?php

}

}

mysql_close($db);

?>
risposto 7 anni fa
luigi
X 0 X

ora lo un pò corretto , ma non ne vuole sapere di fare il controllo .

<?php 
require_once(dirname(__FILE__) . '/../auth.php');
require_once(dirname(__FILE__) . '/../../include.php');
require_once(dirname(__FILE__) . '/../header.php');?>
<?
?>
<ul id="maintab">
<li  class="selected" ><a href="/admin/default/">Home</a></li>
<li><a href="/admin/news/">Post</a></li>
<li><a href="/admin/photo/">Photo</a></li>
<li ><a href="/admin/atleti/">Atleti</a></li>
<li><a href="/admin/logout.php">Logout</a></li>
</ul>
<div id="tabcontent" class="clearfix">
<ul class="selected">
<li><a href="edit.php">Profilo utente</a></li>
</ul>
</div>
<?php
$id = mysql_codifica((int)$_SESSION["user_id"]);

$username = mysql_codifica($_POST["username"]);
$pwd = md5(mysql_codifica($_POST["pwd"]));
$email = mysql_codifica($_POST["email"]);
$ip = mysql_codifica($_POST["ip"]);
$livello = mysql_codifica($_POST["level"]);
$key = mysql_codifica($_POST["key"]);
$attivita = mysql_codifica($_POST["attivita"]);
if(isset($_POST["Submit"]))
{
//Poi verifichiamo che l'username e l'email non siano gia presenti nel db
$query = "SELECT * FROM users " .
          "WHERE Username = '$user' " .
          "OR Email = '$email' ";
$result = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($result) != 0)
{
while ($row = mysql_fetch_array($result))
{
  //username già presente nel db
 
  //email già presente nel db
  if (!$row['Email'] == $email)
  {
   echo "<p>";
   echo "La casella E-mail, <b>" . $row['Email'] . "</b> è già presente nel Data Base, scegliere una diversa";
   echo "</p>";
  }
}
//rimandiamo l'utente alla pagina precedente
echo "<p>";
echo "<a href=\"edit.php?Id=$id\">";
echo "<<< Clicca qui per ritornare alla pagina precedente";
echo "</a>";
echo "</p>";
exit();
}else
{
   
$query = "UPDATE users set Username='$username',";
$query .="Password='$pwd',";
$query .="Email='$email',";
$query .="Level_access='$livello',";
$query .="Active='$attivita',";
$query .="Random_key='$key'";
$query .="WHERE ID=$id";

$result = mysql_query($query);
$error =  "<p style=\"background-color:red;color:black;\" align=\"center\">Profilo salvato. Attendere prego..</p>";
redirect("index.php",5);
}      }

$id = mysql_codifica((int)$_SESSION["user_id"]);
$query = "SELECT * FROM users WHERE ID = $id";
$result = mysql_query($query);
if(empty($id)) {
echo  "ID non specificato";
}
elseif (mysql_num_rows($result) == 0) { echo "Record non trovato"; }
else
{

while($r=mysql_fetch_array($result))
{   
/* Questo inizializza i dati di ogni riga come variabile, per rendere semplice la visualizzazione */

$username = $r["Username"];
$pwd = $r["Password"];
$email = $r["Email"];
$level = $r["Level_access"];
$key = $r["Random_key"];


$attivita = $r["Active"];

?><?php   if ( isset ( $error ) )   { echo '         <p class="error">' . $error . '</p>' . "\n";   }   ?>
<?php   if ( isset ( $msg ) )   { echo '         <p class="msg">' . $msg . '</p>' . "\n";   }   ?>

    <form name="edit_process.php" method="post" action="edit.php?Id=<?php echo mysql_codifica($_SESSION["user_id"]); ?>">
  <table width="100%" border="0" cellspacing="2" cellpadding="2">
   

    <tr>
      <td>Username,</td>
      <td><input type="text" name="username" value="<?php echo $username; ?>" /></td>
    </tr>
    <tr>
      <td>Password</td>
      <td><input type="text" name="pwd" value="<?php echo $pwd; ?>" /></td>
    </tr>
    <tr>
      <td>Email</td>
      <td><input type="text" name="email" value="<?php echo $email; ?>" /></td>
    </tr>
 

  
   
    <tr>
      <td>Livello Account</td>
      <td><input type="text" name="level" value="<?php echo $level; ?>" /></td>
    </tr>
    <tr>
      <td>key</td>
      <td><input type="text" name="key" value="<?php echo $key; ?>" /></td>
    </tr>
  
    <tr>
      <td>Pubblicazione</td>
      <td><select name="attivita">
        <option value="0">:: seleziona ::</option>
        <option value="0" selected="selected" <?php if($attivita==0) echo 'selected="selected"'?>>Dissativato</option>
        <option value="1" <?php if($attivita==1) echo 'selected="selected"'?>>Pubblicato</option>
      </select></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="Save" /></td>
    </tr>
  </table>
</form>
<?php
}

}
mysql_close($db);
?>
risposto 7 anni fa
luigi
X 0 X

Ahahha vedo di commentarti la funzione allora:

function checkUnique($field, $compared)
   {
//la query viene generata usando le variabili field e compared passate alla funzione php non centra niente l'id, vedi qualche variabile id?
      $query = mysql_query ( "SELECT `" . mysql_real_escape_string ( $field ) . "` FROM `users` WHERE `" . mysql_real_escape_string ( $field ) . "` = '" . mysql_real_escape_string ( $compared ) . "'" );
      if ( mysql_num_rows ( $query ) == 0 ) // se la query non produce nessun risultato allora mysql_num_rows restituisce valore 0
      {
         return TRUE; // se mysql_num_rows da valore 0 allora vuol dire che nel database non esiste nessuna email che si sta cercando
      }
      else {
         return FALSE;
      }
   }

HO SCOPERTO UNA COSA,

DEVO CONTROLLARE PRIMA se l'input text , se non è modificato allora salvo l'email già in uso senza controllare se c'è o non c'è nel db,

ma se l'input text è stato  modificato con dati diversi  allora cambio email e faccio il controllo se non c'è nel db

con il semplice controllo postato prima senza il not (!).

Si può fare questa cosa?.

risposto 7 anni fa
luigi
X 0 X

Ti do un unico consiglio:

Prendi un foglio di carta e scrivi i passaggi che deve compiere il php per fare ciò che vuoi.

E' uno script a dir poco banale, continui a confonderti fra gli "errori" che invii te all'utente come messaggi e gli errori reali di sintassi o altro dati dal php.

Continui a cambiare pezzi di codice senza una logica e di conseguenza fai confusione.

Prendi un foglio di carta, scrivi cosa vuoi e da li sviluppi!!! Ed eviti di usare parole così parole poco carine da scrivere.

Inoltre ti consiglio di dare una letta ad una guida sui form html e su php in generale.

Di più non so come aiutarti a farti capire le cose se non riscivendoti da zero il codice che ti serve ma neppure hai una idea precisa di cosa vuoi ottenere...

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ciao, c'è lo quasi fatta. però non mi convince per far in modo se si iscrivono 100 utenti.

Mi hanno detto che devo trasformare il while in do while ma non son capace perchè se nò va in timeout,

se ha troppi utenti da cercare..

Mi daresti una mano?.

grazie.

ecco il codice finito:

<?php

require_once(dirname(__FILE__) . '/../auth.php');

require_once(dirname(__FILE__) . '/../../include.php');

require_once(dirname(__FILE__) . '/../header.php');?>

<ul id="maintab">

<li  class="selected" ><a href="/admin/default/">Home</a></li>

<li><a href="/admin/news/">Post</a></li>

<li><a href="/admin/photo/">Photo</a></li>

<li ><a href="/admin/atleti/">Atleti</a></li>

<li><a href="/admin/logout.php">Logout</a></li>

</ul>

<div id="tabcontent" class="clearfix">

<ul class="selected">

<li><a href="edit.php">Profilo utente</a></li>

</ul>

</div>

<?php

    checkLogin('1');

    $query = mysql_query ( "SELECT * FROM `users` WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'" );

    $r= mysql_fetch_assoc ( $query );

    

if(isset($_POST["Update"]))

{

$email = mysql_codifica($_POST['email']);

$user = mysql_codifica((int)$_SESSION["user_id"]);

$query = "SELECT * FROM users WHERE email LIKE '$email' AND ID != '$user'";

$result = mysql_query($query) or die (mysql_error());

if (mysql_num_rows($result) != 0)

{

while ($row = mysql_fetch_array($result))

{

  //email già presente nel db

  if ($row["Email"] == $email)

  {

   //echo "<p>";

   $error =  "La casella E-mail, <b>" . $row['Email'] . "</b> è già presente nel Data Base, scegliere una diversa";

   //echo "</p>";

   

  }

}

}//Se invece username e email non sono presenti nel db procediamo con l'inserimanto

else

{    

$update = "UPDATE `users` SET `Email` = '" . mysql_real_escape_string ( $_POST['email'] ) . "'";

         

         /* if we have a new password via POST we update the old one */

         if ( $_POST['password'] != '' ):

            $update .= ", `Password` = '" . md5 ( mysql_real_escape_string ( $_POST['password'] ) ) . "'";

         endif;

         

         $update .= " WHERE `ID` = '" . mysql_real_escape_string ( $_SESSION['user_id'] ) . "'";

         

         if ( mysql_query ( $update ) )

         {

            $msg = 'Your profile was successfully updated!';

         }

         else {

            $error = 'I was unable to save your profile. Please contact the administrator'.mysql_error();

         }         

            }            

     

   }

?>

<?php    if ( isset ( $error ) )    { echo '            <p class="error">' . $error . '</p>' . "\n";    }    ?>

<?php    if ( isset ( $msg ) )    { echo '            <p class="msg">' . $msg . '</p>' . "\n";    }    ?>

    <form class="form" action="<?php echo $_SERVER['PHP_SELF']?>" method="post">

    

        <input type="hidden" name="_submit_check" value="1"/>

    

        <table align="center" width="99%">

        

            <tr>

                <td><div align="left">Username</div></td>

            </tr>

            <tr>

                <td><div align="left"><input disabled class="input" type="text" name="username" id="username" size="25" maxlength="40" value="<?php echo $r['Username']?>" /></div></td>                

            </tr>

            <tr>

                <td><div align="left">Password</div></td>

            </tr>

            <tr>                

                <td><div align="left"><input class="input" type="password" name="password" id="password" size="25" maxlength="32" /></div></td>                

            </tr>

            <tr>

                <td><div align="left">Email</div></td>

            </tr>

            <tr>            

                <td><div align="left"><input class="input" type="text" name="email" id="email" size="25" value="<?php if ( isset ( $_POST['email'] ) ) { echo $_POST['email']; } else { echo $r['Email']; } ?>" /></div></td>

            </tr>

            

            <tr>

                <td>

                <input type="submit" name="Update" value="Update"  class="submit-btn" src="images/btn.gif" alt="submit" title="submit" />

                <br class="clear" />

                </td>

            </tr>

            

        </table>

                    

    </form>

    

    <a href="logout.php">logout</a>

    

<?php require_once(dirname(__FILE__) . '/../footer.php');
risposto 7 anni fa
luigi
X 0 X

Mi hanno detto che devo trasformare il while in do while ma non son capace perchè se nò va in timeout,

se ha troppi utenti da cercare..

Potresti indicare di quale while stai parlando?

La funzione checkUnique non la usi più?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Mi hanno detto che devo trasformare il while in do while ma non son capace perchè se nò va in timeout,

se ha troppi utenti da cercare..

Potresti indicare di quale while stai parlando?

La funzione checkUnique non la usi più?

no, non la uso più la checkunique...

questo:

$email = mysql_codifica($_POST['email']);

$user = mysql_codifica((int)$_SESSION["user_id"]);

$query = "SELECT * FROM users WHERE email LIKE '$email' AND ID != '$user'";

$result = mysql_query($query) or die (mysql_error());

if (mysql_num_rows($result) != 0)

{

while ($row = mysql_fetch_array($result))

{

  //email già presente nel db

  if ($row["Email"] == $email)

  {

   //echo "<p>";

   $error =  "La casella E-mail, <b>" . $row['Email'] . "</b> è già presente nel Data Base, scegliere una diversa";

   //echo "</p>";

   

  }

}
risposto 7 anni fa
luigi
X 0 X

Puoi renderla come checkUnique, con la differenza della query, non ti occorre fare un ciclo:

$email = mysql_codifica($_POST['email']);

$user = mysql_codifica((int)$_SESSION["user_id"]);

$query = "SELECT * FROM users WHERE email = '$email' AND ID != '$user'";

$result = mysql_query($query) or die (mysql_error());

      

if ( mysql_num_rows ( $query ) == 0 )

{

   // --------------fai l'aggiornamento-------------

}

else {

        $error =  "La casella E-mail, <b>" . $row['Email'] . "</b> è già presente nel Data Base, scegliere una diversa";

}
risposto 7 anni fa
Mario Santagiuliana
X 0 X

Puoi renderla come checkUnique, con la differenza della query, non ti occorre fare un ciclo:

$email = mysql_codifica($_POST['email']);

$user = mysql_codifica((int)$_SESSION["user_id"]);

$query = "SELECT * FROM users WHERE email = '$email' AND ID != '$user'";

$result = mysql_query($query) or die (mysql_error());

      

if ( mysql_num_rows ( $query ) == 0 )

{

   // --------------fai l'aggiornamento-------------

}

else {

        $error =  "La casella E-mail, <b>" . $row['Email'] . "</b> è già presente nel Data Base, scegliere una diversa";

}

ok, grazie mille ora funziona bene e per il discorso degli 100 utenti c'è la farà?.

grazie.

risposto 7 anni fa
luigi
X 0 X
ok, grazie mille ora funziona bene e per il discorso degli 100 utenti c'è la farà?.

Non capisco dove sia il problema dato che il ciclo while è stato eliminato ed era quello che rendeva il ciclo troppo "lungo"...

 :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X
ok, grazie mille ora funziona bene e per il discorso degli 100 utenti c'è la farà?.

Non capisco dove sia il problema dato che il ciclo while è stato eliminato ed era quello che rendeva il ciclo troppo "lungo"...

 :bye:

ok, quindi se si registrano 100 utenti c'è la fa un hoster come aruba ad funzionare tutto liscio.?

GRAZIE! :)

risposto 7 anni fa
luigi
X 0 X

Beh...fai una semplice query...tu avevi un problema con il "timeout" dell'applicativo se non sbaglio no?

Se il risultato della query è troppo "grande" puoi aggiungerci il count così il database ritornerà solo un numeretto  :) e lo usi per fare il tuo controllo.

ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Beh...fai una semplice query...tu avevi un problema con il "timeout" dell'applicativo se non sbaglio no?

Se il risultato della query è troppo "grande" puoi aggiungerci il count così il database ritornerà solo un numeretto  :) e lo usi per fare il tuo controllo.

ciao

ciao , ma devo scrivere cosi:

$query = "SELECT COUNT(*) FROM users WHERE email = '$email' AND ID != '$user'";

è giusto?

grazie.

risposto 7 anni fa
luigi
X 0 X

Si esatto, poi modifichi il tuo controllo in base alla query che ti restituisce un valore numerico.

Ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Si esatto, poi modifichi il tuo controllo in base alla query che ti restituisce un valore numerico.

Ciao

che valore numerico?

grazie mille,

dopo le 14 non ci sono ci sentiamo stasera.

risposto 7 anni fa
luigi
X 0 X

La query con il select count restituisce il numero di righe trovate.

Se non trova niente, cioè se non ci sono righe il conteggio è uguale a zero, per cui potresti fare il controllo così:

$result = mysql_query($query) or die (mysql_error());
if ( mysql_result ( $result, 0, 0 ) == 0 )
{
        // --------------fai l'aggiornamento-------------
}
else {
        $error =  "La casella E-mail, <b>" . $row['Email'] . "</b> è già presente nel Data Base, scegliere una diversa";
}
risposto 7 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda