[RESOLU] une question sur lettres intercalaires dans menu php-mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] une question sur lettres intercalaires dans menu php-mysql

[resolu]Re: une question sur lettres intercalaires dans menu php-mysql

par Sebasto » 16 juil. 2016, 17:11

Bonjour Ryle,

Merci beaucoup.

C'est exactement ce qu'il me fallait.
Pour info j'ai eu juste un petit souci avec la casse.
Le code y était sensible et donc j'ai dû ajouter à 3 lignes la fonction strtoupper pour un bon fonctionnement.
J'ai pu ajouter mes signets aussi (et pour les lecteurs, j'ai appris qu'avec html5 'a name' était obsolète et qu'il fallait passer à 'a id' !).

Encore merci

A la prochaine (j'apprend doucement mais sûrement).

Sebasto

(je voulais marquer comme résolu, je jurerai avoir vu le bouton mais là je ne trouve pas)

Re: une question sur lettres intercalaires dans menu php-mysql

par Ryle » 13 juil. 2016, 16:22

Bonjour,

Je pense que pour ton besoin il suffit de stocker l'initiale des mots courants dans une variable temporaire et de la mettre à jour à chaque fois que celle-ci change :
$initiale = ''; // vide par défaut pour détecter le changement avec le premier mot
foreach($result as $row){
   $rang = $row['Rang'];
   $monliennomassocie = $row[' monlienavecnomassocie'];

   $initialeMot = substr($monliennomassocie, 0, 1); // récupère l'initiale du mot à afficher 
   if ($initialeMot != $initiale) { // l'initiale n'est pas la même que celle du dernier mot affiché ?
       echo '<h1>' . $initialeMot . '</h1>'; // on l'affiche en titre
       $initiale = $initialeMot; // on met à jour la dernière initiale affichée
   }
   echo "<a href='mapage.php?Rang=$rang'>
               <i>$monlienavecnomassocie</i>
              </a>";
}

Re: une question sur lettres intercalaires dans menu php-mysql

par Sebasto » 13 juil. 2016, 13:29

Bonjour Or 1,
Comme tous les débutants, je n'avais pas osé tester ton code car je ne le comprenais pas.
Bon j'ai quand même osé et cela marche mais cela ne donne pas le résultat escompté même après plusieurs tâtonnements.
J'obtiens
A
Premier mot en A
A
Second mot en A
A
et ainsi de suite et quand la liste de mot change de la nième lettre en A à la première lettre en B, j'ai toujours A en intercalaire et pas B.
Donc 2 soucis, il y a trop d'intercalaires et le changement de lettre ne se fait pas !
Voici ton code modifié par moi

$lettre = '';
foreach($result as $row){
if($result[0]["monlienavecnomassocie"] != $lettre){
echo '<p>&nbsp;&nbsp;' . $lettre = substr($result[0]["monlienavecnomassocie"],0,1) . '</p>';
}
echo'<p>&nbsp;&nbsp;<a href="mapage.php?Rang=' . $row["Rang"] .'"><i>' . $row["monlienavecnomassocie"]. '</i></a></p>';
}

J’ai aussi essayé avec pour la condition :
if(substr($result[0]["monlienavecnomassocie"],0,1) != $lettre){
Mais c’est pas mieux.
Merci de ton aide
A+

Sebasto

Re: une question sur lettres intercalaires dans menu php-mysql

par Sebasto » 12 juil. 2016, 17:59

Bonjour or1 et aureusms,

Merci pour ces réactions rapides.

Or1 je n'ai pas compris car je ne retrouve pas mon bout de code. Pourtant cela a l'air lumineux de simplicité... donc ne m'abandonne pas stp et dis moi comment procéder pas à pas (je suis encore débutant!).

Aureusms, J'ai essayé mais y a un bug.

Mais avant je me suis demandé si mon texte n'était pas ambigu :
Je ne veux pas remplacer la 1ère lettre par une majuscule, mais pour chacune de toutes les lettres de l'alphabet (A à Z) intercaler une lettre seule pour séparer (d'ailleurs j'y ajouterai un signet pour un accès rapide depuis le haut) et aérer.
Par exemple entre le dernier mot 'monlienavecnomassocie' en c et le premier mot 'monlienavecnomassocie' en d de mon menu je veux intercaler <p>&nbsp;</p><a name="D">D</a><p>&nbsp;</p> (avec en haut du menu <a href="#D">D</a> pour la lettre D par ex)
et dans le menu je verrai

cuneiformes monlienavecnomassocie
<a name="D">D</a>
darien monlienavecnomassocie

Bon voici le code après adaptation, et une broutille modifiée (il est bon jusqu'à $tabTmp = array();)

Code : Tout sélectionner

$requete = $connexion->prepare("SELECT Rang, Monlienavecnomassocie FROM table1 ORDER BY Monlienavecnomassocie"); $requete->execute(); $result = $requete->fetchAll(); foreach ($result as $row) { echo'<p>&nbsp;&nbsp;<a href="mapage.php?Rang=' . $row["Rang"] .'"><i>' . $row["Monlienavecnomassocie"]. '</i></a></p>'; } $tabTmp = array(); $i=0; foreach ($result as $cle => $valeur) { $tabTmp[$i] = mb_strtolower(substr($valeur['Monlienavecnomassocie'],0,1),'utf-8'); $i++; endforeach; $tabTmp = array_filter(array_unique($tabTmp)); $i=0; foreach($result as $cle => $row) { $texte = (in_array($i,array_keys($tabTmp))) ? uc_first($row['Monlienavecnomassocie']) : $row['Monlienavecnomassocie']; echo'<p>&nbsp;&nbsp;<a href="mapage.php?Rang=' . $row["Rang"] .'"><i>' . $texte . '</i></a></p>'; $i++; } }
J'ai une erreur à la ligne qui correspond à:
endforeach;

J'ai aussi un souci de compréhension pour la création de $cle et pour l'ajout de mon signet destinataire (<a name="D">D</a>)
Ne t'inquiète pas pour les accents, il n'y en a pas

A vous lire tous le 2 et encore mercis !

A+, Seb

Re: une question sur lettres intercalaires dans menu php-mysql

par Aureusms » 11 juil. 2016, 22:39

Est ce que tu cherches à déterminer toutes les premières lettres à chaque changement dans l'ordre Alphabétique ?

Je te propose ceci (attention pas testé) :
function getMenu($bdd) {
	$sql =  "SELECT Rang, 
			monlienavecnomassocie
		FROM table1
		ORDER BY monlienavecnomassocie";
	
	$result = $prepare->fetchAll();

	foreach($result as $row){
		$rang = $row['Rang'];
		$monliennomassocie = $row['monlienavecnomassocie'];
		echo "<a href='mapage.php?Rang=$rang'><i>$monlienavecnomassocie</i></a>";
	}
	
	//on créé un tableau avec que les premières lettres en minuscule sortie de la base de données
	$tabTmp = array();
	$i=0;
	foreach ($result as $cle => $valeur) :
		$tabTmp[$i] = mb_strtolower(substr($valeur['monlienavecnomassocie'],0,1),'utf-8');
		$i++;
	endforeach;
	
	//on enlève les doublons (attention les accents ne sont pas gérés)
	//les clefs serviront de base de recherche
	$tabTmp = array_filter(array_unique($tabTmp));
	
	$i=0;
	foreach($result as $cle => $row){
		$rang = $row['Rang'];
                //si la clefs $i existe en tant que clef dans le tableau $tabTmp, alors on met en majuscule
		$texte = (in_array($i,array_keys($tabTmp))) ? uc_first($row['monlienavecnomassocie']) : $row['monlienavecnomassocie'];
		echo "<a href='mapage.php?Rang=$rang'><i>$texte</i></a>";
		$i++;
	}
}

Re: une question sur lettres intercalaires dans menu php-mysql

par or 1 » 11 juil. 2016, 18:55

$lettre = '';
 foreach($result as $row){
   $rang = $row['Rang'];
   $monliennomassocie = $row[' monlienavecnomassocie'];
if($monliennomassocie[0] != $lettre){
echo ...;
$lettre = $monliennomassocie[0];
}
    echo "<a href='mapage.php?Rang=$rang'>
               <i>$monlienavecnomassocie</i>
              </a>";
 }

une question sur lettres intercalaires dans menu php-mysql

par Sebasto » 11 juil. 2016, 18:28

Bonjour à tous,

J’ai un menu très long ordonné alphabétiquement et je voudrais l'éclaircir sans js en intercalant les lettres de l'alphabet à chaque changement de première lettre des mots, par exemple ‘D’ entre le mots cunéiformes et darien dans le menu.

J’ai obtenu ce menu (qui marche) avec le code :

Code : Tout sélectionner

function getMenu($bdd) { $sql = "SELECT Rang , monlienavecnomassocie FROM table1 ORDER BY monlienavecnomassocie"; $result = $prepare->fetchAll(); foreach($result as $row){ $rang = $row['Rang']; $monliennomassocie = $row[' monlienavecnomassocie']; echo "<a href='mapage.php?Rang=$rang'> <i>$monlienavecnomassocie</i> </a>"; } }

Je ne sais pas ni comment procéder, ni s’il faut une condition dans le code actuel ou après.

Pourriez-vous me donner des pistes (simplement je suis encore débutant en php-mysql-pdo)?

Merci d'avance

Sebasto