probleme boucle... grosse boucle... voir probleme à la fin

probleme boucle... grosse boucle... voir probleme à la fin - PHP - Programmation

Marsh Posté le 02-03-2006 à 01:42:40    

voila je fais une boucle pour rechercher des enregistrements que j'appelle $machin, ensuite je cree une table du nom de $machin puis je colle tous les enregistrements dans cette nouvelle table or ca plante
 
Ce fichier est inclus dans un autre qui cherche la variable $machin

Citation :


<?
 
 echo $machin;
 $sql = mysql_query(" CREATE TABLE `basededonnees`.`$machin` (`date` timestamp NOT NULL ,`insertion` varchar( 20 ) NOT NULL default '',`type` varchar( 25 ) NOT NULL default '',`motcle` varchar( 255 ) NOT NULL default '',`description` varchar( 255 ) NOT NULL default '',`match` varchar( 255 ) NOT NULL default '',`truc` smallint( 2 ) NOT NULL default '0',`url` varchar( 250 ) NOT NULL default '',UNIQUE KEY `url` ( `url` ) ) ENGINE = MYISAM DEFAULT CHARSET = utf8 " )  or die("yyy".mysql_error() );
   { // SELECTION ORIGINE
   $origine = " SELECT *  FROM `moteur` WHERE `description` LIKE '%$machin%' OR `match` LIKE '%$machin%' OR `motcle` LIKE '%$machin%' ";
   $truc = mysql_query($origine,$link)  or die("xxx".mysql_error() );
   while($row = mysql_fetch_row($truc)) // ICI CA PLANTE
    {
    $date = $row["date"];
    echo $date;
    $insertion = $row["insertion"];
    $type = $row["type"];
    $motcle=$row["motcle"];
    $description = $row["description"];
    $match = $row["match"];
    $truc = $row["truc"];
    $url = $row["url"];
    $sql = mysql_query("INSERT INTO `$machin` (`date` , `insertion` , `type` , `motcle` , `description`, `match`,  `truc` , `url`) VALUES (  '$date', '$insertion', '$type', '$motcle', '$description', '$match', '$truc', '$url')" );
    }
   }
?>
 


 
Voici le message d'erreur :
cartoon
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/sdb/3/8/HOST/TRANSFERT.php on line 8
 
Je sèche là...
Pouvez m'aider ?
 
Merci


Message édité par erwan83 le 02-03-2006 à 19:37:24

---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 01:42:40   

Reply

Marsh Posté le 02-03-2006 à 13:45:24    

essaie mysql_fetch_array


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 02-03-2006 à 14:00:44    

et comment tu initialises $truc?
 
parce que l'erreur est quand même assez parlante ...

Reply

Marsh Posté le 02-03-2006 à 14:29:30    

et mysql_error(); il dit quoi??

Reply

Marsh Posté le 02-03-2006 à 14:43:24    

et le plus simple ça serait de faire ça sans boucle avec une seul requête
 
INSERT INTO monautretable SELECT ... FROM matable
 
voir http://dev.mysql.com/doc/refman/5. [...] elect.html :)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 02-03-2006 à 14:57:08    

Code :
  1. $truc = $row["truc"];


et tu utilises $truc avec mysql_fetch_row...
utilise un autre variable.
 
et au lieu de faire $champ = $row['champ'] essaye la fonction http://fr.php.net/extract tu gagneras 7 lignes

Reply

Marsh Posté le 02-03-2006 à 14:59:30    

anapajari > là l'erreur elle lui dit que ce qu'il passe en argument n'est pas valide. Donc c'est que la réponse de sa requête n'est pas valide.
 
déjà il n'y a qu'un argument à mysql_fetch_row()
ensuite avec fetch row ca te renvoit un tableau et tu dois écrire $row[1]
 
pour associé avec le nom de ton champ c fetch_array ou fetch_assoc.


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 02-03-2006 à 15:15:27    

newneo2001 a écrit :

Donc c'est que la réponse de sa requête n'est pas valide.

si la requete n'était pas valide le script s'arreterait avec le die, c'est $truc qui n'est pas valide après la première itération du while.
sinon tu as raison pour le reste (fetch_array)

Reply

Marsh Posté le 02-03-2006 à 15:18:54    

avec le SELECT INSERT il serait quand même moins emmerdé, et c'est autrement plus rapide qu'une boucle dégueulasse de requêtes..


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 02-03-2006 à 15:19:44    

oui j'avais pas vu le die.


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 02-03-2006 à 15:19:44   

Reply

Marsh Posté le 02-03-2006 à 15:20:24    

Sh@rdar a écrit :

avec le SELECT INSERT il serait quand même moins emmerdé, et c'est autrement plus rapide qu'une boucle dégueulasse de requêtes..

on est bien d'accord, mais la plupart des hebergeurs sont encore à la version 3 de mysql

Reply

Marsh Posté le 02-03-2006 à 15:22:20    

soju a écrit :

on est bien d'accord, mais la plupart des hebergeurs sont encore à la version 3 de mysql


 
ça marche avec une version 3, c'est même la base pour copier une table


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 02-03-2006 à 15:27:37    

Sh@rdar a écrit :

ça marche avec une version 3, c'est même la base pour copier une table

oups j'aurais mieux fait de me taire :jap:  

Reply

Marsh Posté le 02-03-2006 à 18:08:58    

anapajari a écrit :

et comment tu initialises $truc?
 
