transmission de la variable $id en GET à une page

Bonjour,

j’ai créé un module et mon script principal à besoin de réutiliser le $id de l’objet concerné (ici la propal)

je récupère le $id dans ma page par :
$id = GETPOST(‹ id ›,‹ int ›);

mais le pb c’est que lorsque j’ajoute monscript.php?id=$id , cela provoque une erreur alors que monscript.php?num=$id ne provoque pas d’erreur

comment je passe le $id à mon script ? pour qu’il soit lu correctement par le GETPOST ?

j’espère que c’est clair

merci à vous

Bonjour,

Pouvez vous détailler l’erreur affichée ? Sinon peut être que « id » est un mot reservé et ne peut etre utilisé tel quel… (simple supposition).
Envoyez l’id via monscript?myid=$id si cela vous convient et fonctionne ? (myid est un exemple ^^)

Cordialement :happy:

EDIT : à la lecture de code similaire, GETPOST(‹ id ›, ‹ int ›); ne semble pas réservé et devrait fonctionner… Le problème doit venir d’ailleurs

bonjour,

il n’affiche pas d’erreur mais le reste de mon script est bloqué et j’ai une page blanche à la place
cela fonctionne avec une autre variable effectivement mais il faut que j’utilise le $id notamment pour que mes onglets fonctionnent sur ma page spécifique …

pour l’instant je n’ai pas d’autres idées, je vais essayer de revérifier la construction des pages similaires dans Dolibarr

merci

Dans ce cas peut être que l’erreur (certainement sql) est loguée dans documents/dolibarr.log ?

Si vous n’avez pas ce fichier, vous pouvez activer le suivi des erreurs dans Accueil > Configuration > Journaux et traces :happy:

Bonjour,
malheureusement j’ai bien activé le fichier dolibarr.log mais je n’ai pas trouvé l’origine de l’erreur

à chaque fois que je passe à mon script : ?id= « une valeur », j’obtiens une page blanche (juste avec le menu haut et gauche)

j’ai essayé de me calquer sur l’écriture de départ du script de chargement d’une propal /comm/propal/card.php mais ça n’a rien donné

je n’ai donc pas d’autre choix que de vous mettre le début de mon script pour voir si vous pouvez m’éclairer …

merci à ceux qui voudront bien le regarder et m’aider à voir ce qui cloche !

apparemment mon fichier n’a pas été transmis

<?php
/**
 *   	\file       dev/skeletons/skeleton_card.php
 *		\ingroup    mymodule othermodule1 othermodule2
 *		\brief      This file is an example of a php page
 *					Put here some comments
 */

//if (! defined('NOREQUIREUSER'))  define('NOREQUIREUSER','1');
//if (! defined('NOREQUIREDB'))    define('NOREQUIREDB','1');
//if (! defined('NOREQUIRESOC'))   define('NOREQUIRESOC','1');
//if (! defined('NOREQUIRETRAN'))  define('NOREQUIRETRAN','1');
//if (! defined('NOCSRFCHECK'))    define('NOCSRFCHECK','1');			// Do not check anti CSRF attack test
//if (! defined('NOSTYLECHECK'))   define('NOSTYLECHECK','1');			// Do not check style html tag into posted data
//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1');		// Do not check anti POST attack test
//if (! defined('NOREQUIREMENU'))  define('NOREQUIREMENU','1');			// If there is no need to load and show top and left menu
//if (! defined('NOREQUIREHTML'))  define('NOREQUIREHTML','1');			// If we don't need to load the html.form.class.php
//if (! defined('NOREQUIREAJAX'))  define('NOREQUIREAJAX','1');
//if (! defined("NOLOGIN"))        define("NOLOGIN",'1');				// If this page is public (can be called outside logged session)

// Change this following line to use the correct relative path (../, ../../, etc)
$res=0;
if (! $res && file_exists("../../main.inc.php")) $res=@include '../../main.inc.php';			// to work if your module directory is into a subdir of root htdocs directory
if (! $res) die("Include of main fails");

require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formpropal.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formmargin.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/lib/functions.lib.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
require '../phpMailer/_lib/class.phpmailer.php'; // inclut la librairie pour l'envoie des demandes de prix par email
//Changelog : version 6.0.0
require_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php';
require_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/modules/propale/modules_propale.php';
require_once DOL_DOCUMENT_ROOT . '/core/lib/propal.lib.php';
require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php';
require_once DOL_DOCUMENT_ROOT . '/core/lib/signature.lib.php';

// Change this following line to use the correct relative path from htdocs
include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
//dol_include_once('/priceoffermanager/class/skeleton_class.class.php');

if (! empty($conf->projet->enabled)) {
	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
	require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
}

if (!empty($conf->variants->enabled)) {
	require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination.class.php';
}


$morejs=array("/priceoffermanager/script/script.js","/priceoffermanager/script/inlinemod_global.js","https://code.jquery.com/jquery-1.12.4.js","https://code.jquery.com/ui/1.12.1/jquery-ui.js","/priceoffermanager/ckeditor/ckeditor.js");
llxHeader("",$langs->trans("CommercialArea"),"","","","",$morejs);


