Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1443 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Besoin d'aide en php, explication et eclairissement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besoin d'aide en php, explication et eclairissement

n°221478
zetoune
Posté le 27-09-2002 à 17:47:34  profilanswer
 

first, je débute php, donc je galère un peu ..
Je veux mettre un forum sur mon site. j'en ai trouvé un qui est très bien, mais il manque l'option "Etre prévenu par email lorsque réponse", l'option existe seulement sur la page ou on peut lire tous les posts du sujet..
Alors mon but, c 'est d'ajouter un checkbox , regarder si le checkbox a été sélectionné, puis ensuite lancer la méthode de la classe qui est nécessaire..
C'est la que je bloque.. Je ne suis pas sûr de comprendre correctement la syntaxe sous Php..
et c'est la que j'ai besoin d'aide..
 
la classe est appelé de cette facon.
fixed]require $root_path."sources/misc/tracker.php";[/fixed]
 
Ca je le comprend..
mais ce que je comprend pas.. c'est que dans le fichier tracker.php.. Je ne vois rien qui appelle la méthode de la classe.
 

$idx = new tracker;
 
class tracker {
 
    var $output    = "";
    var $base_url  = "";
    var $html      = "";
 
    var $forum     = array();
    var $topic     = array();
    var $category  = array();
 
     
    function tracker($is_sub=0) {


 
je suppose que la fonction tracker est appelé en créant l'objet
$idx = new tracker;
mais j'aurais pensé qu'il fallait ecrire quelque chose comme ca pour que ca marche..
$idx = new tracker;
$idx->tracker(); //Appelle la methode tracker de la classe tracker..
 
Pouvez m'expliquer comment ca marche tout ca ??
et comment je fais pour lancer tracker avec $is_sub=1 ??
 
HELP HELP  :ouch:

mood
Publicité
Posté le 27-09-2002 à 17:47:34  profilanswer
 

n°221496
ethernal
Chercheur de vérité...
Posté le 27-09-2002 à 18:47:34  profilanswer
 

tracker() est le constructeur de la classe tracker.
Donc en instanciant l'objet par  
$idx= new Tracker();
tu appelles et exécutes le constructeur.
 
Tu pourrais me donner l'adresse des sources ou je peux télécharger ce forum stp :)


---------------
...oups kernel error...
n°221503
zetoune
Posté le 27-09-2002 à 19:19:50  profilanswer
 

ouais pas de probleme...
http://www.ibf-french.com
 
Ok, bon alors comment je fais pour que $is_sub=1 quand instancie l'objet ?  

n°221505
ethernal
Chercheur de vérité...
Posté le 27-09-2002 à 19:28:25  profilanswer
 

thx :)
 
tu fais  
$idx= new Tracker(1);
 
$is_sub est initialisé à 0 si tu ne spécifies pas de valeur.
C'est une valeur par défaut qui permet de ne pas devoir l'écrire tout le temps.


---------------
...oups kernel error...
n°221509
zetoune
Posté le 27-09-2002 à 19:49:41  profilanswer
 

ok, ben alors..
Quelque chose que je ne comprends pas..
Si tu avais le source , je pourrais te poser une question car la, j ai peur de ne pas etre clair..
 
..
Je me lance quand meme..
 
Normalement sur ce forum.
Tu peux suivre un topic en cliquant sur "suivre ce sujet"
ce que ca fait.. c'est que on appelle on instancie un objet de la class tracker... Si $is_sub=0. alors ca perment de rediriger vers une page qui affiche des messages (d'erreur ou de confirmation d'inscription) , si $is_sub =1, ca ne redirige pas.. Ca passe directement sur les message..  
exemple :  
 

if ($is_sub != 1)
  {
   $print->redirect_screen( $ibforums->lang['sub_added'], "act=ST&f={$this->topic['fid']}&t={$this->topic['tid']}&st={$ibforums->input['st']}" );
  }
  else
  {
   return;
  }


 
 
Hors... (ce que je veux c'est pouvoir appeler ce constructeur  
avec $is_sub=1 )
Quand j'ajoute celle ligne : require $root_path."sources/misc/tracker.php"; dans la page ou on enregistre le post.. et que je mets $is_sub a 1(il est vraiment a 1, ca marche, pas de probleme)
Il ne prend plus compte de la redirection dans la page ou j ai mis la ligne citée plus haut.
Ceci est la ligne de redirection de la page "POST.php" ou je veux appeler ma classe Tracker
$std->boink_it($class->base_url."&act=ST&f={$class->forum['id']}&t={$this->topic['tid']}" );
 
Donc en mettant $Is_sub a 1, il doit eviter les redirection dans la classe Tracker et prendre celle dans la class Post..
mais la redirection ne se fait plus (par l intermédiaire de boink_it) si je mets ... require tracker.php
 
La Méthode boink_it

function boink_it($url)
 {
  global $ibforums;
 
  if ($ibforums->vars['header_redirect'] == 'refresh')
  {
   @header("Refresh: 0;url=".$url);
  }
  else
  {
   @header("Location: ".$url);
  }
   
  exit();
 }


 
 
Je ne sais pas si je suis très clair... mais bon.. si tu peux me filer un coup de main.. j'apprécirais.


Message édité par zetoune le 27-09-2002 à 19:51:02
n°221511
ethernal
Chercheur de vérité...
Posté le 27-09-2002 à 19:55:52  profilanswer
 

j'ai pris le source et j'ai déjà jeté un (petit) oeil.
dès que je vois qqch je te fais signe pcq là j'ai pas encore eu le temps de tout saisir :D


---------------
...oups kernel error...
n°221514
zetoune
Posté le 27-09-2002 à 20:01:21  profilanswer
 

ben ok.. j'attends que tu es regardé plus précisément

n°221525
ethernal
Chercheur de vérité...
Posté le 27-09-2002 à 20:46:37  profilanswer
 

"Alors mon but, c'est d'ajouter un checkbox , regarder si le checkbox a été sélectionné, puis ensuite lancer la méthode de la classe qui est nécessaire.. "
 
Ou veux tu en venir exactement ?
"être prévenu en cas de réponse" sur la page de list des posts ne te convient pas, tu le veux sur quelle page ?
 
(en tout cas, ça risqe d'être dur et prendre du temps, y a rien de plus compliqué que de se plonger dans les sources d'un autre...)


---------------
...oups kernel error...
n°221529
zetoune
Posté le 27-09-2002 à 20:56:16  profilanswer
 

ouais c'est ca..
je veux le rajouter sur les pages  qui ont a trait aux posts (edit,ajout,reponse)
comme le forum d'hardware en fait.

n°221535
zetoune
Posté le 27-09-2002 à 21:13:52  profilanswer
 

je pourrais rajouter deux trois lignes de codes sauvages.
Genre
if ($moncheckestcoche=='YES';)
{
  if (si tu n es deja inscrit au forum';)
     inscrire_to_db
}
 
mais je voudrais faire quelque chose de plus propre que ca..
 

mood
Publicité
Posté le 27-09-2002 à 21:13:52  profilanswer
 

n°221658
ethernal
Chercheur de vérité...
Posté le 28-09-2002 à 04:08:29  profilanswer
 

désolé, c'est pas possible d'après ce que j'ai vu :(
 
pour activer le tracker, il faut que l'url comporte "...&act=Track&..." hors une page de redirection est affichée à la fin.
Pour poster, il faut que "act=Post", et elle est redirrigée aussi.
 
Tu ne saurais pas à la fois enregistrer le message et activer la notification dans une seule page (pas 2 redirection en 1 fois).
 
 
2 solution

  • tu pourrais insérer :
Code :
  1. $db_string = $DB->compile_db_insert_string( array (
  2.  'member_id'   => $ibforums->member['id'],
  3.          'topic_id'    => $this->topic['tid'],
  4.  'start_date'  => time(),
  5.  )       );
  6. $DB->query("INSERT INTO ibf_tracker (" .$db_string['FIELD_NAMES']. " ) VALUES (". $db_string['FIELD_VALUES'] ." )" );


dans le fichier /source/post.php
La récupération des arguments passés par le post se fait normalement par  
$ibforums->input['nom_argument'];
 
mais bon c'est plus du brol qu'autre chose  :cry:  
 

  • tu modifies le constructeur de Tracker
Code :
  1. $idx = new tracker;
  2. class tracker {
  3.     var $output    = "";
  4.     var $base_url  = "";
  5.     var $html      = "";
  6.     var $forum     = array();
  7.     var $topic     = array();
  8.     var $category  = array();
  9.    
  10.     function tracker($is_sub=0, $redir=1) {
  11. ....
  12. ....
  13. if ($is_sub != 1 && $redir==1)
  14. {
  15. $print->redirect_screen( $ibforums->lang['sub_added'], "act=ST&f={$this->topic['fid']}&t={$this->topic['tid']}&st={$ibforums->input['st']}" );
  16. }
  17. else
  18. {
  19. return;
  20. }


 
dans la page post.php
tu ajoutes avant la redirection un test de la variable postée  

Code :
  1. if ($ibforum->input['notify']==1) // (par ex)
  2. {
  3.      $tracker= new Tracker(0,0);
  4. }


Message édité par ethernal le 28-09-2002 à 04:09:46

---------------
...oups kernel error...
n°221663
zetoune
Posté le 28-09-2002 à 04:30:27  profilanswer
 

ouais ben en fait.. je viens juste de terminer ma solution et ca marche..(et tu as repondu juste apres que j ai fini:P) mais c'est la meme chose que toi (deuxieme version)..
sauf qu'en fait.. j ai remarqué que act=Track que lorsqu on clique sur Suivre ce sujet..
Donc j ai rajouté dans tracker.php les lignes suivants.

if ($act=="Track" )
{
 $idx = new tracker;
}
else
{
 $idx = new tracker(1);
}


 
 
et dans la class Post j ai rajouté une methode notify_answer qui appelle la class Tracker


function notify_answer($topic_id=-1,$member_group)
 {
  global $ibforums, $std ;
   
  if (($ibforums->input['enablenotification']==1)&&($std->is_number($topic_id)))
  {
   if ($topic_id>=1)
   {
    $ibforums->input['f']=$member_group;
    $ibforums->input['t']=$topic_id;
    require $root_path."sources/misc/tracker.php";
   }
  }
 }


 
 
 
Voila. Merci pour ton aide... C'est cool..
 

n°221664
ethernal
Chercheur de vérité...
Posté le 28-09-2002 à 04:41:19  profilanswer
 

c'est une très bonne solution aussi :)
 
franchement pour qq qui y connait rien en php, tu te  débrouilles vraiment très bien, et c'est rare  :jap:  
en général, ces sujets sont les pires à répondre, pcq la personne y connait que dalle et qu'elle te lache plus (c presque du harcelement...) tant que tu lui as pas filé qq chose qui tourne et qu'elle sait implémenter (c'est pour cela que personne se lance :lol: ).
 
je suis étonné en bien pour une fois ;)
Amuses toi bien et bonne continuation :)
 :hello:


Message édité par ethernal le 28-09-2002 à 04:41:44

---------------
...oups kernel error...
n°221665
zetoune
Posté le 28-09-2002 à 04:46:53  profilanswer
 

Merci du compliment..
J ai commencé le php depuis la semaine derniere...
Mais je programme en ASP, meme si c'est très différent , ca aide quand même a comprendre..et j'ai fait un peu de C et de .Net
 
C'est pour ca que je voulais l'Avis que quelqu un qui connaissait bien sur php car je voulais faire quelque chose de propre en utilisant les outils deja programmés..
 

n°222619
zetoune
Posté le 02-10-2002 à 02:33:40  profilanswer
 

Je ne sais si tu viens regarder encore ce topic, mais  
J'aurais une question encore..
Dans le code du forum.
y a un truc comme :
 
return <<<EOF
 
Comment je dois interpréter cette ligne ???
 

n°222735
ethernal
Chercheur de vérité...
Posté le 02-10-2002 à 14:23:25  profilanswer
 

dans quel fichier ?


---------------
...oups kernel error...
n°222759
zetoune
Posté le 02-10-2002 à 14:58:32  profilanswer
 

ben a peu près dans pas mal tous les fichiers skin_*.php
 
Exemple dans skin_post.php dans /skin/s1/skin_post.php
 
les fonctions sont toutes du genre
 
function NomFonction($param)
{
     global $ibforums;
     return <<<EOF
     <!--Code HTML-->
     EOF;
}
 
Un - je ne comprends pas comment ca fait pour fonctionner alors qu'il y a du code HTML dans une fonction .
Deux - Je suppose que le return <<<EOF doit informer au server que le texte qui suit ne doit pas etre du php ?
 
Parceque j'ai fait une fonction en plus et j ai du mettre return <<<EOF pour qu elle fonctionne. SInon ca plantait. Dans ma tête le EOF c est juste pour le curseur sur un enregistrement non ?

n°222767
ethernal
Chercheur de vérité...
Posté le 02-10-2002 à 15:21:57  profilanswer
 

désolé je ne connais pas cette notation.
et mes recherches ont été infructueuses :(
 
donc je suppose que cela correspond à un  

Code :
  1. return "texte et $variables_php";


sans avoir à se soucier des ' et " à escaper (entre autre avec le js)....
 
Si tu trouves d'autres renseignements là dessus, fais en moi part stp :)


---------------
...oups kernel error...
n°222770
ethernal
Chercheur de vérité...
Posté le 02-10-2002 à 15:26:07  profilanswer
 

ha quoique :
http://www.php.net/manual/en/function.echo.php

Citation :

echo <<<END
This uses the "here document" syntax to output
multiple lines with $variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon no extra whitespace!
END;


 
donc le principe dois être le même avec EOF et return.
 
je me demande même si le tag EOF ou END n'est pas simplement choisi par le programmeur.  La règle serait de mettre  
return <<<TAG
mon texte sur plusieurs lignes avec des variables
TAG;


Message édité par ethernal le 02-10-2002 à 15:30:29

---------------
...oups kernel error...
n°222773
zetoune
Posté le 02-10-2002 à 15:29:37  profilanswer
 

ben moi j ai trouvé des trucs mais c'était en perl..
 
donc nous sommes du meme avis, c'est ce que je me disais...
ouais si je trouve je te dis..
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Besoin d'aide en php, explication et eclairissement

 

Sujets relatifs
[Projet - AI] Besoin d'aide de connaisseur pour me guider !!!!![C] besoin d'aide pour 2 malheureux trucs SVP
besoin d'aide avec phpmynews!Aide pour un sujet sur le php et l'asp
Besoin d'aide pour creation de moteur de rechercheJ'ai besoin d'aide pour faire un popup
Plus de sujets relatifs à : Besoin d'aide en php, explication et eclairissement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR