copie et cryptage

Eléphant du PHP | 94 Messages

20 juin 2010, 23:04

Bonjour (re),

J'avais une base de données avec quelques données d'essais, et je veux la refaire pour crypter des données dans certaines tables.

J'ai donc créé une autre base, avec les mêmes tables.

Je fait un petit script qui lit la première table, puis ouvre la nouvelle base pour copier les données dans la table correspondante.

Je l'ai fait pour deux, tables, cela fonctionne bien.

Là où ça se corse, c'est ma troisième table, celle que je veux crypter.

Je lis l'ancienne non cryptée, pas de problème.

Je met toutes les données dans un tableau dont le premier indice correspond à une ligne lue, et le second aux noms de colonnes.

Pas de problème.

Une fois fait, je crypte mes données dans ce tableau, toujours pareil, ça fonctionne.

Par contre, lorsque je cherche à copier ce tableau dans ma nouvelle table, je n'y arrive pas.
Je crois voir à peu près ce qui cloche, mais je n'arrive pourtant pas à résoudre le problème.
J'imagine que le problème vient du contenu des données qui peut-être n'importe quoi, vu que c'est du crypté.
D'ailleurs, si je fait afficher mes données, je vois apparaître des guillemets, etc...

Résultat, j'arrive dans le meilleur des cas à écrire une ligne mais ça plante à la seconde (celle où j'ai repéré un guillemet dans les données cryptées lorsque je fait afficher ces données.



Alors comment faire ?

Je vous met un bout de code commenté. Cela commence à partir du cryptage et de la recopie.
<?php
	for ($indice = 0; $indice < count($tableau); $indice++) { //[i]$tableau contient mes données lues dans l'ancienne table[/i]
		$requete = "INSERT INTO employe ("; //[i]debut de la requete SQL[/i]
		$fin = " VALUES ("; //[i]deuxième partie de la requète qui contiendra les valeurs[/i]
		$suite = 0;
		$numero = 0;
		foreach($tableau[$indice] as $colonne=>$valeur) { //[i]$colonne contient le nom de la colonne[/i]
			$numero++;
			$tableau[$indice][$colonne]=mcrypt_encrypt($algo, $porte, $valeur, $mode, $judas); //[i]cryptage ok[/i]
			if (!$suite) { //[i]première colonne[/i]
				$requete .= "employe_Z".$numero;  //[i]changement des noms de colonne (forme : enploye_Z$numero[/i]
				$fin .= "'\$tableau[\$indice][$colonne]'";  //[i]voilà sans doute la ligne qui pêche.[/i]
				$suite=1;
			} else { //[i]colonne suivante[/i]
				$requete .= ",employe_Z".$numero; //[i]changement nom de colonne[/i]
				$fin .= ",'\$tableau[\$indice][$colonne]'"; //[i] de nouveau la ligne qui déconne[/i]
			}
			
		}
		$requete .=") ".$fin.")"; //[i] je clôs l'élaboration de la requête[/i]
		$resultat = mysql_query ($requete) or die ("Ecriture échouée !");
		echo ($requete."Écriture de la ligne<br/>"); // [i]pour voir ce qui est écrit dans la nouvelle table[/i]
	}
	
	
?>
Merci de votre aide

Eléphant du PHP | 94 Messages

21 juin 2010, 01:20

Après deux heures de recherche, j'ai réussi à contourner le problème, mais pas à le résoudre.

Avant d'écrire le contenu de ma variable dans la requête SQL, j'utilise base64_encode(); et ça marche.

Par contre, cela augmente la taille des variables, donc la taille de la table, en de plus je ne peux pas exactement prévoir quelle taille à prévoir pour chaque données; donc tout transcrire en varchar.

Bref, c'est pas très propre.

Donc si quelqu'un a une solution plus clean, je suis toujours preneur.

Merci