update de tous les champs

hak
Invité n'ayant pas de compte PHPfrance

03 déc. 2006, 17:42

Bonjour à tous,

un petit problème sur un script fait maison :

Alors voila, j'ai une base de donnée déjà remplit et pour une affaire de facilité je voudrai mettre le contenu d'un champs de toute la base en majuscule et nettoyage des accents, parenthèse guillemets etc etc .

j'ai fais un script et au lieu de changer le contenu de chaque champs un par un , il me change le contenu de tous les champs avec le contenu du premier champs.

ce qui fait que le contenu du champs de toute la base est le même.

exemple :

voici ce que je voudrai que ça fasse :

id1
champs = à l'école ==>transfromé en champs = A L ECOLE

id2
champs = général (major ) ==>transfromé en champs = GENERAL MAJOR

id3
champs = mon "<ah bon>" ==> transfromé en champs = MON AH BON

mais avec le script ci_dessous je me retrouve avec :

id1
champs = à l'école ==>transfromé en champs = A L ECOLE

id2
champs = général (major ) ==>transfromé en champs = A L ECOLE

id3
champs = mon "<ah bon>" ==> transfromé en champs = A L ECOLE



mon code :

Code : Tout sélectionner

<?php require ("config.php"); @ $db = mysql_pconnect ("$dbhost","$dbuser","$dbpasswd")or die ("erreur de connexion"); mysql_select_db("$dbname",$db)or die ("erreur de connexion base"); $query="SELECT champs FROM table where champs !=''"; $result=mysql_query($query) or die(); $num_results = mysql_num_rows($result); for ($i=0;$i<$num_results;$i++) { $row=mysql_fetch_array($result); $find = array(' ', '"', '&', '\r\n', '\n', '/', '\\', '+', '<', '(', ')', '"', '>', 'é', 'è', 'ë', 'ê', 'É', 'È', 'Ë', 'Ê', 'í', 'ì', 'î', 'ï', 'Í', 'Ì', 'Î', 'Ï', 'ó', 'ò', 'ô', 'Ó', 'Ò', 'Ô', 'á', 'à', 'â', 'Á', 'À', 'Â', 'ú', 'ù', 'û', 'Ú', 'Ù', 'Û', 'ß', 'ç', 'ü', 'Ü', 'ä', 'Ä', 'ö', 'Ö', '\'', '--', '-', 'Ç', '_', ','); $remplace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'A', 'A', 'A', 'A', 'A', 'A', 'U', 'U', 'U', 'U', 'U', 'U', 'SS', 'C', 'U', 'U', 'A', 'A', 'O', 'O', ' ', ' ', ' ', 'C', ' ', ' '); $findes = array(' '); $remplacees = array(' '); $sil=$row["champs"]; $sil = strtoupper($sil); $sil=str_replace($find,$remplace,$sil); $sil=str_replace($findes,$remplacees,$sil); $querys = "update table set champs ='$sil'" } mysql_close($db); ?>
merci de votre je suis ko .

Eléphant du PHP | 136 Messages

04 déc. 2006, 16:21

il faudrait indexer par rapport à la boucle
$sil=str_replace($find[$i],$remplace[$i],$sil);
L'informatique apporte des solutions à des problèmes qui ne se posaient pas avant qu'elle existe.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 déc. 2006, 19:39

Script pas super optimisé mais puisqu'il ne servira qu'une seule fois (en principe) ça fera l'affaire.

Ce qui cloche est surtout l'initialisation des tableaux $find et $remplace à deux reprises (dont une fois à vode)

Ensuite il te faut également récupérer l'identifiant unique de chaque ligne de données (appelé "id" le plus souvent)
$querys = "update table set champs ='".$sil."' WHERE id = ".$sil=$row["id"];
Pour ne mettre à jour que le champ concerné

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute