Page 1 sur 1

boucle dans une requete mysql

Posté : 05 nov. 2005, 19:04
par yuuzhantar
bonjour

j'ai un petit problème avec une requête sql

voici le code
<?
mysql_connect('sql.free.fr','*****','7*******');
mysql_select_db('******');
$init = mysql_query("DELETE FROM a_ban_active");
$init2 = mysql_query("ALTER TABLE a_ban_active AUTO_INCREMENT=0");
$active = mysql_query("SELECT ban_id, user_id FROM a_ban WHERE ban_credits>0");
while($insert = mysql_fetch_assoc($active))
{
mysql_query("INSERT INTO a_ban_active VALUES('',$insert['user_id'],$insert['ban_id'])");
}
mysql_close();
?>
et en affichant la page

sa me met sa
T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/sdc/0/8/yuu.sw/echange/frames/frame_ban_1.php on line 29
la ligne 29 est celle ci
mysql_query("INSERT INTO a_ban_active VALUES('',$insert['user_id'],$insert['ban_id'])");

qu'est ce qui ne vas pas ???

Posté : 05 nov. 2005, 19:35
par yuuzhantar
personne ne peut m'aider ???

Posté : 05 nov. 2005, 19:39
par jeff
essaye comme ceci
mysql_query('INSERT INTO a_ban_active VALUES("",'.$insert['user_id'].','.$insert['ban_id'].')"');

Posté : 05 nov. 2005, 19:42
par yuuzhantar
nan

sa ne marche toujours pas
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/sdc/0/8/yuu.sw/echange/frames/frame_ban_1.php on line 29

Posté : 06 nov. 2005, 03:07
par Truc
décompose et regarde ce que donne la requete génèrée:
$sql="INSERT INTO a_ban_active VALUES('',".$insert['user_id'].",".$insert['ban_id'].")";
mysql_query($sql);
en passant il me semble que les variables sont des id donc numérique donc pas de quotes

Posté : 06 nov. 2005, 03:21
par X_a_v_i_e_r
Bah, un peu avant ta ligne, tu tapes
while ($insert = mysql_fetch_assoc($active)) {
$userid=$insert['user_id'];
$banid=$insert['ban_id'];

 $sql="INSERT INTO a_ban_active VALUES('',"$userid","banid")"; 
mysql_query($sql);
}
Si tu as des conditions, tu les rajoutes après le while, et hop !

Non ? Enfin, bien sur, c'est un par un moi que je verrais ça...

Tu peux juste préciser pourquoi tu fais une boucle ?

Posté : 06 nov. 2005, 04:50
par Ultiny
J'ai essayé de faire ça mais j'ai une petite erreur sur la requête.

J'ai la flème de la corriger, si quelqu'un passe par là, peut-être qu'il pourra te modifier ça.

Enfin ça c'est ma vision de ton script, à toi de voir ce que ça vaut.
<?php

$cct = mysql_connect("localhost", "root", "");
mysql_select_db("try", $cct);

class __Req_Sql {
	var $insert;
	var $sql = array();
	var $init = array();

	function sql() {
		$this->init[] = "SELECT ban_id, user_id FROM a_ban WHERE ban_credits='3'";
		$this->init[] = "INSERT INTO a_ban_active VALUES ('', ".$this->insert["user_id"].", ".$this->insert["ban_id"].");";
		
		foreach ($this->init as $this->sql) {
			while ($this->insert = mysql_fetch_array(mysql_query($this->sql[0]))) {
				mysql_query($this->sql[1]);
			}
		}
	}
}

$req = new __Req_Sql;

if ($req->sql()){
	echo "Success";
}
else {
	echo "Unable";
}

mysql_close(); 

?>

Posté : 06 nov. 2005, 09:57
par Cyrano
Pourquoi faire deux requêtes où une seule suffirait ???