// Load traductions files requiredby by page
$langs->load("priceoffermanager@priceoffermanager");
$langs->load("other");
$langs->load('companies');
$langs->load('propal');
$langs->load('compta');
$langs->load('bills');
$langs->load('orders');
$langs->load('products');
$langs->load("deliveries");
$langs->load('sendings');
if (!empty($conf->incoterm->enabled)) $langs->load('incoterm');
if (! empty($conf->margin->enabled))
	$langs->load('margins');

$error = 0;


// Get parameters
$id			= GETPOST('id', 'int');
$ref		= GETPOST('ref', 'alpha');
$socid      = GETPOST('socid', 'int');
$action		= GETPOST('action','alpha');
$cancel     = GETPOST('cancel', 'alpha');
$myparam	= GETPOST('myparam', 'alpha');
$origin     = GETPOST('origin', 'alpha');
$originid   = GETPOST('originid', 'int');
$confirm    = GETPOST('confirm', 'alpha');
$lineid     = GETPOST('lineid', 'int');
$contactid  = GETPOST('contactid','int');

$search_field1=GETPOST("search_field1");
$search_field2=GETPOST("search_field2");

// Security check
if (! empty($user->societe_id)) $socid = $user->societe_id;
$result = restrictedArea($user, 'propal', $id);

//Changelog : version 6.0.0
$propal = new Propal($db);
//$result = $propal->fetch($id,$ref);
$head = propal_prepare_head($propal, $user) ;

if (empty($action) && empty($id) && empty($ref)) $action='view';

// Protection if external user
if ($user->societe_id > 0)
{
	//accessforbidden();
}



//$object = new Skeleton_Class($db);

//$extrafields = new ExtraFields($db);

// fetch optionals attributes and labels
//$extralabels = $extrafields->fetch_name_optionals_label($object->table_element);



// Load object
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php';  // Must be include, not include_once  // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals

// Initialize technical object to manage hooks of modules. Note that conf->hooks_modules contains array array
$hookmanager->initHooks(array('skeleton'));



/*******************************************************************
* ACTIONS
*
* Put here all code to do according to value of "action" parameter
********************************************************************/

$parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');



/***************************************************
* VIEW
*
* Put here all code to build page
****************************************************/


$form=new Form($db);

...

Bonjour,

J’ai jeté un oeil au script, toutefois pouvez vous montrer l’endroit ou vous envoyez ‹ id › ? Votre script montre la tentative de récupération via GETPOST mais pas l’envoie, ce qui pourrait permettre de remonter le problème.

On va réussir :happy:

merci !
en fait, la variable est envoyé via un autre lien du système vers ce script

monscript.php?id=308 par exemple …

sur les autres pages standard Dolibarr c’est bien avec le code

$id = GETPOST(‹ id ›, ‹ int ›);

qu’on peut récupérer la variable GET

Deux idées :

1- Essayez avec GETPOST(‹ id ›, ‹ alpha ›); au cas ou, quitte à caster la variable en int par la suite. (je doute du résultat mais bon :laugh: )

2- Essayez via $_GET[« id »] a la place du GETPOST Dolibarr ? Peut être

Sur la page en erreur, essayer clic droit puis Examiner l’élement, et vérifier le retour d’erreur dans « Console » ?

Oui normalement le GETPOST fonctionne ainsi, je ne sais pas pourquoi sur cette page ça ne passe pas :side:

1 « J'aime »

Voila j’ai fait les tests :

1 - GETPOST(‹ id ›, ‹ alpha ›); ne règle pas le problème, en effet, le script et mes données s’affichent bien, mais tant que le $id n’est pas passé passé en paramètre (et je récupère toujours un $id=0 ou non défini dans le menu propal que j’ai chargé sur cette page …)

2 - $_GET[« id »] - je pense que je récupère la valeur du id passé en paramètre mais dès que je l’affecte à $id mon script ne s’affiche plus (c’est comme si l’erreur se produisait « après » dans le traitement de mon script mais je suis incapable de dire ou)

sur la console il n’y a pas plus de warning ou d’erreur sur le resultat du script qui fonctionne que sur celui qui ne fonctionne pas …

Avec ces tests, je pense que j’ai bien identifié que le problème ne venait pas de la transmission du paramètre GET mais bien de mon script
mon script fait 1700 lignes en tout, il ne me reste plus qu’à repartir d’un script vierge, et voir si j’arrive à afficher quelque chose tout en récupérant la variable $id et si ça marche, reconstruire le script pas à pas, en testant à chaque fois pour voir quelle ligne provoque l’erreur !!
Avant cette solution, j’attends un peu des fois qu’on réussirait à trouver …

encore merci

Bonjour
Est-ce cette partie qui met le bazar:

include DOL_DOCUMENT_ROOT.’/core/actions_fetchobject.inc.php’;

Fred

1 « J'aime »

Merci Frederic !

oui c’est l’include de ce fichier qui mettait le bazar !

je me demande bien comment tu as deviné ? as-tu déjà rencontré des problèmes avec ce fichier
et à quoi sert-il ?

je l’ai désactivé, mais j’imagine qu’il peut avoir son utilité ?

En tout cas, merci à vous deux vous m’avez épargné des heures de test …