[RESOLU] Poster la valeur d'une checkbox dans un outil CRM

Eléphanteau du PHP | 11 Messages

17 nov. 2012, 13:46

Bonjour à tous,

voilà mon problème, j'ai un formulaire html dans lequel j'ai notamment une checkbox, qui ressemble à ça:
----------------------------------------------------------------------
<label>Newsletter</label> <input type="checkbox" name="categorybox" value="56442629" />
----------------------------------------------------------------------

L'idée c'est que quand l'utilisateur coche la checkbox newsletter, cela va étiqueter le contact créé dans l'outil CRM que j'utilise avec la valeur correspondante dans mon champ.

J'essaye désespérément de récupérer cette valeur dans mon php, afin de la pusher dans l'outil CRM.
Voilà ce que ça donne:
----------------------------------------------------------------------
$categories = array(21683000,55209873,62861157);
if (isset($_POST["categorybox"]))
$categories[] = $_POST["categorybox"];
$contactData = array(
'categories' => array(
'add' => array('category' => $categories)
),
);
----------------------------------------------------------------------

La première ligne
$categories = array(21683000,55209873,62861157);
me permet de pusher par défaut les 3 catégories associées au 3 ID indiqués et cela fonctionne parfaitement.

En revanche le 4ème ID qui devrait apparaitre lorsque la checkbox est cochée, n'apparait jamais :(

Si quelqu'un voit où j'aurais pu gaffer, je lui en serais très reconnaissant.

Merci d'avance
Ben

Petit nouveau ! | 9 Messages

18 nov. 2012, 04:47

si j'ai bien compris?

tu voudrais rajouter dans ton tableau?

si c'est bien sa alors ,regarde du coté de Array_push...

Avatar du membre
Mammouth du PHP | 1609 Messages

18 nov. 2012, 14:11

As tu ne serait ce que vérifié ce que contient $_POST["categorybox"] ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 11 Messages

18 nov. 2012, 16:40

Hello messieurs,

merci pour vos réponses !

Je vous avoue ne pas être une bête en php...

@frf2, oui l'idée c'est que lorsque ma checkbox est cochées dans le formulaire html, sa valeur soit pushée aux cotés des autres valeurs déjà pushées par défaut.
Que veux tu dire par "regarde du coté de Array_push" ? Peux tu être plus précis stp ? Merci d'avance

@Saian, ce que contient $_POST["categorybox"], je suppose que c'est la valeur du champ checkbox, lorsqu'il est coché, non ? à savoir "56442629"

Pour rappel mon champ checkbox, dans le formulaire:
<label>Newsletter</label> <input type="checkbox" name="categorybox" value="56442629" />

Y a t il un moyen pour m'assurer que la valeur est bien récupérée ?

Merci de votre aide, je suis vraiment une quille en php...
Ben

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

18 nov. 2012, 17:02

salut,

La doc de array_push. Cette fonction permet d'ajouter des infos a la fin d'un tableau, comme le ferais un $tableau[] (mais avec la possibilitée d'avoir plusieurs variable.
ton code
<?php
if (isset($_POST["categorybox"]))
    $categories[] = $_POST["categorybox"];
est correct pour ajouter l'info.

As tu vérifier que $categorie soient bien conforme a ce que tu attend ? (var_dump($categorie);)

tu a une erreur de syntaxe avec la virgule en trop dans après le "add"
<?php
$categories = array(21683000,55209873,62861157);
if (isset($_POST["categorybox"]))
	$categories[] = $_POST["categorybox"];
$contactData = array(
	'categories' => array(
		'add' => array('category' => $categories)
	)
); 
Ensuite il faut voir ce que tu fait de ce tableau et s'il peux utiliser plus de 3 index (ce serait dommage qu'il ne puisse pas mais pourquoi pas. )


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

Eléphanteau du PHP | 11 Messages

18 nov. 2012, 17:30

Salut Moogli,

je suis désolé, ça va trop vite pour moi.
J'ai retiré la virgule en trop, mais cela n'a rien changé au résultat :(

Si par "utiliser plus 3 index", tu entends la prise en charge de plus de 3 valeurs, je te réponds d'avance oui.

Désolé de mon amateurisme, mais que puis je faire exactement de manière "simple" svp ?

Merci d'avance pour votre aide. Ce point me bloque complètement.

Ben

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

18 nov. 2012, 17:47

ajoute un var_dump($categories); pour voir s'il contient bien toutes les valeurs.

tu peux ajouter un var_dump($_POST) pour voir ce que le formulaire t'envoie (et donc vérifier si tu ne t'es pas tromper quelque part dans le nom, les nom de formulaire son case sensitive).

