Page 1 sur 2

Couper une balise avec substr

Posté : 03 mai 2022, 15:36
par wisefun77
Bonjour,
Grace à vos aides, j'ai appris beaucoup.
Maintenant je vais un peu corser les choses.
Je sais couper une chaine à partir d'une position. Et tout ce qui est avant la position est enregistré dans une balise.
Mais je sais pas faire l'inverse.
C'est à dire==>> tout ce qui est après la position le copier dans une balise.

Code : Tout sélectionner

<?PHP $_SESSION['Balises3'] ='[RDV_NON][RDV_BAL][RSDP_NON]'; $_SESSION['Balises2'] = "[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON] 4[DEM_PDT_PCF < ASSET_XXX> < TPX_-1>]6[PRT_PRP < ASSET_ XXX < TPX_1>]7 [SFW_TLD < TPX_1 > ][NO COMMENT]10"; $baliseStart ='4'; $nature = $_SESSION['Balises2']; // Traitement du début de la chaine. $pos = strpos($nature, $baliseStart); $_SESSION['BalisesStart'] = substr($nature,0,$pos); echo 'BaliseStart ==>'.$_SESSION['BalisesStart'] ;// Donne [ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON] //Traitement de fin de chaine. $baliseEnd ='4'; $pos = strpos($nature, $baliseEnd); $_SESSION['BalisesEnd'] = substr($nature,-1,$pos); echo 'BaliseEnd ==>'.$_SESSION['BalisesEnd'] ; // Doit donner 4[DEM_PDT_PCF < ASSET_XXX> < TPX_-1>]6[PRT_PRP < ASSET_ XXX < TPX_1>]7 [SFW_TLD < TPX_1 > ][NO COMMENT]10 // Concaténation des chaines. // $_SESSION['BaliseNew'] = $_SESSION['BalisesStart']. $_SESSION['Balises3'].$_SESSION['BalisesEnd'] ; // $_SESSION["Balises2"] = $_SESSION["BaliseNew"]; //echo $_SESSION['Balises2']; ?>
|*() |*() |*() |*()
Merci.

Re: Couper une balise avec substr

Posté : 03 mai 2022, 15:39
par or 1

Re: Couper une balise avec substr

Posté : 03 mai 2022, 16:15
par wisefun77
Bonjour or1,
j'ai fait un test et cela ne me donne rien.

Code : Tout sélectionner

//Traitement de fin de chaine. $_SESSION['Balises3'] ='[RDV_NON][RDV_BAL][RSDP_NON]'; $_SESSION['Balises2'] = "[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON] 4[DEM_PDT_PCF < ASSET_XXX> < TPX_-1>]6[PRT_PRP < ASSET_ XXX < TPX_1>]7 [SFW_TLD < TPX_1 > ][NO COMMENT]10"; $baliseEnd ='4'; $nature = $_SESSION['Balises2']; $pos = strpos($nature, $baliseEnd); //$_SESSION['BalisesEnd'] = substr($nature,0,$pos); $substr = substr($nature,0,$pos); $_SESSION['BalisesEnd'] = $substr[strlen($substr) -1]; echo 'BaliseEnd ==>'.$_SESSION['BalisesEnd'] ;
Cela n'affiche rien.
Merci

Re: Couper une balise avec substr

Posté : 03 mai 2022, 17:42
par ynx
Bonjour,

Regarde bien les paramètres de la fonction substr :
$substr = substr($nature, 0, $pos);
-> Ici tu découpes la chaine $nature en commençant au premier caractère (0) jusqu'au caractère qui est à la position $pos.

Pour récupérer la fin de la chaine $nature, il faut donc découper la chaine en commençant par le caractère qui est à la position $pos + 1 jusqu'au dernier caractère de la chaine (dans ce cas le 3e paramètre de la fonction substr est facultatif).

Re: Couper une balise avec substr

