Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/05/2011, 15h36   #1
Invité régulier
 
Inscription : février 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 69
Points : 6
Points : 6
Par défaut Case à cocher à choix multiple php/mysql

Bonjour tout le monde,
j'ai un formulaire avec des cases à cocher , l'utilisateur a la possibilité de cocher plusieurs case, et j'ai une page cible qui contient le traitement php.
Mon problème se pose au niveau de 'lajout des champs dans la base de données.
J'ai pu réccupérer la liste des champs et les affichés mais pas les ajoutés dans ma base de données
erreur:
Warning: mysql_escape_string() expects parameter 1 to be string, array given in C:\wamp\www\Site\site\cibleAjoutFormStage.php on line 141

la ligne 141
Code :
$pj=mysql_escape_string($tab);
si vous pouvez m'aider svp
formulaire
Code :
1
2
3
4
5
6
7
<tr>
<td>Pièce jointe (rar/zip)<span class="rouge">*</span> :</td>
<td>CV:<input name="pj[]" type="checkbox" value="CV" /> <br />
Attestation:<input name="pj[]" type="checkbox" value="attestation" />
Diplôme:<input name="pj[]" type="checkbox" value="diplome" />
</td>
</tr>

voilà une partie du traitement de ma page cible si vous pouvez m'aider à traiter la variable de case à cocher pj et merci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$tab =$_POST['pj'];  
if( !empty($_POST['nom'])&& !empty($_POST['prenom'])&& !empty($_POST['cin'])&& !empty($_POST['etablissement'])&& !empty($_POST['email'])  && !empty($_POST['telephone'])&& !empty($_POST['adresse'])&& !empty($_POST['type']) && !empty($_POST['referenceoffre']) && !empty($_POST['delai']) && !empty($tab) && isset($_FILES['avatar']) && isset($_FILES['CV']) )
{
//récupération des données saisies dont des variables
 
  $nom=mysql_escape_string($_POST['nom']);
  $prenom=mysql_escape_string($_POST['prenom']);
  $cin=mysql_escape_string($_POST['cin']); 
  $etablissement=mysql_escape_string($_POST['etablissement']); 
  $email=mysql_escape_string($_POST['email']);
  $telephone=mysql_escape_string($_POST['telephone']);
  $adresse=mysql_escape_string($_POST['adresse']);
  $type=mysql_escape_string($_POST['type']);
  $referenceoffre=mysql_escape_string($_POST['referenceoffre']);
  $descriptionsujet=mysql_escape_string($_POST['descriptionsujet']);
  $delai=mysql_escape_string($_POST['delai']);
  $avatar=$dossier.$fichier;
  $pj=mysql_escape_string($tab);
  $CV=$dossier1.$fichier1;
 
 
  //Requête SQL
  $requete="INSERT INTO formulaire (nom, prenom, cin,etablissement, email,telephone, adresse,type,referenceoffre, descriptionsujet,delai,avatar,pj,CV) 
  VALUES ('$nom' ,'$prenom','$cin','$etablissement', '$email','$telephone','$adresse','$type','$referenceoffre','$descriptionsujet', '$delai', '$avatar','$pj', '$CV')";
 
 echo "Téléphone :" .$telephone. "<br><br>" ;
 echo "Adresse :" .$adresse. "<br><br>" ;
 echo "Type :" .$type. "<br><br>" ;
 echo "Référence offre :" .$referenceoffre. "<br><br>" ;
 echo "Délai de la réponse :" .$delai. "<br><br>" ;
 print_r($tab);
tatutatu2009 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h41   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
D'ou vient ce $tab.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 15h47   #3
Invité régulier
 
Inscription : février 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 69
Points : 6
Points : 6
Pardon j'ai oublier cette ligne, je viens d'édité mon ancien post
Merci pour votre aide Mr
tatutatu2009 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 16h13   #4
Membre régulier
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 72
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 72
Points : 99
Points : 99
Citation:
Envoyé par tatutatu2009 Voir le message
Bonjour tout le monde,
Warning: mysql_escape_string() expects parameter 1 to be string, array given in C:\wamp\www\Site\site\cibleAjoutFormStage.php on line 141
Tu passes un tableau en paramètre, passe une chaine de caractère ca devrait fonctionner
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 16h25   #5
Invité régulier
 
Inscription : février 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 69
Points : 6
Points : 6
je ne vous est pas compris svp sivous pouvez m'expliquer un peu plus merci
tatutatu2009 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 16h57   #6
Membre régulier
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 72
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 72
Points : 99
Points : 99
Utilises de préférence mysql_real_escape_string (mysql_escape_string obsolète depuis PHP 5.3.0.)

dans la doc php :
string mysql_real_escape_string ( string $unescaped_string )
l'argument demandé est une string
ton $tab =$_POST['pj']; est un array fais un var_dump($_POST) pour t'en apercevoir.
En revanche $_POST['pj'][0] constitue une chaine de caractère.

Une solution serait de faire
Code :
1
2
 
array_walk($tab, create_function('&$val', '$val = mysql_real_escape_string($val);'));
qui va appliquer mysql_real_escape_string sur chaque élément du tableau
voici la doc array_walk
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 17h24   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par matlow Voir le message
Une solution serait de faire
Code :
1
2
 
array_walk($tab, create_function('&$val', '$val = mysql_real_escape_string($val);'));
qui va appliquer mysql_real_escape_string sur chaque élément du tableau
voici la doc array_walk
bien joué t'as recrée array_map ...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 18h28   #8
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Oui donc si tu fais
Code :
$pj = array_map("mysql_real_escape_string",$tab);
tu aura traité correctement les éléments de ton tableau avec la fonction "mysql_real_escape_string" mais il n'en reste pas moins que tu as toujours un tableau que tu ne pourras pas insérer directement dans un champ de ta bdd.

Si tu veux insérer dans ton champ "pj" les éléments cochés séparés par une virgule, tu peux utiliser implode.
Code :
1
2
$pj = implode ( ', ' , $tab);// le résultat est maintenant une chaine de caractères
$pj = mysql_real_escape_string($pj);//on peut donc appliquer mysql_real_escape_string sur cette chaine de caractère
Alternativement si tu veux garder la structure de ton tableau pour pouvoir le reconstruire plus tard tu peux utiliser serialize
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 18h31   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
si il veux insérer un tableau il faut faire un autre table SQL qui va avec, sinon ça va être galère après au niveau des requêtes (par exemple afficher tout ce qu'on l'option CV)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 18h37   #10
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Oui s'il veut pouvoir faire du tri sur ces critères, il y a tout intérêt à faire une table liée 'pieces_jointes'
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 18h48   #11
Invité régulier
 
Inscription : février 2009
Messages : 69
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 69
Points : 6
Points : 6
Tout d'abord merci à vous tous pour votre aide,
ABCIWEB merci j'ai testé et ça marche parfaitement
Vous êtes tous génial
tatutatu2009 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h43.


 
 
 
 
Partenaires

Hébergement Web