Comment faire pour ..

Eléphant du PHP | 418 Messages

22 févr. 2012, 09:40

Salut à tous

j'aimerais savoir svp, comment faire pour savoir si mon titre contient ou pas "Re: "

En éffet, pour la messagerie privée j'utilise le même titre saf que je rajoute Re: lors d'une réponse.

J'aimerais afficher tous les messages dont le titre est égale au titre, avec ou sans "Re:"

j'ai essayer
$data = $query->fetch();
	{
	if (preg_match('#^(Re: )*$#',$data['mp_title'])) {$mptitle='Re: '.$data['mp_title'];}
	if (!preg_match('#^(Re: )*$#',$data['mp_title'])) {$mptitle=$data['mp_title'];}
...
...
       }
Mais je pense que je suis lion de ce qu'il faut faire, alors ne sachant que faire je viens vous demander comment on fait SVP?

Merci de votre aide, en espérant avoir était clair dans ma demande

Cordialement

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

22 févr. 2012, 10:03

salut,

sachant que le ^ indique le début du masque, et le $ la fin tu indique donc que la chaine passée en paramètre doit respecter complètement le masque, mais ce n'est pas le cas ;)

essai plutot ^(re:)+ en indiquant l'insensibilité à la casse (voir le saut de ligne).

exemple
preg_match('#^(re:)+#is',$data['mp_title']))

Un site te permettant de tester les expressions régulières http://www.gskinner.com/RegExr/ attention, les flags indiqués sont pour flash, (par exemple php ne comprendra pas le g, regarde dans la doc des expressions PRCE pour plus d'info) mais au moins tu aura le motif. .

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

22 févr. 2012, 10:24

En fait j'aimerais faire une requête qui prend en titre, " Titre " ou " Re: Titre "

Je vois pas comment faire, sachant que les id sont différent d'un post à un autre, et que le titre change pour peu que ça soit une réponse ou un premier message.

Voici ma requête actuelle
    $query = $cnx->prepare('SELECT users_id_sender, users_id_receiver, mp_id, mp_title, mp_post, mp_date, mp_read
    FROM t_mp
    WHERE mp_title = :titlemp');
    $query->bindValue(':titlemp',$titlemp,PDO::PARAM_STR);
    $query->execute();
	while ($data = $query->fetch())
	{
        }
Ici c'est titlemp qui doit être soit " Titre " soit " Re: Titre ", mais comment faire, c'est là la question.

Pour vous aider, voici le sql de la table t_mp
CREATE TABLE IF NOT EXISTS `t_mp` (
  `mp_id` int(11) NOT NULL AUTO_INCREMENT,
  `users_id_receiver` int(11) NOT NULL,
  `users_id_sender` int(11) NOT NULL,
  `mp_title` varchar(45) NOT NULL,
  `mp_post` longtext NOT NULL,
  `mp_date` datetime NOT NULL,
  `mp_read` enum('0','1') NOT NULL,
  PRIMARY KEY (`mp_id`),
  KEY `t_mp_FKIndex1` (`users_id_receiver`),
  KEY `t_mp_FKIndex2` (`users_id_sender`),
  KEY `fk_t_users3` (`users_id_receiver`),
  KEY `fk_t_users4` (`users_id_sender`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
users_id_receiver et users_id_sender sont liées à la table t_membre, mais ça n'est pas le problème.

Merci

Cordialement

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

22 févr. 2012, 10:44

est ce que cela ne serait pas plus simple d'utiliser un champ en auto jointure pour avoir le message "père".
en gros tu ajoute une référence au message et quand tu répond la 1ère fois tu met dans ce champs l'id du 1er message et chaque réponse utilise toujours le même id père pour avoir un fil (même principe utilisable pour un forum par exemple).

sinon il te faut utiliser un prédicat avec la clause like

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

22 févr. 2012, 10:46

Oui je vais tenter de mettre un champ qui contiendras l'Id du message père.
Je te tiens informé.

Eléphant du PHP | 418 Messages

22 févr. 2012, 12:01

Voici le résultat.

J'ai rajouter un champ nomé

Et voici la requête.
$mpid = (int) $_GET['mpid']; //On récupère la valeur de l'id
    //La requête nous permet d'obtenir les infos sur ce message :
    $query = $cnx->prepare('SELECT users_id_sender, users_id_receiver, mp_id, mp_title, mp_post, mp_date, mp_read, response_mp_id
    FROM t_mp
    WHERE mp_id = :id');
    $query->bindValue(':id',$mpid,PDO::PARAM_INT);
    $query->execute();
	// si response_mp_id est définit, c'est une réponse
	if (isset($data['response_mp_id'])) {
		$idmp=$data['response_mp_id'];
	}// sinon c'est le message prère
	if (!isset($data['response_mp_id'])) {
		$idmp=$mpid;
	}

....

    $query = $cnx->prepare('SELECT users_id_sender, users_id_receiver, mp_id, mp_title, mp_post, mp_date, mp_read, response_mp_id
    FROM t_mp
    WHERE mp_id = :idmp || response_mp_id = :idmp');
    $query->bindValue(':idmp',$idmp,PDO::PARAM_INT);
Ca fonctionne, on affiche bien le message parent et le prère

Merci

Cordialement

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

22 févr. 2012, 18:59

De rien :mrgreen:
Il en faut peu pour être heureux ......