insertion en boucle

Eléphant du PHP | 187 Messages

10 oct. 2011, 13:58

salut,
SVP je vous explique mon problème:
j'ai fait une boucle d'insert correcte ,après j'ai voulu qu'un champ 'médecin' je voulais le séparer pour enregistrer son id indépendamment dans un autre champ(déjà 'médecin' contient cette format: nom+prenom+(id))
alors j'ai utilisé la fonction explode comme ceci pour obtenir un var d'id que je vais insérer:
$m = explode ('(' ,$nom[$i]);
	$m1 = $m[1] ;
	$m2 = explode (')' , $m1  );
	$m3 = trim($m2[0]);
    echo $m3;//içi il m'affiche tout les id
code'insert:
for($i=0;$i<$nb;$i++){
	$sql='INSERT INTO aff(liste,cyc_visite,datetime,region,ville,secteur,nomm,nom,code,pharam_id) VALUES("'.addslashes($_POST['liste']).'","'.addslashes($_POST['cyc_visite']).'","'.addslashes($_POST['datetime']).'","'.addslashes($_POST['region']).'","'.addslashes($_POST['ville']).'","'.addslashes($_POST['secteur']).'","'.addslashes($_POST['nomm']).'","'.addslashes($nom[$i]).'","'.addslashes($code3).'","'.addslashes($m3[$i]).'")';
Et ça marché cad :si j'effectue une insert dans ma DB je trouve le champ médecin remplie ainsi que l'id ,mais le souci c'est qu'un seul ID qui s'enregistre et non l'id de tout les médecins enregistrés!
par exemple:
si j'enregistre 3 médeicns,voilà ce que je trouve dans la DB(le dernier id qui s’enregistre):
medecin1 : xxx id: 0
medecin2: yyy id:0
medeccin3: zzz id=1

je sais que c'est compliqué un petit peu mas prière si quelqu’un peut m'aider sera gentil

ViPHP
xTG
ViPHP | 7331 Messages

10 oct. 2011, 14:51

Tu fais un echo de $m3 j'en déduis donc que ce n'est pas un array.
Or tu l'utilises comme tel. Où est l'erreur ? Ta façon de l'afficher ou de l'utiliser ?

Eléphant du PHP | 187 Messages

10 oct. 2011, 16:45

voilà ce qu'est s'affiche en cas d'insertion:
7Array7) Array-----> Nommedecin1 prenom (7)
2Array2) Array-----> Nommedecin2 prenom (2)
1Array1) Array-----> Nommedecin3 prenom (1)

Notice: Uninitialized string offset: 1 in C:\wamp\www\site\fishier\cycle.php on line 176

Notice: Uninitialized string offset: 2 in C:\wamp\www\site\fishier\cycle.php on line 176
Insertion dans la base de donnees est ok .
la ligne 176:
$sql='INSERT INTO aff(liste,cyc_visite,datetime,region,ville,secteur,nomm,nom,code,pharam_id) VALUES("'.addslashes($_POST['liste']).'","'.addslashes($_POST['cyc_visite']).'","'.addslashes($_POST['datetime']).'","'.addslashes($_POST['region']).'","'.addslashes($_POST['ville']).'","'.addslashes($_POST['secteur']).'","'.addslashes($_POST['nomm']).'","'.addslashes($nom[$i]).'","'.addslashes($code3).'","'.addslashes($m3[$i]).'")';
Mon souci c'est que un seul et seul ID(dans cet exemple le num 1) qui s'enregistre dans le champ pharam_id et non TOUT les id(7,2) de tout les médecins entrés! m
j'espère seulement me dire comment faire pour que ma boucle enregistre l'id de chaque médecin enregsitrée?
MERCI A VOUS

ViPHP
xTG
ViPHP | 7331 Messages

10 oct. 2011, 18:37

On voit déjà deux erreurs d'index, donc il y a fort à parier que ton array n'est pas comme tu l'attends.
En cas de valeur manquante il est donc normal de se retrouver avec un id égal à 0.

Utilises la fonction print_r() pour afficher le contenu de ton array.

Eléphant du PHP | 187 Messages

10 oct. 2011, 19:01