Tu peux faire la même chose avec le tableau suivant.

Si créer un fichier qui contient juste <?php phpinfo(); ?> et que l'affiche dans ton navigateur tu trouvera une ligne "error_reporting" la valeur doit être E_ALL afin d'avoir afficher toutes les erreurs (il y en a peut être une qui ne s'affiche pas et gène la suite.


sinon poste le formulaire complet ainsi que la validation complète (enlève juste les mots url et mot de passe ;) )

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

Avatar du membre
Mammouth du PHP | 1609 Messages

18 nov. 2012, 17:48

Tu "supposes que" benji_solve hors tu ne devrais pas supposer mais vérifier (un simple echo suffit).
Et si la valeur n'est pas bonne ben tu as déjà un problème à ce niveau là avant de chercher ailleurs.
En revanche si la valeur est bonne, alors tu es sûr que le problème ne vient pas de là et tu peux continuer à chercher ailleurs.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 11 Messages

18 nov. 2012, 18:08

Quand je rajoute un :

<?php echo $categories ?></b></p

il m'affiche Array. J'imagine donc qu'il ne remonte que les valeurs associées à $categories = array(21683000,55209873,62861157);

Quand je retire cette ligne, le écho n'affiche rien. Ce qui signifie qu'il ne récupère pas la valeur de ma checkbox. Je pense que le fond de mon problème est là. Pourquoi n'arrive-t-il pas à faire le lien avec la checkbox cochée, et récupérer sa valeur ?

@Moogli,j'ai posté un php info et à la ligne "error_reporting" , j'ai 6135.Qu'est ce que ça veut dire ?
Où dois je ajouter un var_dump($categories); ?

Je poste tout le formulaire ci dessous
merci pour votre aide c'est cool !

Ben

Eléphanteau du PHP | 11 Messages

18 nov. 2012, 18:09

<?php

// version 2.2.2

// Paramaters you change begin with "your" e.g. [email protected], yourSolve360Token,
// yourOwnership, yourCategoryId, yourTemplateId should be replaced with your own values

// REQUIRED Edit with the email address you login to Solve360 with
define('USER', 'XXXXXXXXXXXXXXXXXXXX');
// REQUIRED Edit with token, Solve360 menu > My Account > API Reference > API Token
define('TOKEN', 'XXXXXXXXXXXXXXXXXXXX');

// Get request data
$requestData = array();
parse_str($_SERVER['QUERY_STRING'], $requestData);

// Configure service gateway object
require 'Solve360Service.php';
$solve360Service = new Solve360Service(USER, TOKEN);

//
// Preparing the contact data
//
$contactFields = array(
// field name in Solve360 => field name as specified in html form
'firstname' => 'firstname',
'lastname' => 'lastname',
'custom5341956' => 'custom5341956',
'businessphonedirect' => 'businessphonedirect',
'businessemail' => 'businessemail',
'custom5679527' => 'custom5679527',
);

$categories = array(21683000,55209873,62861157);
if (isset($_POST["categorybox"]))
$categories[] = $_POST["categorybox"];
$contactData = array(
'ownership' => 55208024,
'categories' => array(
'add' => array('categorybox' => $categories)
)
);


// adding not empty fields
foreach ($contactFields as $solve360FieldName => $requestFieldName) {
if ($requestData[$requestFieldName]) {
$contactData[$solve360FieldName] = $requestData[$requestFieldName];
}
}

//
// Saving the contact
//
// If there was business email provided:
// check if the contact already exists by searching for a matching email address.
// if a match is found update the existing contact, otherwise create a new one.
//
if ($contactData['businessemail']) {
$contacts = $solve360Service->searchContacts(array(
'filtermode' => 'byemail',
'filtervalue' => $contactData['businessemail'],
));
}
if (isset($contacts) && (integer)$contacts->count > 0) {
$contactId = (integer)current($contacts->children())->id;
$contactName = (string)current($contacts->children())->name;
$contact = $solve360Service->editContact($contactId, $contactData);
} else {
$contact = $solve360Service->addContact($contactData);
$contactName = (string)$contact->item->name;
$contactId = (integer)$contact->item->id;
}

if (isset($contact->errors)) {
// Email the error
mail(
USER,
'Error while adding contact to Solve360',
'Error: ' . $contact->errors->asXml()
);
die ('System error');
} else {
// Email the result
mail(
USER,
'Contact posted to Solve360',
'Contact "' . $contactName . '" https://secure.solve360.com/contact/' . $contactId . ' was posted to Solve360'
);
}

