OVH Community, votre nouvel espace communautaire.

Transformation de table.


Abogil
30/10/2006, 07h43
Citation Envoyé par john five
Ca y est le problème est réglé.

Explication :
dans ton code que tu viens de mettre il ya une faute :
Code PHP:
$sql_insert " '', '$nom', '$format', '$texte', '$album', '$id' "
ce n'est pas $texte mais $txt.
Je suis très content John que ton problème soit enfin réglé.

Non $texte au lieu de $txt n'est pas une faute :
  • $texte était conforme au script que je t'ai donné.
  • Pour $txt, j'évite d'utiliser des noms de variables qui pourraient être confondues avec les variables prédéfinies de PHP.

john five
30/10/2006, 07h30
Ca y est le problème est réglé.

Explication :
dans ton code que tu vien de mettre il ya une faute :
Code PHP:
$sql_insert " '', '$nom', '$format', '$texte', '$album', '$id' "
ce n'est pas $texte mais $txt.

De ce fait, le script a marché et a recopier toutes les lignes mais sans la colonne txt.
Le problème venait donc de là.
J'ai remonter un peu et j'ai vu ca aussi :

Code PHP:
$texte  addslashes($texte); 
alors que ca devrait etre $txt !.

Voilà donc pour resumer un oublie de ma part d'auto-incrementation dans la structure et quelques fautes de frappe.

Cependant merci beaucoup Abogil de ton aide, car elle m'a été précieuse.

Abogil
29/10/2006, 22h15
Ton fichier est incomplet.

Exécute le code ci-dessous afin que je puisse voir à quoi correspondent les erreurs relevées.

