Lien sur la meme page

Mammouth du PHP | 725 Messages

01 juil. 2012, 07:58

Bonjour,

Le lien sur la meme page est connu par son code:
<a name="target">
contenu
</a>

<a href="page.html#target">click</a>
J'ai un code de commentaires avec LIMIT = 10 et un lien pour afficher le reste des commentaires

Un lien du genre:
echo '<a name="'.$idcom.'">'; // soit idcom est l'id du commentaire
echo $commentaire';
echo '</a>';
En face de chaque commentaire, on affiche son ID:

Code : Tout sélectionner

1# Commentaire 1 2# Commentaire 2 3# Commentaire 3
Si je voudrais copier l'id, (par exemple 10), du commentaire et l'envoyer un ami, clique droit donne:

Code : Tout sélectionner

localhost/index.php/commentaire.html#10
Si mon ami ouvre le lien, il va tpmber sur le commentaire numero 10.

Alors tout va bien jusqu'au 10 (a rappeller LIMIT 10).

Si je prends 11 et au dessus de ce chiffre, mon ami ne tombe pas sur le commentaire 11 et 12 ,... mais au haut du page, la raison duquelle LIMIT empeche l'affichage des autres commentaires au-dessus de 10.

Merci de me donner une bonne methode pour pouvoir resoudre ce soucis.

Merci

Petit nouveau ! | 1 Messages

01 juil. 2012, 08:17

Bonjour,
Vous pouvez limiter votre variable $idcom par une condition comme ci:
<?php
$idcom = ""; // votre definitions
if($idcom > 10 || $idcom < 1){
$idcom = 1;
} else {
$idcom = "votre parametre";
}
?>
c'est fixe a votre issue?

Mammouth du PHP | 725 Messages

01 juil. 2012, 08:34

Je pense pas comprendre votre solution, je veux recuperer ca (#10), ce qui est apres #, et faire comme ca:
if($idcom > 10) // si le chiffre apres # est supperieur a 10
{
$perPage = $totalComs; // nombre de commentaires par page est egal au nombre total des commentaires (par exemple 25 commentaires)
}
else
{
$perPage = 10; // sinon on affiche juste les 10 commentaires
}

$req = SELECT * FROM commentaires LIMIT $perPage

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

01 juil. 2012, 08:52

L'ancre (l'information passée après le #) n'est à ma connaissance pas transmise par les navigateurs au serveur. Elle permet uniquement au navigateur de se positionner sur la page, donc pas moyen de récupérer l'information en php.

En revanche, tu peux soit la spécifier en plus dans l'url, ton lien devrait alors être de la forme

Code : Tout sélectionner

localhost/index.php/commentaire.html?idCom=10#10
(attention aux règles de réécriture pour le traitement php) ou la traiter après chargement de la page en javascript (document.location.href te retournera l'url complète)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 725 Messages

01 juil. 2012, 13:18

en JS avec les Regex?

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

01 juil. 2012, 14:36

Ca peut se faire avec une expression régulière si tu veux, mais ce n'est pas obligatoire. En javascript, l'instruction document.location.href va te retourner l'url spécifiée dans la barre d'adresse. Tu vas donc récupérer "http://localhost/index.php/commentaire.html#10".

A partir de là, à toi de voir comment tu veux la traiter pour récupérer le "10" (regexp, strpos+substring, ...) selon ce avec quoi tu es le plus à l'aise :)

Par contre si tu le fais en js, tu n'auras ton résultat qu'une fois que la page est chargée. Donc si je demande le 12 alors que tu n'as affiché que de 1 à 10, il faudra faire un traitement complémentaire pour actualiser le résultat :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 725 Messages

01 juil. 2012, 16:39

Par contre si tu le fais en js, tu n'auras ton résultat qu'une fois que la page est chargée. Donc si je demande le 12 alors que tu n'as affiché que de 1 à 10, il faudra faire un traitement complémentaire pour actualiser le résultat :)
je suis concerne par cette partie
php-debutant/lien-sur-meme-page-t264792.html#p390922

voici un exemple: le "t" est 264792 et le "p" est 390922, je suis concerne par le "p"

Mammouth du PHP | 725 Messages

03 juil. 2012, 04:00

Est ce qu'on peut recupere le 10 en PHP, j'ai essaye par REQUEST_URI, resultat jusqu'a ".html", ne recupere pas ce qui est apres le #

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

03 juil. 2012, 21:28

Comme indiqué ci-dessus, si tu veux récupérer la valeur "10" en php, il faut que celle-ci soit placée avant le # pour être transmise au serveur.

Donc soit tu modifies tes liens pour spécifier ton id dans le query, via un paramètre dans l'url ou une url réécrite (traité par php) ET dans l'ancre (traitée par le navigateur), soit tu veux uniquement le garder dans l'ancre et dans ce cas tu n'as pas d'autre choix que de le traiter avec javascript côté client.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 725 Messages

04 juil. 2012, 10:59

je l'ai mis comme ca:
http://localhost/commentaire/idcom22.html
Je l'ai mis en parametres, alors:
if(IsSet($idcom))
{
// je selectionne tous les commentaires
$query = SELECT * FROM commentaires
}
else
{
$query = SELECT * FROM commentaires LIMIT 10;
}
dans le premier cas, comment puis je aller directement sur la meme page au commentaire 22.

Merci