inserimento data nascita e codice random

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Buonasera, ho un problema che non riesco a capire come risolvere. Nella mia pagina di registrazione creo un codice random con questo codice
PHP:
$codiceconferma = $mysqli->real_escape_string(md5(uniqid(rand(),true)));
e fin qui ok, solamente che quando vado a richiamare la variabile per inviarla via mail e inserirla nel database mi ritrovo che la mail ha il codice corretto mentre nel database mi appaiono solo i primi due valori, ed esattamente solo numeri, mentre il codice è alfanumerico.

Inoltre sempre con lo stesso form il cliente inserisce la sua data di nascita che si completa automaticaamente con gli "/" e con un var_dump vedo questo
PHP:
object(mysqli_stmt)#3 (10) { ["affected_rows"]=> int(0) ["insert_id"]=> int(0) ["num_rows"]=> int(0)
 ["param_count"]=> int(8) ["field_count"]=> int(0) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0)
 { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(2) } string(10) "05/06/2013"
mentre questo è iol codice che ho scritto per preparare i dati
PHP:
$stmt = $mysqli->prepare("INSERT INTO utenti_temp (codiceconferma, nome, cognome, eta, interessi, username, password, email) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
      			$stmt->bind_param ('ississss', $codiceconferma, $nome, $cognome, $eta, $interessi, $username, $password, $email);
				$stmt->execute();
      			if($stmt->execute()){
      				$inviautentitemp = $stmt;
da qui se tutto è ok inizio a creare la mail.

Qualche suggerimento?
 
ciao, il codice generato con md5 è un alfanumerico come dici e se in db memorizza solo le prime due cifre o lettere devi cambiare l'impostazione (TIPO) della colonna "codiceconferma" metti VARCHAR 255, per la data probabilmente anche qui devi cambiare impostazione (TIPO).

Saluti
 
Ho risolto il mio problema, ho messo utf8_bin come charset in tutte le tabelle e per completezza metto qua il codice corretto. Magari non sarà il massimo e si potrà fare di meglio ma per ora va bene.
qua inserisco i valori in tabella temporanea
PHP:
      			$stmt = $mysqli->prepare("INSERT INTO utenti_temp (codiceconferma, nome, cognome, eta, interessi, username, password, email) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
      			$stmt->bind_param ('ssssssss', $codiceconferma, $nome, $cognome, $eta, $interessi, $username, $password, $email);
      			var_dump($stmt);
				$stmt->execute();
      			if($stmt->execute()){
      				$inviautentitemp = $stmt;
Per inserire invece la data e il codice random ho messo
PHP:
	$stmt->bind_param ('sssssssss')
come stringa e non come intero o double, e magicamente è apparso il codice.

L'unica cosa che mi rimane è che l'inserimento sia in tabella temporanea sia in quella definitiva le voci che vengono messe sono doppie. E non capisco come mai.
 
della colonna "codiceconferma" metti VARCHAR 255i
Un md5 in un varchar 255 è uno spreco di risorse: la configurazione più appropriata per quella colonna è CHAR(32).

Ho risolto il mio problema, ho messo utf8_bin come charset in tutte le tabelle
La codifica più appropriata da associare alle tabelle sul db se i tuoi files in php sono codificati in utf-8 è utf8mb4_general_ci.


Quanto al record duplicato è perché invochi il metodo execute() due volte di seguito:
PHP:
$stmt->execute();
if($stmt->execute()){

Di conseguenza esegui due volte la query, ti basta insomma eliminare l'istruzione al di fuori dell'if per risolvere.
 
Grazie flameseeker!! Corretti i valori, ora inserisce solo una stringa, invece di due e corretti anche la codifica ed il VARCHAR.
 

Discussioni simili