Code:
   $sql_insert = " '', '$nom', '$format', '$texte', '$album', '$id' ";
   $Result = mysql_query("INSERT INTO gallerie2 VALUES ($sql_insert)"; 
   echo " \$sql_insert=$sql_insert - \$Result=$Result - " . mysql_error() . "
" \n;
Envoi moi les résultats dans un message personnel.

john five
29/10/2006, 20h44
Voilà l'erreur, je n'est pas pu la posté car il y avait trop de caractères.
Je l'ai donc mis dans un fichier texte :
http://www.badongo.com/fr/file/1626111

Abogil
29/10/2006, 20h34
Il faudrait que tu nous donnes les phrases exactes et complètes des commandes "mysql_query("INSERT INTO gallerie2 ... " en erreur. Ainsi que le message de l'erreur.

john five
29/10/2006, 18h54
Toujours pareil, toujours autant de lignes insérer.

Je pensais à un autre moyen d'effectuer ma migration vers la nouvelle table.
En exportant le fichier sql et en le modifiant à la main :
INSERT INTO `gallerie` (`id`, `nom`, `format`, `texte`, `album`) VALUES (36, '922417976.jpg', 'paysage', '2ème CRVallée du cailly avec 13 participants', 'Rallye des jonquilles (2005)'),
(11, '902134057.jpg', 'paysage', 'Rassemblement avant le départ', 'Rallye des jonquilles (2005)'),

Ce qui deviendrait :
('', '922417976.jpg', 'paysage', '2ème CRVallée du cailly avec 13 participants', 'Rallye des jonquilles (2005)','36'),
('', '902134057.jpg', 'paysage', 'Rassemblement avant le départ', 'Rallye des jonquilles (2005)','11'),

Le problème de cet méthode c'est qu'à la main c'est très long et qu'il ya 160 lignes.
Je pensais aux REGEX mais je voit pas trop comment faire.

Abogil
29/10/2006, 18h38
Citation Envoyé par john five
Je pense plutot à un problème au niveau de l'insert car si je rajoute :
Code PHP:
echo " \$Result=$Result - " mysql_error(); 
J'ai toujours des erreurs d'insertion.

Dont voici un extrait :
$Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'inscription tout le monde s'approche du départ.Martial LEJEUNE( $Result=1 - $Result=1 - $Result= - You have an error in your SQL syntax. . . .
Je pense que ce n'est pas au niveau de la structure de ton INSERT qu'il y a une erreur, puisque les 2/3 des lignes sont ajoutées.

Je pense qu'il y a des chaines de données avec des côtes. Il faut fonc annihiler l'effet des côtes avec " \ "avant d'entrer les données dans la table.

Voici un bout de code à ajouter avant ton INSERT :
Code:
   $nom    = addslashes($nom);
   $album  = addslashes($album);
   $texte  = addslashes($texte);
   $format = addslashes($format);

john five
29/10/2006, 18h11
Je pense plutot à un problème au niveau de l'insert car si je rajoute :
Code PHP:
echo " \$Result=$Result - " mysql_error(); 
J'ai toujours des erreurs d'insertion.

Dont voici un extrait :
$Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'inscription tout le monde s'approche du départ.Martial LEJEUNE( $Result=1 - $Result=1 - $Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'est parti dans les longs vallons. Certains montrent déjà le bou $Result=1 - $Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Houppeville,il se prépare quelque chose ?', 'Rallye des jonquil $Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'est échappé après Bosc Bérenger', 'Rallye des jonquilles (2005) $Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'est reconstitué. JC FARA TOOGIANO (ccalm) mène le train avec un $Result=1 - $Result=1 - $Result=1 - $Result=1 - $Result=1 - $Result=1 - $Result=1 - $Result=1 - $Result=1 - $Result=

Abogil
29/10/2006, 17h12
Citation Envoyé par john five
Toujours pareil.
C'est bizarre, cela ne viendrait t-il pas du fait que la clé id ne veut pas s'incrementer ?
En fait si, ca y est.
Pour la colonne id" il faut déclarer : "`Id` int(11) NOT NULL auto_increment"

Citation Envoyé par john five
Mais maintenant seul 107 des 159 lignes veulent bien se recopier.
Il ya comme des sauts de lignes tout n'est pas recopier.
Dans le Double script que je t'ai suggéré, quelle est la valeur finale de $Count. Cela permettra de savoir $Count = 107 ou 159.

Si $Count = 107 --> Il s'agit d'un problème de SELECT.
Si $Count = 159 --> Il s'agit d'un problème de INSERT.

Citation Envoyé par john five
En fait le 1er script que j'avais ecrit marche aussi bien.
Maintenant je cherche pourquoi il ya des saut de ligne alors que si j'execute cet requete (SELECT * FROM `gallerie` ORDER BY `id`) tout est là.
En effet l'erreur initiale était à la fin de la formulation de l'INSERT.

john five
29/10/2006, 15h51
Toujours pareil.
C'est bizar, cela ne viendrait t-il pas du fait que la clé id ne veut pas s'incrementer ?
En fait si, ca y est.

Mais maintenant seul 107 des 159 lignes veulent bien se recopier.
Il ya comme des sauts de lignes tout n'est pas recopier.

En fait le 1er script que j'avais ecrit marche aussi bien.
Maintenant je cherche pourquoi il ya des saut de ligne alors que si j'execute cet requete (SELECT * FROM `gallerie` ORDER BY `id`) tout est là.

Abogil
29/10/2006, 15h49
Essaie :
Code:
   $sql_insert = " '', '$nom', '$format', '$texte', '$album', '$id' ";
   $Result = mysql_query("INSERT INTO gallerie2 VALUES ($sql_insert)"; 
   echo " \$Result=$Result - " . mysql_error();

john five
29/10/2006, 15h35
Voilà ce que j'obtient :

$Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'inscription tout le monde s'approche du départ.Martial LEJEUNE( $Result=1 - $Result= - Duplicate entry '0' for key 1
$Result= - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'est parti dans les longs vallons. Certains montrent déjà le bou $Result= - Duplicate entry '0' for key 1

Et ainsi de suite, car il ya une page entiere pleine de ce genre d'erreur.
Si je comprend bien l'entrée existe dejà.

Je commence avec une table completement vide et comme avec mon 1er script la boucle s'execute qu'une seule fois, ajoute une entrée et c'est tout.

Abogil
29/10/2006, 15h16
Essaie en remplaçant :
Code:
   mysql_query("INSERT INTO gallerie2 VALUES('', '$nom', '$format', '$texte', '$album', '$id')") or die("mysql : probleme de selection de base (erreur 5)");
Par :
Code:
 
   $Result = mysql_query("INSERT INTO gallerie2 VALUES('', '$nom', '$format', '$texte', '$album', '$id')");
   echo " \$Result=$Result - " . mysql_error();
Tu devrais avoir le détail de ton erreur.

john five
29/10/2006, 15h06
Après correction :
Code PHP:
mysql_connect("$serveur""$user""$mdp") or die("mysql : probleme de selection de base (erreur 1)"); // Connexion à MySQL
mysql_select_db("$table") or die("mysql : probleme de selection de base (erreur 2)");






$reponse mysql_query("SELECT * FROM gallerie ORDER BY id ") or die("mysql : probleme de selection de base (erreur 3)"); // Requête SQL 


$Tab_gallerie = array();
$Count 0;


while (
$reponse && $donnees mysql_fetch_array($reponse))
   {
   
$Count $Count 1;
   
$Tab_gallerie["$Count"]['id']     = $donnees['id'];
   
$Tab_gallerie["$Count"]['nom']    = $donnees['nom'];
   
$Tab_gallerie["$Count"]['album']  = $donnees['album'];
   
$Tab_gallerie["$Count"]['texte']  = $donnees['texte'];
   
$Tab_gallerie["$Count"]['format'] = $donnees['format'];
   }

reset ($Tab_gallerie);
while(list(
$Count$data) = each($Tab_gallerie))
   {
   
$id     $Tab_gallerie["$Count"]['id'];
   
$nom    $Tab_gallerie["$Count"]['nom'];
   
$album  $Tab_gallerie["$Count"]['album'];
   
$texte  $Tab_gallerie["$Count"]['texte'];
   
$format $Tab_gallerie["$Count"]['format'];

   
// On ajoute une entrée avec mysql_query
   
mysql_query("INSERT INTO gallerie2 VALUES('', '$nom', '$format', '$texte', '$album', '$id')") or die("mysql : probleme de selection de base (erreur 5)");
   }


mysql_close(); 
mysql : probleme de selection de base (erreur 5)

problème avec la requete d'insertion, alors qu'elle est correcte.

Abogil
29/10/2006, 13h22
Citation Envoyé par john five
159 lignes (pas plus de 30ko)

Merci bien pour ton code j'ai essayer et j'ai cet erreur :

mysql : probleme de selection de base (erreur 4)
pourtant la requete est correcte.

Merci.
Je me suis planté.
Il faut remplacer : "while(list($key, $data) = each($Tab_gallerie))"
Par "while(list($Count, $data) = each($Tab_gallerie))"

Remplace aussi "while ($donnees = mysql_fetch_array($reponse) or die("mysql : probleme de selection de base (erreur 4)") )"
Par "while ($reponse && $donnees = mysql_fetch_array($reponse))

Après : $reponse = mysql_query("SELECT ...
Ajoute la ligne suivante : echo "\$reponse=$reponse
"\n;

159 lignes : ta table est minuscule. Utilise mon script (après corrections).

john five
29/10/2006, 12h50
Ta table est-elle grosse ?
159 lignes (pas plus de 30ko)

Merci bien pour ton code j'ai essayer et j'ai cet erreur :

mysql : probleme de selection de base (erreur 4)
pourtant la requete est correcte.

Merci.

Abogil
29/10/2006, 12h13
Ta table est-elle grosse ?
Si oui, je sèche.
Si non, voici une méthode qui devrait fonctionner à tous les coups : il s'agit de réaliser la collete des data et de les mettre dans un tableau.
Ensuite on lit le tableau et on inscrit les data dans gallerie2.
Code:
mysql_connect("$serveur", "$user", "$mdp") or die("mysql : probleme de selection de base (erreur 1)"); // Connexion à MySQL
mysql_select_db("$table") or die("mysql : probleme de selection de base (erreur 2)");

$reponse = mysql_query("SELECT * FROM gallerie ORDER BY id ") or die("mysql : probleme de selection de base (erreur 3)"); // Requête SQL 

$Tab_gallerie = array();
$Count = 0;
while ($donnees = mysql_fetch_array($reponse) or die("mysql : probleme de selection de base (erreur 4)") )
   {
   $Count = $Count + 1;
   $Tab_gallerie["$Count"]['id']     = $donnees['id'];
   $Tab_gallerie["$Count"]['nom']    = $donnees['nom'];
   $Tab_gallerie["$Count"]['album']  = $donnees['album'];
   $Tab_gallerie["$Count"]['texte']  = $donnees['texte'];
   $Tab_gallerie["$Count"]['format'] = $donnees['format'];
   }

reset ($Tab_gallerie);
while(list($key, $data) = each($Tab_gallerie))
   {
   $id     = $Tab_gallerie["$Count"]['id'];
   $nom    = $Tab_gallerie["$Count"]['nom'];
   $album  = $Tab_gallerie["$Count"]['album'];
   $texte  = $Tab_gallerie["$Count"]['texte'];
   $format = $Tab_gallerie["$Count"]['format'];

   // On ajoute une entrée avec mysql_query
   mysql_query("INSERT INTO gallerie2 VALUES('', '$nom', '$format', '$texte', '$album', '$id')") or die("mysql : probleme de selection de base (erreur 5)");
   }

mysql_close();
Qu'en penses-tu ?

john five
29/10/2006, 11h31
Regarde si le nombre de champs que tu insères, et leur type, correspond bien à la structure de ta table.
Oui, la boucle s'execute une fois et insert bien les données.
Le problème est pourquoi elle ne s'execute qu'une fois ?

Pourrais-tu nous donner la structure exacte des deux tables
http://img150.imageshack.us/img150/7019/tablebf3.jpg
le 1er tableau represente la table gallerie
le 2eme tableau represente la table gallerie2 (on peut voir d'ailleurs la seul insertion que fait la boucle)
Les fleches represente la reorganisation que je vourait faire.

Le resultat du script de abogil :

gallerie : 1 - $Nom_col=id - $Type_col=int(11)
gallerie : 2 - $Nom_col=nom - $Type_col=varchar(255)
gallerie : 3 - $Nom_col=format - $Type_col=varchar(255)
gallerie : 4 - $Nom_col=texte - $Type_col=varchar(255)
gallerie : 5 - $Nom_col=album - $Type_col=varchar(255)

gallerie2 : 1 - $Nom_col=id - $Type_col=int(11)
gallerie2 : 2 - $Nom_col=nom - $Type_col=varchar(255)
gallerie2 : 3 - $Nom_col=format - $Type_col=varchar(255)
gallerie2 : 4 - $Nom_col=texte - $Type_col=varchar(255)
gallerie2 : 5 - $Nom_col=album - $Type_col=varchar(255)
gallerie2 : 6 - $Nom_col=orderid - $Type_col=varchar(255)

Abogil
29/10/2006, 11h04
Pourrais-tu nous donner la structure exacte des deux tables :
Code:
   $fh_db=mysql_connect($DBhost, $DBowner, $DBpw); 
   $sel=mysql_select_db($DBName); 

   $Table = "gallerie";
   $sql_query_col="SHOW COLUMNS FROM $Table"; 
   $result_col=mysql_query($sql_query_col); 
   $Count = 0;
   while ($result_col && $row=mysql_fetch_array($result_col)) 
      { 
      $Count = $Count + 1;
      $Nom_col  = $row[0];
      $Type_col = $row[1];
      echo "$Table : $Count  - \$Nom_col=$Nom_col - \$Type_col=$Type_col 
\n"; } $Table = "gallerie2"; $sql_query_col="SHOW COLUMNS FROM $Table"; $result_col=mysql_query($sql_query_col); $Count = 0; while ($result_col && $row=mysql_fetch_array($result_col)) { $Count = $Count + 1; $Nom_col = $row[0]; $Type_col = $row[1]; echo "$Table : $Count - \$Nom_col=$Nom_col - \$Type_col=$Type_col
\n"; }

Abogil
29/10/2006, 11h01
Voir le message suivant.

Shadow aok
29/10/2006, 10h41
Comment veux-tu que je le sache ?
Regarde si le nombre de champs que tu insères, et leur type, correspond bien à la structure de ta table.

john five
29/10/2006, 09h01
J'ai fait cet modif :

Code PHP:

mysql_connect
("$serveur""$user""$mdp") or die("mysql : probleme de selection de base (erreur 1)"); // Connexion à MySQL
mysql_select_db("$table") or die("mysql : probleme de selection de base (erreur 2)");



$reponse mysql_query("SELECT * FROM gallerie ORDER BY id ") or die("mysql : probleme de selection de base (erreur 3)"); // Requête SQL 







while ($donnees mysql_fetch_array($reponse) or die("mysql : probleme de selection de base (erreur 4)") )

    

     {

$nom $donnees['nom'];

$album $donnees['album'];

$txt $donnees['texte'];

$scr $donnees['nom'];

$id $donnees['id'];



$format $donnees['format'];

// On ajoute une entrée avec mysql_query
mysql_query("INSERT INTO gallerie2 VALUES('', '$nom', '$format', '$txt', '$album', '$id')") or die("mysql : probleme de selection de base (erreur 5)");





    }






mysql_close(); 
mysql me renvoie:
mysql : probleme de selection de base (erreur 5)
c'est à dire la requete d'insertion dans la nouvelle table.
pourquoi ?

Shadow aok
29/10/2006, 08h40
Tu ne fais qu'une connexion par script donc c'est forcément ton script
Rajoute des or die('bla bla'); après tes appels à mysql (connect, query) et regardes un peu où ça coince

john five
29/10/2006, 08h33
Alors voilà, j'ai un petit problème.
J'aimerais évoluer un peu ma table en ajoutant un champs en fin de table, et reoganiser un peu ce qu'il ya dedans de cet façon :
Image d'explication

J'ai donc ecrit ce petit script :

Code PHP:
mysql_connect("$serveur""$user""$mdp"); // Connexion à MySQL
mysql_select_db("$table");



$reponse mysql_query("SELECT * FROM gallerie ORDER BY id "); // Requête SQL







while ($donnees mysql_fetch_array($reponse) )

    

     {

$nom $donnees['nom'];

$album $donnees['album'];

$txt $donnees['texte'];

$scr $donnees['nom'];

$id $donnees['id'];



$format $donnees['format'];

// On ajoute une entrée avec mysql_query
mysql_query("INSERT INTO gallerie2 VALUES('', '$nom', '$format', '$txt', '$album', '$id')");





    }


mysql_close(); 
L'idée est simple je fait autant de boucle que d'entrée dans ma 1ere table, puis je ré-insert chacune des variables de la 1ere tables dans la 2eme.

Le problème c'est que la boucle ne s'execute qu'une fois.
Cela vient t-il de mon script ou d'une limite de connexion simultanée du serveur SQL ?

Merci.