Là, tu fais une première requête e'extraction de données suivie d'une requête d'insertion: tu pourrais combiner les deux en une seule et unique requête sans faire la moindre boucle. Ça ressemblera à ceci:
$transfert = "INSERT INTO `a_ban_active`(`a_user_id`, `a_ban_id`) SELECT ban_id, user_id FROM a_ban WHERE ban_credits > 0";
Note, ajuste les noms des champs dans lesquels tu insères les données, comme on indique pas de clé primaire, il faut précider les champs sur lesquels on effectue l'opération.

Posté : 06 nov. 2005, 16:16
par yuuzhantar
maintenant j'ai ceci
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/sdc/0/8/yuu.sw/echange/frames/frame_ban_1.php on line 8

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/sdc/0/8/yuu.sw/echange/frames/frame_ban_1.php on line 39

Warning: mt_rand() expects parameter 2 to be long, string given in /var/www/sdc/0/8/yuu.sw/echange/frames/frame_ban_1.php on line 42
la ligne 8 est
$resultats = mysql_fetch_assoc($envoie);
la ligne 39 est
$compter2 = mysql_num_rows($compter1);
et la ligne 42 est :
$rand = mt_rand(0,'$compter2');
je vous mais le code en entier

ligne 3
<?
mysql_connect('sql.free.fr','xxx','xxx');
mysql_select_db('yuu_sw');
$select = "SELECT ban_id, user_id, ban_fond, ban_color, ban_color2, ban_credits, ban_affichage FROM a_ban WHERE ban_id='$frame_id'";
$envoi = mysql_query($select);
$resultats = mysql_fetch_assoc($envoie);

$id1 = $resultats['ban_id'];
$id2 = $resultats['user_id'];
$fond = $resultats['ban_fond'];
$color = $resultats['ban_color'];
$color2 = $resultats['ban_color2'];
$credits1 = $resultats['ban_credits'];
$affiche = $resultats['ban_affichage'];

mysql_close();
?>

<?
mysql_connect('sql.free.fr','xxx','xxx');
mysql_select_db('yuu_sw');
$init = mysql_query("DELETE FROM a_ban_active");
$init2 = mysql_query("ALTER TABLE a_ban_active AUTO_INCREMENT=0");
$active = mysql_query("SELECT ban_id, user_id FROM a_ban WHERE ban_credits>0");
while($insert = mysql_fetch_assoc($active))
{
$sql="INSERT INTO a_ban_active VALUES('',".$insert['user_id'].",".$insert['ban_id'].")"; 
mysql_query($sql); 
}
mysql_close();
?>

<?
mysql_connect('sql.free.fr','xxx','xxx');
mysql_select_db('yuu_sw');
$compter1 = mysql_query("SELECT FROM a_ban_active");
$compter2 = mysql_num_rows($compter1);

$nombre = '$compter2';
$rand = mt_rand(0,'$compter2');

$select_active = mysql_query("SELECT ban_id FROM a_ban_active WHERE active_id='$rand'");
$resultat_active = mysql_fetch_assoc($select_active);
$ban_id_active = '$resultat_active';

$emp = mysql_fetch_assoc(mysql_query("SELECT ban_id, ban_emp, ban_lien, ban_credits, ban_affiche FROM a_ban WHERE ban_id='$ban_id_active'"));

$id3 = $emp['ban_id'];
$ban_emp = $emp['ban_emp'];
$ban_lien = $emp['ban_lien'];
$credits2 = $emp['ban_credits'];
$affiche = $emp['ban_affiche'];

mysql_close();
?>
<?
$new_credits1 = $credits1+1;
$new_credits2 = $credits2-1;
$new_affichage = $affichage+1;
$new_affiche = $affiche+1;

mysql_connect('sql.free.fr','xxx','xxx');
mysql_select_db('yuu_sw');
mysql_query("UPDATE a_ban SET ban_credits='$new_credits1' WHERE ban_id='$id1'");
mysql_query("UPDATE a_ban SET ban_credits='$new_credits2' WHERE ban_id='$id3'");
mysql_query("UPDATE a_ban SET ban_affiche='$new_affiche' WHERE ban_id='$id3'");
mysql_query("UPDATE a_ban SET ban_affichage='$new_affichage' WHERE ban_id='$id1'");

mysql_close();
?>
qu'est ce qui ne vas pas ?????