8768 sujets

Développement web côté serveur, CMS

Bonjour,
Grace à vous et au site, j'ai pu valider mon projet et obtenir une proposition d'embauche.
J aimerai savoir s'il est possible de lire une chaîne en partant de la fin et de supprimer tous ce qui est après la dernière balise?

[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]45[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]

Je dois supprimer la dernière balise 5.

5[DEM_PDT>TPX_1>]

j'ai fait une condition sur les pages en cas de retour en arrière.
lorsque l'user clique sur le bouton précédent, cela arrive dans le elseIf.

elseif(isset($_SESSION["Balises2"])){
$page='4';
$Listenature = $_SESSION['listetype'];
$nature = $_SESSION['Balises2'];
$pos = strpos($nature, $page);
// //Supprimer la chaine après la valeur de $pos
$_SESSION['Balises2'] = substr($nature,0,$pos);
$_SESSION['Balises2'] = $_SESSION['Balises2'].$page;
echo $_SESSION['Balises2']. "ELSEIF";

c'est très bien pour page en page.
Mais j'ai des pages qui sont appelées plusieurs fois.
j'aimerai que sur ces pages si l'user à remplit plusieurs fois le même formulaire sur la même page, lorsqu'il fait précédent, cela ne retire que la dernière balise renseignée, et non toutes les balises avec le même chiffre.
Ex:
j'ai mis un marqueur dans chaque pages.
Page 1 >> formulaire rempli redirige vers la page 2.
Page2 >>demande si besoin d'ajouter une autre intervention.
Si oui ouverture de la page 3 avec le formulaire. une fois rempli l'user clique sur suivant et cela redirige vers la page 2, qui prends la nouvelle balise, et redemande si besoin d'ajouter une autre intervention.
Si l'user fait encore oui sur la page2, cela redirige vers la page 3, et ainsi de suite.
Si l'user fait précédent sur la page 2, cela redirige à la page 1 et supprime les balises avec le même marqueur.
J'aimerai que je puisse faire en sorte que cela ne supprime que la dernière balise et son marqueur.

Sachant que le chiffre n est pas toujours le même.
J'ai essayé avec strrpos() et strripos(), sans résultats.

voilà ce que j'ai essayé de faire.

elseif(isset($_SESSION['Balises2'])){
        $page='6';
   $nature = $_SESSION['Balises2'];
    $pos = strpos($nature, -$page);
    // // //Supprimer la chaine après la valeur de $pos = 25
   $_SESSION['Balises2'] = strrpos($nature,0,-$pos);
//precedent();
echo $_SESSION['Balises2']. "ELSEIF";


Merci pour votre aide.
Modérateur
Salut,


Je t'avoue que je n'ai pas compris grand chose, surtout sur ta façon de naviguer de page en page... j'ai pas suivi la fin de ton projet du coup je lui largué désolé...

Je voulais juste suggérer une idée, peut être COMPLETEMENT a coté de la plaque (je ne sais pas si c'est faisable ou si t'a la main la dessus), c'est de ranger tout ca avec des numéros d'étapes uniques qui s'incrémentes malgré les aller/retour pour garder le fil des actions :

Step1 : Page 1 >> formulaire rempli redirige vers la page 2.
Step2 : Page2 >>demande si besoin d'ajouter une autre intervention. Si oui ouverture de la page 3 avec le formulaire.
Step3 : une fois rempli l'user clique sur suivant et cela redirige vers la page 2, qui prends la nouvelle balise, et redemande si besoin d'ajouter une autre intervention.
Step4 : Si l'user fait encore oui sur la page2, cela redirige vers la page 3 (step5), et ainsi de suite.
Si l'user fait précédent sur la page 2 -> retour à Step3

Désolé si je suis hors sujet complet je voulais faire avancer le schmilblick Smiley smile
Bonjour _Laurent,
Tu as bien compris.
Et je viens de trouver par une function.

<?PHP
function precedent()
{
$d = $_SESSION['Balises2'];
$regex = "/(.*)[0-9]+\\[.*\\]/";
preg_match($regex, $d, $resultats);
$reste = $resultats[1];
// $reste contient la chaine sans le dernier morceau
echo $reste. "ELSEIF";
}
?>

Maintenant je dois apprendre comment appeler la function dans toutes mes pages, qui de trouve dans un dossier du site.
Merci
Bonjour JENCAL,

la function est soit indiquée comme non définie, soit pas appelé du tout.
J'en perds mon latin.
j'ai testé cette function
<?PHP
function precedent()
{
$d = $_SESSION['Balises2'];
$regex = "/(.*)[0-9]+\\[.*\\]/";
preg_match($regex, $d, $resultats);
$reste = $resultats[1];
// $reste contient la chaine sans le dernier morceau
echo $reste. "ELSEIF";
}
?>

Elle fonctionne bien quand elle est renseignée dans chaque page.
J'ai mis cette [c]function[/c] dans un fichier dans un dossier.
J'appel cette function dans mes pages.
elseif(isset($_SESSION['Balises2'])){
$page='3';
precedent();
}

Mais quand je fais appel à elle avec le bouton précédent, un message d'erreur me dit que la [c]function[/c] n'est pas définie.
a écrit :
Fatal error: Call to undefined function precedent() in C:\wamp\www\_Dev\sdp-asset2.php on line 20

Pourtant quand je tape le nom de la [c]function[/c] il ne l'affiche pas en erreur, et la voit bien dans l'IntelliSense.
Pourquoi?

J'ai mis
include 'Data/precedent()';

Même erreur
J'ai mis
include 'Data/function-precedent.php';

Plus d'erreur, mais le [c]echo[/c] dans la fonction n'affiche rien.

J'ai aussi déclaré en superVariable $reste dans la [c]function[/c].
<?PHP
function precedent()
{
    global $reste;
    $d = $_SESSION['Balises2'];
$regex = "/(.*)[0-9]+\\[.*\\]/";
preg_match($regex, $d, $resultats);
$reste = $resultats[1];
// $reste contient la chaine sans le dernier morceau
return $reste;
   
}
?>

voici le code la page contenant l'appel de la [c]function[/c], à la ligne 23.
<?php include("header.php"); ?>
<div  id="global">
<div id="texteglobal">
<div id="annule">
                            <span>En cas de demande annulée :</span>
                            <a href="code-annuler.php" class="boutonannule">Cliquez ici</a>
                        </span>
          
            </div>
</br></br>
<?php
// Set session variables
if (isset($_POST["balise"])) 
{ 
    $page='2';
   /* $_SESSION["Balises1"] = $_SESSION["Balises2"];*/
    // $_SESSION["Balises2"] = str_replace($page,"",$_SESSION['Balises2']);
    $_SESSION["Balises2"] = $_SESSION['Balises2']. $page. $_POST["balise"];
    echo $_SESSION["Balises2"]."if";
}
elseif(isset($_SESSION['Balises2'])){
    $page='3';
    include ('Data/function-precedent.php');
    echo $reste. "function elseIF";
}
?>
</br></br>
Le propriétaire de la machine est-il bien la personne désignée dans le champ "requested for" ?
</br></br>
<table align="center">
    <tr>
        <td>
        <form method="POST" action="sdp-demande2.php">
        <!-- //<input type="hidden" name="page" value="<?= $page;?>"/> -->
        <input type="hidden" name="balise" value="[USER_CMDB_DIF_NON]"/>
        <input type="submit" name="non" value="NON" />&nbsp;&nbsp;
        </form>
        </td>
        <td>
        <form method="Post" action="sdp-demande2.php">
        <!-- //<input type="hidden" name="page" value="<?= $page;?>"/> -->
        <input type="hidden" name="balise" value="[USER_CMDB_DIF_OUI]"/>
        <input  type="submit" name="oui" value="OUI"/>&nbsp;&nbsp;
        </form>
        </td>
    </tr>
</table>
<br/>
<div id="precedent">
<form>
			<button type="submit"><a href="sdp-all.php">Précédent</a>	</button>
			</form>
</div>
<br/>
</div><!*-------END DIV texte---->
        </div>
<?php include("footerR.php"); ?>

J'ai aussi essayé avec la supervariant [c]$GLOBALS[][/c] ligne 5
<?PHP
function precedent()
{
    global $reste;
    $d = $GLOBALS[$_SESSION['Balises2']];
$regex = "/(.*)[0-9]+\\[.*\\]/";
preg_match($regex, $d, $resultats);
$reste = $resultats[1];
// $reste contient la chaine sans le dernier morceau
return $reste;
   
}
?>

Cela n'affiche rien et ne fait pas du tout appel à la function.
Idem avec ce lien
include ("/Data/function-precedent.php");

Merci
Modifié par wisefun77 (20 Apr 2022 - 17:12)
Bonjour,
J'ai trouvé la solution.
Je mets mon "include 'Data/function-precedent.php';" dans le header, comme il est appelé dans toutes les pages.
Et j'appel ma function dans les pages voulues.
Merci.
Meilleure solution