//
// OPTION Adding a activity
//

/*
* You can attach an activity to the contact you just posted
* This example creates a Note, to enable this feature just uncomment the following request
*
*/


// Preparing data for the note

$noteData = array(
'details' => nl2br($requestData['note'])
);

$details = $_POST["note"];

$note = $solve360Service->addActivity($contactId, 'note', $noteData);


// Email the result
mail(
USER,
'Note was added to "' . $contactName . '" contact in Solve360',
'Note with id ' . $note->id . ' was added to the contact with id ' . $contactId
);
// End of adding note activity


//
// OPTION Inserting a template of activities
//

/*
* You can also insert a template directly into the contact you just posted
* You will find a list of IDs for templates in Solve360 menu > My Account > API Reference
* To enable this feature just uncomment the following request
*
*/

/*
// Start of template request
$templateId = 21855844;
$template = $solve360Service->addActivity($contactId, 'template', array('templateid' => $templateId));

// Email the result
mail(
USER,
'Template was added to "' . $contactName . '" contact in Solve360',
'Template with id ' . $templateId . ' was added to the contact with id ' . $contactId
);
// End of template request
*/

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h2>Resulat</h2>

<p>Merci, <b><?php echo $contactName ?></b></p>
<p>Merci, <b><?php echo $categories ?></b></p>

<p>Informations sauvegardées</p>
<p>Page de remerciement ici.</p>
</body>
</html>

Eléphanteau du PHP | 11 Messages

18 nov. 2012, 18:11

et voilà le formulaire html
-------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
label, input, textarea { display: block; float: left; width: 150px; margin: 5px; }
label { clear: left; text-align: right; }
input[type="submit"] { width: 60px; margin: 10px 0 0 165px; clear: left; }
</style>
</head>
<body>
<h2>Formulaire test</h2>
<form action="Solve360ContactSave.php" method="GET">
<label>Prénom*</label> <input type="text" name="firstname" value="" />
<label>Nom*</label> <input type="text" name="lastname" value="" />
<label>Profession*</label> <input type="text" name="custom5341956" value="" />
<label>Téléphone*</label> <input type="text" name="businessphonedirect" value="" />
<label>Email*</label> <input type="text" name="businessemail" value="" />
<label>Remarques</label> <textarea name="custom5679527" cols="4" rows="4"></textarea>
<label>Newsletter</label> <input type="checkbox" name="categorybox" value="56442629" />
<input type="hidden" name="note" value="form1">
<input type="submit" value="Envoyer" />
</form>

</body>

</html>

Avatar du membre
Mammouth du PHP | 1609 Messages

18 nov. 2012, 18:14

echo c'est pour les variables. Pour un tableau ou un objet tu as le print_r !

Donc par exemple pour vérifier la variable en post :
echo 'categorybox = '.$_POST["categorybox"].'<br/>';
Pour vérifier le tableau $categories :
echo '<pre>';
print_r($categories);
echo '</pre>';
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 11 Messages

18 nov. 2012, 18:22

OK, merci Saian,

Voilà ce qu'il me retourne.

Pour : echo 'categorybox = '.$_POST["categorybox"].'<br/>';

J'ai: categorybox =

Pour: <?php echo '<pre>';
print_r($categories);
echo '</pre>'; ?></b></p>

J'ai: Array
(
[0] => 21683000
[1] => 55209873
[2] => 62861157
)


Moi, ce que j'aimerais, ce serait voir apparaitre en plus: [3] => 56442629

Merci
Ben

Avatar du membre
Mammouth du PHP | 1609 Messages

18 nov. 2012, 18:26

Oué en fait $_POST["categorybox"] ne doit pas être défini et donc ça ne rentre pas dans ton if.

Donc à mon avis (sans avoir vérifié tout ton code alors je me trompe peut être) sur ta checkbox dans le name ajoute [] comme ceci :
<label>Newsletter</label> <input type="checkbox" name="categorybox[]" value="56442629" />
Et modifie la ligne la suivante comme ceci :
$categories[] = $_POST["categorybox"][0];
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1609 Messages

18 nov. 2012, 18:30

Ah ben non en fait en prenant le temps de vérifier ton form la method n'est pas bonne.
Tu utilises la method GET et recherche la variable dans $_POST.
Donc soit tu mets ton form en method POST soit tu récupères la variable dans $_GET.
Sinon utilise le $_REQUEST qui contient les paramètres de $_POST et de $_GET. Ainsi même si tu changes la method du formulaire ton code fonctionne toujours.
Développeur web depuis + de 20 ans