Posté : 04 mai 2022, 13:50
par wisefun77
Bonjour ynx,
J'ai aussi trouvé la solution avec strrev et substr

Code : Tout sélectionner

//Traitement de fin de chaine. $nature_inversee = strrev($nature); //on inverse la string $baliseEnd ='4'; $pos = strpos($nature_inversee, $baliseEnd); //position du caractère 4 ds la string inversée $_SESSION['BalisesEnd'] = substr($nature_inversee,0, $pos); $_SESSION['BalisesEnd'] = strrev( $_SESSION['BalisesEnd']); //echo 'BaliseEnd ==>'.$_SESSION['BalisesEnd']; //Doit donner la fin de la chaine des balises.
Merci pour ton aide.

Re: Couper une balise avec substr

Posté : 04 mai 2022, 13:54
par or 1
la première ligne de cet portion de page nous dit :
echo substr('abcdef', 1); // bcdef
est-ce plus simple que l'usine à gaz trouvée ? évidemment.

et cela va être dit une nième fois sur ce forum, utiliser une chaine est une mauvaise idée, c'est un tableau indexé qu'il faut utiliser.

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 14:50
par wisefun77
Bonjour or1,
et cela va être dit une nième fois sur ce forum, utiliser une chaine est une mauvaise idée, c'est un tableau indexé qu'il faut utiliser.
Je te comprends mais je n'avais pas le choix, car je n'y arrivais pas avec un tableau.
Merci.

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 14:55
par or 1
vous n'y arriviez pas ici, et qu'avez-vous fait ? vous nous avez présenté votre code et nous vous avons guidé sur la bonne voie.

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 15:02
par wisefun77
Bonjour or1,
Je vous ai pris assez la tête avec mes autres sujets, sur les tableaux.
Il fallait une solution rapide pour le Boss.
Vous m'avez tellement aidé sur les tableaux, mais je n'arrive pas à retrier les balises en bon ordre. car les balises n'ont pas toujours la même position. sauf pour les 4 premières.
Ce n'est pas de votre faute.
Merci très sincèrement.

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 15:20
par or 1
on peut avoir les tests effectués sur la base du code donné là : post471456.html#p471456 ?

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 16:15
par wisefun77
Bonjour or1,
Tu crée un tableau dans lequel tu assignera ou enlèvera les valeurs que tu souhaite, exemple :

Code : Tout sélectionner

$tableau = [ 'ma clé' => 'ma valeur', 'ma clé sans valeur pour le moment' => '', 'etc' => 'etc...' ]; //assigner une valeur : $tableau['ma clé'] = 'ma valeur..'; //il est préférable de mettre des clé sans accents, comme ma_cle plutôt que ma clé
J'ai tout supprimé mes tests, car je ne peux connaitre à l'avance toutes les balises qui seront enregistrées dans des variables.
Voilà pourquoi je pense que c'est mieux pour moi le code sans tableau.
J'assigne un numéro à chaque création de variable, et à la fin le code passe dans la moulinette.
1/ tri des balises et concaténation.
2/ création d'un checksum aléatoire en hexadecimal.
3/ ajout des variables à la fin de la chaine triée. (ex: date, checksum, version, variable fermant la chaine).
4/ suppression de touts les chiffres entre les crochets.
5/ copie de cette nouvelle chaine dans un texaera.
6/ copie dans le presse papier suite au click du bouton copier.
7/ ouverture d'une nouvelle page, indiquant que le texte est copié et qu'il peut être collé dans l'autre outils externe.

Merci énormément pour toutes vos aides et réponses si précieuses.

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 16:20
par or 1
il n'y a pas besoin de créer à l'avance les index.
$tableau = array();
$tableau["champ1"] = "valeur";
$tableau["champ2"] = "autre valeur";
echo $tableau["champ1"];
echo $tableau["champ1"]."|".$tableau["champ2"];
echo $tableau["champ2"]."|".$tableau["champ1"];
$tableau["champ1"] = "valeur mise à jour";
echo $tableau["champ1"];

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 16:39
par wisefun77
Je comprend, mais comment j'indique les valeurs ne sachant pas comment elles seront nommées. je ne pourrai le savoir seulement à fin du traitement de l'application.
ex de chaines en fin de traitement avant de passer dans la moulinette.