voilà il m'affiche qu'un seul id et non le tableau! :(
et voilà qui empêche les autres id à se récupérer:
Notice: Uninitialized string offset: 1
Notice: Uninitialized string offset: 2
..alors j'ai cherché beaucoup sur ce type d'erreur et j'ai pas vraiment trouvé une solution pour mon cas! :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 oct. 2011, 21:47

salut,

Utilise une boucle foreach pour parcourir le tableau et faire la requete à chaque fois

en gros
<?php
foreach( $tablo as $ligne) {
// le explode
// la erquete sql
}
?>
Modifié en dernier par moogli le 15 oct. 2011, 19:39, modifié 1 fois.
Il en faut peu pour être heureux ......

Eléphant du PHP | 187 Messages

12 oct. 2011, 14:30

merci moogli pour ta réponse,j'ai essayé d'ajouter foreach mais il me donne cet erreur:
Warning: Invalid argument supplied for foreach() in C:\wamp\www\fishier\fichier1.php on line 141
Insertion dans la base de données est ok
ligne : foreach( $nom[$i] as $i) {
le $nom[$i] c'mon tableau déja declaré

encore merci pour votre aide apprécié et toutes mes excusés.

Eléphant du PHP | 187 Messages

13 oct. 2011, 14:53

voilà c'est réglé!mais je sais pas pourquoi il m'enregistre que le 1er chiffre de chaque code par exemple le code 123 il prends que le 1 :cry:
voilà mon code please si quelqu'un peut en jeter un coup d’œil pour voir pourquoi j'arrive pas à enregistrer toute la 3éme partie d'un champ sélectionné dans mon table : :(

if(isset($_POST['submit']))
	{
   if (!empty($_POST['cyc_visite'])  && !empty($_POST['nomm']) &&   !empty($_POST['liste']) && !empty($_POST['nom'])) {

	$nomM="";
		foreach($_POST['nom'] as $v)
		   $nomM.=$v."/";
		$code=explode('(',$_POST['nomm']);
		$code1=$code[1];
		$code2=explode(')',$code1);
		$code3=trim($code2[0]);

// pour compter le NB d'element slectionné				
		$nom = $_POST['nom'];
		$nom_text = implode(',',$nom);
	        $nb=sizeof($nom);
	        $i=0;
	echo "Nombre des elements selectione  : $nb <br> <br>";
	 //pour séparer le champ $nom afin d'en extraire et enregistrer juste sa 3eme partie cad: le chiffre entre ()
	for($i=0;$i<$nb;$i++){
	$m = explode ('(' ,$nom[$i]);
	$m1 = $m[1] ;
	$m2 = explode (')' , $m1  );
	$m3 = trim($m2[0]);
    echo $m3 ."</br>";
	 print_r($m3[$i])  ."</br>";


//$nom[$i]: c'est le tableau où je stocke les éléments selectionnés pour les enregistrer un par un après via une boucle 
	echo "-----> $nom[$i] <br> ";	
	
	//insert
	$sql='INSERT INTO aff(liste,cyc_visite,datetime,region,ville,secteur,nomm,nom,code,pharam_id) VALUES("'.addslashes($_POST['liste']).'","'.addslashes($_POST['cyc_visite']).'","'.addslashes($_POST['datetime']).'","'.addslashes($_POST['region']).'","'.addslashes($_POST['ville']).'","'.addslashes($_POST['secteur']).'","'.addslashes($_POST['nomm']).'","'.addslashes($nom[$i]).'","'.addslashes($code3).'","'.addslashes($m3[0]).'")';
		
	$rs = mysql_query($sql) or die("requete incorecte");
	}
	echo "Insertion dans la base de donnees est ok	<br> ";	
			
        if(isset($qer)){
            echo '<h2 style="color:green;font-size:8" >La Visite a ete Bien Enregistree</h2>';
        }else{
            echo mysql_error();
        }

    }else {
        
        echo '<h3 class="jaw">Les champs * sont obligatoires </h3>';
    
    }
}

?>

Eléphant du PHP | 187 Messages

13 oct. 2011, 15:20

enfin!! :D voilà il faut faire ça : addslashes($m3) et non '.addslashes($m3[$i]).'"
si jamais quelqu’un a le même problème il peut suivre mes étapes de code..
Merci.

ViPHP
ViPHP | 5462 Messages

13 oct. 2011, 16:12

c'est pas addslashes mais mysql_real_escape_string qu'il faut faire

Eléphant du PHP | 187 Messages

13 oct. 2011, 17:16

c'est quoi la différence svp ? parce que dans tout mon projet j'ai utilisé addslashes ??

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 oct. 2011, 19:41

mysql_real_escape_string
addslashes

la différence est indiquée dans la doc.

si tu ne veux pas lire, en gros l'un est fait pour l'autre sert a ajouter de \ devant certainnes valeur mais forcément toute celle qui peuvent poser problème en SQL !


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 187 Messages

17 oct. 2011, 14:28

hmmm donc c'est pour cela dans ma BD certains donnés comme les accents sont transformé en des caractères de genre @..
alors faut que je remplace le addelashes par mysql_real_escape_string ?
Merci à vous .

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 oct. 2011, 11:24

non, ça c'est un problème d'encodage XD

regarde dans les tutos y a une explication.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 187 Messages

18 oct. 2011, 13:04

Ok.merci