parce que l'erreur est quand même assez parlante ...


 

Citation :

$origine = " SELECT *  FROM `moteur` WHERE `description` LIKE '%$machin%' OR `match` LIKE '%$machin%' OR `motcle` LIKE '%$machin%' ";  
   $truc = mysql_query($origine,$link)


 
voila...


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 18:13:25    

OH LA LA OH LALA
Bon je me vois dans l'obligation de donner qques explications
 
Pour newneo2001:
dans cette requete :
$origine = " SELECT *  FROM `moteur` WHERE .......
les reponses existent

 
pour Sh@rdar  
(avec le SELECT INSERT  ...)
aurais tu un exemple d'utilisation ?
 
SINON BEN...
l'erreur ne vous dit toujours rien ?


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 18:16:07    

erwan83 > $origine = " SELECT *  FROM `moteur` WHERE .......
les reponses existent  
 
oui elles existent mais elle ne sont pas associées à un tableau comme tu le demandes apres. Tu as qu'à remplacer ton fetch_row déjà


Message édité par newneo2001 le 02-03-2006 à 18:17:38

---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 02-03-2006 à 18:17:10    

bon je vais remplacer le fetch row par fetch array alors
Vroummmmmmm
je vous tiens au courant


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 18:22:25    

avec fetch array ca donne ca :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource .....


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 18:28:52    

le INSERT SELECT c'est pas bien compliqué
 
c'est jamais qu'un SELECT standard, sauf que les lignes retournées seront insérées dans l'autre table [:spamafote]
 
l'exemple le plus simple
 
INSERT INTO Table2 (Id,bidule) SELECT Id,Truc FROM Table1
 
sachant que sur la partie select tu peux faire tout ce que tu veux comme un select normal (jointures, conditions etc)


Message édité par Sh@rdar le 02-03-2006 à 18:30:11

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 02-03-2006 à 18:31:21    

bizarre car si le retour n'est pas bon c'est que ca vient de ta requete mais si ca venait de ta requete ca serait bloqué apres le die().
 
Il faudrait revoir un peu ton code et ce qu'il y a tes tables
 
Mais si c'est pour recopier une DB alros regarde du coté de SELECT INSERT comme te l'as dit Sh@rdar


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 02-03-2006 à 18:32:25    

suis entrain d'experimenter le INSERT SELECT...


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 18:44:22    

Le code

Citation :

$sql = mysql_query(" SELECT * FROM `moteur` WHERE `description` LIKE '%$machin%' OR `match` LIKE '%$machin%' OR `motcle` LIKE '%$machin%' INSERT INTO `$machin` " )  or die("xxx".mysql_error() );


 
L'erreur

Citation :

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 'INSERT INTO `cartoon`' at line 1...


 
Heu...


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 19:02:56    

pas le bon ordre (ok on s'est confusés un peu mais y'a une doc hein :o)
 
INSERT INTO .. SELECT


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 02-03-2006 à 19:04:19    

Arghhhh (rxpression d'un cri rauqye et gloque)
Justement m'en suis rendu compte.
Suis entrain de retablir tout ça


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 19:35:24    

J'en suis où ?
 
le code

Citation :

$sql = mysql_query(" INSERT INTO `$machin` (`url` , `description` , `motcle`) SELECT (`url` , `description` , `motcle`) FROM `moteur` WHERE blablabla" )  or die("xxx".mysql_error() );


l'erreur

Citation :

Operand should contain 1 column(s)


explication de la doc

Citation :

Message = "Operand should contain 1 column(s)"
 
This error will occur in cases like this:  
SELECT (SELECT column1, column2 FROM t2) FROM t1;
 
It's okay to use a subquery that returns multiple columns, if the purpose is comparison. See section 6.4.2.7 Row Subqueries. But in other contexts the subquery must be a scalar operand.


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 20:04:21    

Si tu crées la table juste avant d'inserer tes lignes, tu as la solution du CREATE TABLE ... SELECT

Reply

Marsh Posté le 02-03-2006 à 20:07:42    

Heu... mais si qu'elqu'un pouvait m'expliquer le pourquoi de l'erreur...
pourquoi in ne veut pas plus d'une colonne et ou se trouve le probleme ?
J'y suis presque mais je patine à vide


---------------
http://www.ypikay.com
Reply

Marsh Posté le 02-03-2006 à 22:03:08    

bon, alors copier coller du vrai code plus structure de la base :o
 
ton select il retourne quelque chose au moins ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 02-03-2006 à 22:05:40    

Sh@rdar a écrit :

bon, alors copier coller du vrai code plus structure de la base :o
 
ton select il retourne quelque chose au moins ?


ben oui... encore heureux


---------------
http://www.ypikay.com
Reply

Marsh Posté le 03-03-2006 à 09:43:43    

c'est dans ta requete l'erreur, il ne faut pas de parenthèses autour des champs de ton select:

Code :
  1. INSERT INTO `$machin` (`url` , `description` , `motcle`) SELECT `url` , `description` , `motcle` FROM `moteur` WHERE blablabla


Reply

Marsh Posté le 05-03-2006 à 21:53:54    

Merci merci
je reviens de WE je vais essayer ca tout de suite


---------------
http://www.ypikay.com
Reply

Marsh Posté le 05-03-2006 à 22:01:10    

BINGO Ca marche
Merci à tous !!!


---------------
http://www.ypikay.com
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed