function ttChpLink($valb0,$reqsup="",$valc=""){ //echo $reqsup; global $DBHost,$DBUser,$DBName,$DBPass,$carsepldef,$TBDname,$maxrepld; $valbrut=explode(';',$valb0); /// en cas de modif de la syntaxe, checker aussi PYAObj /// methode echoFilt, case LDLLV qui se sert de la chaine valb0 pour une requete imbriquée if (count($valbrut)>1) { // connection �une base diff�ente $lntable=$valbrut[1]; $defdb=explode(',',$valbrut[0]); $newbase=true; // si user et/ou hote d'acc� �la Bdd est diff�ent, on etablit une nvlle connexion // on fait une nouvelle connection syst�atiquement pourt etre compatioble avec pg_sql //if (($defdb[1]!="" && $defdb[1]!=$DBHost)||($defdb[2]!="" && $defdb[2]!=$DBUser)) { $lnc=db_connect($defdb[1],$defdb[2],$defdb[3],$defdb[0]) or die ("Impossible de se connecter au serveur $defdb[1], user: $defdb[2], passwd: $defdb[3]"); $newconnect=true; //} } else { //commme avant $lntable=$valbrut[0]; $newbase=false; $newconnect=false; } // gestion condition AND depuis PYA $valb2 = explode("[[",$lntable); if (count($valb2)>1) { $lntable=$valb2[0]; if ($reqsup!="") { $reqsup= "(".$this->Val2." AND ".$valb2[1].")"; } else $reqsup = $valb2[1]; } // si une seule valeur a chercher, on ignore $reqsup sinon ça met la merde if ($valc != "") $reqsup = ""; // 0: table, 1: champ lié(clé(s)); 2: ET SUIVANTS champs affiches $defl = explode(',',$lntable); $nbca = 0; // on regarde les suivants pour construire la requete $rcaf = ""; $tbmultk = explode(":",$defl[1]); // on gère les clé multiples: le nom du champ clé est dans ce cas clé1:clé2:clé3 // on boucle sur les champs à afficher while ($defl[$nbca+2]!="") { $nmchp=$defl[$nbca+2]; $c2aff=true; // champ a afficher effectivement if (strstr($nmchp,"!")) { // caractere separateur defini $nmchp=explode("!",$nmchp); $tbcs[$nbca+1]=$nmchp[0]; // separateur avant le "!" $nmchp=$nmchp[1]; } /* si le chp a afficher champ comporte un & au debut, il faut aller cherche les valeurs dans une table; les parametres sont indiques dans les caracteristiques d'édition de CE champ dans la table de définition*/ if (strstr($nmchp,"&")) { // si chainage $nmchp=substr ($nmchp,1); // enl�e le & if (strstr($nmchp,"~@")) { // si classement inverse en plus sur ce champ $nmchp=substr ($nmchp,2); // enl�e le @ $orderby=" order by $nmchp DESC "; } elseif (strstr($nmchp,"@")) { // si classement en plus sur ce champ $nmchp=substr ($nmchp,1); // enl�e le @ $orderby=" order by $nmchp "; } $rqvc=db_query("select VALEURS from $TBDname where NM_CHAMP='$nmchp' AND NM_TABLE='$defl[0]'"); $resvc=db_fetch_row($rqvc); $valbchain[$nbca+1]=$resvc[0]; /// TODO la syntaxe de Valeurs a évolué !! } if (strstr($nmchp,"@@")) { // si ce champ indique un champ de structure hierarchique avec la clé de type pid= parent id $cppid = substr ($nmchp,2); // enleve le @@ $c2aff=false; } elseif (strstr($nmchp,"~@")) { // si classement inverse sur ce champ $nmchp=substr ($nmchp,2); // enleve le ~@ $orderby=" order by $nmchp DESC"; } elseif (strstr($nmchp,"@")) { // si classement sur ce champ $nmchp=substr ($nmchp,1); // enleve le @ $orderby=" order by $nmchp "; } if ($c2aff) { // si champ à afficher $rcaf=$rcaf.",".$nmchp; $tbc2a[]=$nmchp; // tableau des champs où chercher } $nbca++; } // fin boucle if ($cppid) $nbca=$nbca-1; if ($valc!="") { // soit on cherche 1 et 1 seule valeur, ou plusieurs si $valc est un tableau, ou une chaine de caractères if (is_array($valc)) { // on a un tableau, donc plusieurs enregistrements recherchés if (count($tbmultk) > 1) { // si FK clé multiple foreach ($valc as $val1c) { $whsmk = ""; $uval = explode(":",$val1c); $ik = 0; foreach($tbmultk as $ck) { $whsmk.=" $ck='".$uval[$ik]."' AND "; $ik++; } $whsl.="(".vdc($whsmk,5).") OR "; } } else { // pas clé multiple foreach($valc as $uval) { $whsl.=" $defl[1]='$uval' OR "; } } // fin si pas clémltiple $whsl=" where ".vdc($whsl,3); } elseif (strstr($valc,'__str2f__')) { // on cherche une chaine parmi les champs à afficher (utilisé par la popup de sel générique) $val2s=str_replace('__str2f__','',$valc); foreach($tbc2a as $chp) { $whsl.=" $chp LIKE '%$val2s%' OR "; } $whsl=" where ".vdc($whsl,3); } else { // on cherche une valeur if (count($tbmultk) > 1) { // clé multiple $whsmk = ""; $uval = explode(":",$valc); $ik = 0; foreach($tbmultk as $ck) { $whsmk.=" $ck='".$uval[$ik]."' AND "; $ik++; } $whsl.= ' where ('.vdc($whsmk,5).')'; } else $whsl=" where $defl[1]='$valc'"; // normal } if ($reqsup!="") { // rajoute req suppl eventuelle $whsl="(".$whsl.") AND ".$reqsup; } } else { // soit la liste est simplement limité par une clause where supplémentaire $whsl= ($reqsup != "" ? "WHERE ".$reqsup : ""); } if ($cppid && $valc=="") { //on a une structure hierarchique et plus d'une valeur à chercher // on cherche les parents initiaux, ie ceux dont le pid est null ou egal a la cle du meme enregistrement if ($reqsup!="") $whreqsup=" AND $reqsup "; $rql=db_query("SELECT $defl[1], $cppid $rcaf from $defl[0] WHERE ($cppid IS NULL OR $cppid=$defl[1] OR $cppid=0) $whreqsup $orderby"); while ($rw=db_fetch_row($rql)) { if($rw[0] !="") { // si cle valide $resaf=tradLib($rw[2]); for ($k=2;$k<=$nbca;$k++) { $cs=($tbcs[$k]!="" ? $tbcs[$k] : $carsepldef); if ($valbchain[$k]!="") { $resaf=$resaf.$cs.ttChpLink($valbchain[$k],"",$rw[$k + 1]); } else $resaf=$resaf.$cs.tradLib($rw[$k +1]); } // boucle sur chps �entuels en plus $tabCorlb[$rw[0]]=$resaf; rettarbo($tabCorlb,$rw[0],$defl,$cppid,$rcaf,$orderby,$nbca,$tbcs,0,$whreqsup); //print_r($tabCorlb); } // fin si cl�valide } // fin boucle reponses if (!is_array($tabCorlb)) { // pas de reponses $tabCorlb[err]="Error ! impossible construire l'arbre "; } } else { // pas hierarchique => normal $defl[1] = str_replace(":",",",$defl[1]); // au cas ou clé multiple $sqln = addwherefORlimit("SELECT $defl[1] $rcaf from $defl[0] $whsl $orderby",$maxrepld); $rql=db_query($sqln); // constitution du tableau associatif a2 dim de corresp code ->lib //echo "<!--debug2 rql=SELECT $defl[1] $rcaf from $defl[0] $whsl $orderby <br/>-->"; $tabCorlb=array(); $nbkm = count($tbmultk)>1 ? count($tbmultk) : 1; // nbre clé while ($resl=db_fetch_row($rql)) { $cle = $resaf = ""; if ($nbkm > 1) { // clé multiple for ($k=0;$k<$nbkm;$k++) $cle .= $resl[$k].":"; $cle = vdc($cle,1); } else { // clé simple $nbkm = 1; $cle=$resl[0]; } for ($k=$nbkm;$k < ($nbca + $nbkm);$k++) { $cs=($tbcs[$k]!="" ? $tbcs[$k] : ($k!=$nbkm ? $carsepldef : "")); if ($valbchain[$k]!="") { $resaf=$resaf.$cs.ttChpLink($valbchain[$k],"",$resl[$k]); } else $resaf = $resaf.$cs.tradLib($resl[$k]); } $tabCorlb[$cle]=stripslashes($resaf); // tableau associatif de correspondance code -> libell� //echo "<!--debug2 cle: $cle; val: $resaf ; valverif: ".$tabCorlb[$cle]."-->\n"; } // fin boucle sur les r�ultats } // fin si pas hierarchique=normal // retablit les param�res normaux si n��saire if ($newconnect || $newbase) { db_close($lnc); db_connect($DBHost,$DBUser,$DBPass,$DBName);// r�uvre la session normale } //if ($newbase) mysql_select_db($DBName) or die ("Impossible d'ouvrir la base de donn�s $DBName."); if ($valc!="" && !strstr($valc,'__str2f__')) { if ($resaf=="") $resaf="N.C."; return ($resaf); } else { return($tabCorlb); // retourne le tableau associatif } }
<a class="fxbutton" href="#" onclick="subm('__reqcust');"><?php echo trad("LT_reqexec"); ?> </a></td> <td><a href="#" onclick="insertValueQuery();" class="fxbutton"> << </a></td> <td> <? $tbvalsql=array(" SELECT " =>" SELECT "," * " =>" * "," FROM " =>" FROM "," WHERE " =>" WHERE "," ORDER BY " =>" ORDER BY"," LEFT JOIN " =>" LEFT JOIN "); $rqtb=msq("select NM_TABLE,NM_CHAMP,LIBELLE from $TBDname where NM_TABLE NOT LIKE '__reqcust' AND NM_TABLE NOT LIKE '$id_vtb%' AND NM_CHAMP='$NmChDT' ORDER BY ORDAFF_L"); while ($rstb=db_fetch_array($rqtb)) { $tbvalsql[' `'.$rstb['NM_TABLE'].'` ']=$rstb['LIBELLE']; $rqchp=msq("select NM_TABLE,NM_CHAMP,LIBELLE from $TBDname where NM_TABLE='".$rstb['NM_TABLE']."' AND NM_CHAMP!='$NmChDT' ORDER BY ORDAFF"); while ($rschp=db_fetch_array($rqchp)) { $tbvalsql[' `'.$rstb['NM_TABLE'].'`.`'.$rschp['NM_CHAMP'].'` ']="-- ".tradLib($rschp['LIBELLE']); // le nom de table fout la merde avec PYA ??? //$tbvalsql[' `'.$rschp['NM_CHAMP'].'` ']="-- ".$rschp['LIBELLE']; } } // fin boucle sur les tables DispLD($tbvalsql, "sql_words","yes"); ?> <SCRIPT language="JavaScript"> // modifie l'evenement double clic de la liste document.theform.getElementById('sql_words').ondblclick = insertValueQuery; </script> </td> </tr></table> <br/>