Comment faire pour ..

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 : Comment faire pour ..

Re: Comment faire pour ..

par moogli » 22 févr. 2012, 18:59

De rien :mrgreen:

Re: Comment faire pour ..

par Fre3z69 » 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

Re: Comment faire pour ..

par Fre3z69 » 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é.

Re: Comment faire pour ..

par moogli » 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

@+

Re: Comment faire pour ..

par Fre3z69 » 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

Re: Comment faire pour ..

par moogli » 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. .

@+

Comment faire pour ..

par Fre3z69 » 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