Code : Tout sélectionner

[ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][PRT_PRP < ASSET_ XXX < TPX_1>][SFW_TLD < TPX_1 > ][SFW_TLD < TPX_1 > ][SFW_TLD < TPX_1 > ][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][RDV_NON][RDV_BAL][RSDP_OUI][NO-COMMENT] [ADC_START][AUTRE][PMAD[DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][PRT_PRP < ASSET_ XXX < TPX_1>][SFW_TLD < TPX_1 > ][RDV_NON][RDV_BAL][RSDP_NON] [ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][RDV_NON][RDV_BAL][RSDP_NON] [ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][RDV_OUI][RDV_VALIDE][RSDP_OUI] [ADC_START][AUTRE][PMAD[DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][PRT_PRP < ASSET_ XXX < TPX_1>][SFW_TLD < TPX_1 > ][RDV_NON][RDV_BAL][RSDP_OUI][COMMENT/ azertyyuooppe,enne]
Je ne vois pas comment , à part passer par une liste
J'ai aussi essayé de comprendre ça.

Code : Tout sélectionner

<?php $string = "[ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][PRT_PRP < ASSET_ XXX < TPX_1>]7 [SFW_TLD < TPX_1 > ][RDV_NON][RDV_BAL][RSDP_NON][NO COMMENT][19f16457][22/04/22-17:12][Version_2.02][ADC_END] "; // Définition du tableau final $clean_array = []; // On split la chaine selon les crochets ouvrants $string_to_array = preg_split('#\[#i', $string); foreach ($string_to_array AS $v) { // On nettoie le string pour retirer le crochet fermant $str = trim(str_replace(']', '', $v)); // Si la chaine n'est pas vide, on l'ajoute à notre tableau final if (!empty($str)) { $clean_array[] = $str; } } //echo PHP_EOL . '<pre>$clean_array: ' . print_r($clean_array, true) . '</pre>' . PHP_EOL; ?> <br/><br/> ------------------------ Recherche des donnees. <br/><br/> <?php $tab = $clean_array; if(in_array('RDV_NON',$tab)){ //------------------------ array_slice $input =$tab; // retourne chaine complète sans le numéro de la dernière balise. // $output = (array_slice($input, 0)); // notez les clés d'index différentes echo 'trouvé ARRAY ==> '; print_r(array_slice($input,0)); // print_r(array_slice($input, 2, -1, true)); // Définition du tableau final $clean_array = []; // On split la chaine selon les crochets ouvrants $line=0; $string_to_array = preg_split('#\[#i', $string); foreach ($string_to_array AS $v) { $line++; // On nettoie le string pour retirer le crochet fermant echo "line=".$line."<br/>"; $str = trim(str_replace(']', '', $v)); // Si la chaine n'est pas vide, on l'ajoute à notre tableau final if (!empty($str)) { $clean_array[] = $str; } } } else{ echo 'pas trouvé'; } ?>
Mais que faire des index des lignes et comment les lires.

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 16:54
par or 1
traitement du 1er formulaire :
$tableau["champ1"] = $_POST["champ1"];

traitement du second formulaire :
$tableau["champ2"] = $_POST["champ2"];

en mettant toujours $tableau dans la session.

Re: [RESOLU] Couper une balise avec substr

Posté : 04 mai 2022, 17:01
par wisefun77
AAAAH et c'est à la fin que je récupère toutes les $tableau?
Cela fonctionne même si mes $_POST sont toujours déclarés ainsi ==>> $_POST['balise'] ?

Mais là il faudrait que je change mes 150 pages.
Cela peut-être fait pour une mise à jour de la version.