Faire apparaitre et disparaitre des div PHP javascript CSS

Signaler
Messages postés
32
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
26 octobre 2011
-
cs_aKheNathOn
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012
-
Bonjour à tous je vous supplie de m'aider.
j'explique le probleme :
je fais un site sur lequel on peut publier des articles et les commenter et faire des reponse aux commentaires.
bref je fais un page articles.php

en gros dans cette page je fais afficher tous mes articles dans mon div "liste_article" et en fait j'aimerais qu'en dessous de chaque article il y ait deux bouton ou "lien"

le premier qui affiche la liste de tous les commentaires déjà présent sur cet article.

le second qui ne s'affiche que si le membre est connecté (pour ca je ferais un test qui verifie si mes variable login stocké en session existe.)
qui affiche donc un formulaire permettant d'ajouter un commentaire sur l'article en question.

j'ai essayé de m'inspirer de cela :
http://www.journaldunet.com/developpeur/tutoriel/css/040610-css-div-montrer-cacher.shtml

j'ia essayer de l'adapter à mon code mais il y a des soucis.
nottament avec ma fonction javascript.
la fonction javascript fais en sorte que quand la page est chargé si javascript est disponible le contenu est caché directement or la ce n'est pas le cas et quand je clic sur fermer cela me cache tout contenu de article.php

de plus maintenant je ne sais pas trop ce qui se passe mais en cliquant fermer cela m'affiche un message d'erreur :

Forbidden

You don't have permission to access /apamonde/javascript : cacheId ('contenu'); on this server.



voila désolé pour ce post méga long mais je suis vraiment "in da shit " pour ce problème.


voici le contenu de ma page article.php
--------------------------------------------------------------------------------------


Liste des articles :

<?php while ($donnees2 = mysql_fetch_array($retourArticles)){ ?>




<titre>
<?php echo $donnees2['titre'];?>


</titre>
<?php echo $donnees2['contenu'];?>






<!-------------------------------------------------------------->


  [javascript:afficheId('contenu') Nous contacter]


---------------------




<!--
-->
  

  
    <!--[javascript:cacheId('contenu'); Fermer]-->
    Fermer 
  

Test pour les commentaires






<?php } ; ?>


--------------------------------------------------------------------------------------

ma page fonction.php que j'inclue dans articles.php
--------------------------------------------------------------------------------------
<script language = 'javascript'>
function afficheId(baliseId) 
  {
  if (document.getElementById && document.getElementById(baliseId) != null) 
    {
    document.getElementById(baliseId).style.visibility='visible';
    document.getElementById(baliseId).style.display='block';
    }
  }

function cacheId(baliseId) 
  {
  if (document.getElementById && document.getElementById(baliseId) != null) 
    {
    document.getElementById(baliseId).style.visibility='hidden';
    document.getElementById(baliseId).style.display='none';
    }
  }

cacheId('contenu'); 
// si JavaScript est disponible, cache le contenu dès le 
// chargement de la page. Sans JavaScript, le contenu sera 
// affiché.
</script>

--------------------------------------------------------------------------------------

ma page css
#commentaire.clicTitre
  {
  border-color: #000000;
  border-top: 1px solid;
  border-left: 1px solid;
  border-right: 1px solid;
  border-bottom: 2px dashed;
  background-color: #eeeeee;
  width : 452px ;
height : auto;
  }
  
#commentaire.clicCacher
  {
  top: -20px;
  position: relative;
  width : 452px ;
height : auto;
  /*text-align:right;*/
  }
  
#commentaire.contenant 
  {
  display : block;
  border: 1px solid #000000;
  width : 452px ;
height : auto;
  }

9 réponses

Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012

Un grand post mérite une grande réponse

Je pense en voyant ce que tu as codé que ce n'est pas bon du tout. Ton problème c'est que tu n'utilises pas la bonne méthode ... du coup tout est mélangé et c'est brouillon.

Si tu veux que je t'aide il va falloir commencer par faire du ménage pour ensuite ne gérer que les problèmes liées à ce que tu veux faire et pas les effets de bords javascript.

Si t'es motivé je vais te donner la marche à suivre (en version simplifiée pour ne pas t'embrouiller) :

1. Fais un fichier database/article.php :

<?php
class article {
  public $id;
  public $titre;
  public $contenu;
  public static function ListArticles($category...) {
     $articles = array();
     ...fait ton truc mysql_select...
     while ($donnees2 = mysql_fetch_array($retourArticles)) {
       $article = new self();
       $article->id = $donnees2['id'];
       $article->titre = $donnees2['titre'];
       $article->contenu = $donnees2['contenu'];
       $articles[] = $article;
     }
     return $articles;
  }
}


1.bis Si tu as fait un config.inc.php, et un database.php pour ta base de données, va falloir exposer la connexion - donc dans la partie connect :

  $GLOBALS['db'] = mysql_connect....


2. Reprends ton fichier articles.php :
<?php
  ...initialisation du système...
  require_once('database/article.php');
  $articles = article::ListArticles(...);
?>


<?php foreach($aticles as $article) { ?>
  

    <?php echo $article->titre; ?>

    
      <?php echo $article->contenu; ?>
    

 
    ...
  

<?php } ?>




3. Mets ton javascript dans un fichier aticles.js, sans les balises <script...>. Au passage pour éviter des problèmes de compatibilités entre ie et ff, et puis simplifier les choses je te conseille de télécharger et d'ajouter à ta page jQuery : http://docs.jquery.com/Downloading_jQuery

Dans la balise head mets les réferences vers jquery puis vers ton fichier js.

4. Modifies ton code dans articles.js, il devient :

function afficheId(baliseId) {
  $(baliseId).show();
}
function cacheId(baliseId) {
  $(baliseId).hide();
}
$(document).load(function() {
  cacheId('contenu'); 
});


Reviens poster un message avec l'erreur que tu obtiens quand t'en seras là...

Bon courrage,
Akh
Messages postés
32
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
26 octobre 2011

Merci beaucoup de ta réponse je teste ça ce week end.
Messages postés
32
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
26 octobre 2011

je suis en train de bosser sur ça et je ne comprend pas bien cette partie

1.bis Si tu as fait un config.inc.php, et un database.php pour ta base de données, va falloir exposer la connexion - donc dans la partie connect :

Code PHP :
$GLOBALS['db'] = mysql_connect....


pour me connecter a ma base je fais ca en debut de page

session_start();
//@$_SESSION['login'] = $_POST['login'];
//@$_SESSION['pass'] = $_POST['pass'];

if(@file_exists("connect.php")){
include("connect.php");
echo "connexion réussie";
}
$bdconnex = connectionBD();
include ("fonction.php");


et dans ma page fonction.php ya ça juste

function connexionBd ()
{
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = '';
$dbDb = 'apamm';

$paramConnexion = mysql_connect($dbHost,$dbUser,$dbPass);
if(!$paramConnexion)
{
echo 'non Connecté';
exit ();
}
else 
{
//echo 'connecté

';
}
if (!mysql_select_db($dbDb))
{
exit ('impossible de localiser la base de données

');
}

return $paramConnexion ; 
}




je comprend pas bien ton code de connexion je pense que mon truc suffit en tout cas cela marche.
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012

yep, t'as raison, ton truc marche et pas besoin de plus. Je demande juste de rendre $bdconnex global pour l'utiliser n'importe où dans le code ou les fonctions.

donc dans : fonction.php

[code php]
function connexionBd ()
{
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = '';
$dbDb = 'apamm';
$paramConnexion = mysql_connect($dbHost,$dbUser,$dbPass);
if(!$paramConnexion)
{
echo ' non Connecté ';
exit ();
}
else
{
//echo 'connecté

';
}
if (!mysql_select_db($dbDb))
{
exit ('impossible de localiser la base de données

');
}
return $paramConnexion ;
}
/code

Et dans chaque haut de page :

[code php]
require_once('fonction.php');
$GLOBALS['bdconnex'] = connectionBD();
...
/code

Et ensuite dans database/article.php :

[code php]
class article {
public $id;
public $titre;
public $contenu;
public static function ListArticles($category...) {
$articles = array();
$retourArticles = mysql_query("SELECT ....", $GLOBALS['bdconnex']);
while ($donnees2 = mysql_fetch_array($retourArticles)) {
$article = new self();
$article->id = $donnees2['id'];
$article->titre = $donnees2['titre'];
$article->contenu = $donnees2['contenu'];
$articles[] = $article;
}
return $articles;
}
}
/code

--- Tu as une version plus propre mais faut faire un petit effort pour l'écrire en objet :

1. Tu supprimes fonction.php
2. Tu créés un lib/config.php :

[code php]
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PWD', '');
define('DB_NAME', 'ta_base_de_donnees');
/code

3. Tu crées un fichier lib/database.php :

[code php]
<?php
class database {
private static $ptr;
public static function connect() {
self::$ptr = ...
}
public static function query($sql) {
...
}
}
/code

4. Tu crées un lib/bootstrap.php :

[code php]
<?php
require_once(dirname(__FILE__).'/config.php');
require_once(dirname(__FILE__).'/database.php');
database::connect();
/code

5. Dans n'importe quelle page du site tu n'auras plus qu'à écrire :

[code php]
<?php require_once('lib/bootstrap.php'); ?>
....
/code

Dans tous les cas, tu n'est pas obligé de faire une classe pour la base de données, mais au moins ranges dans des classes chaque chose car sinon tu t'y perdras dans ton code.

Bon courage,
aKheNAtHoN
Messages postés
32
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
26 octobre 2011

je ne comprend pas :
dans lib/database.php

class database {
private static $ptr;
public static function connect() {
self::$ptr = ...
}
public static function query($sql) {
...
}
}

la fonction connect je met quoi dedans ?
idem pour query

désolé.
merci.
Messages postés
32
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
26 octobre 2011

ya quelqu'un ?
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012

Hello jeffrey,

Dans la fonction connect tu est censé y mettre la connection à ta base de données - je pense que database::connect() est assez explicite comme nom de fonction.

Tu manque de bases au niveau développement, ça va être compliqué pour toi de faire un projet aussi complexe.

Pour répondre à ta question initiale tu as une erreur de syntaxe dans la balise <a href... de la div class="clicCacher"... Tu as mis des espace dans le href="..." et du coup au lieu de le lire comme du java il cherche à lancer la commande comme une url de page web.

Tu as la bonne syntaxe juste au dessus : href="javascript:cacheId('contenu');"

Bonne continuation
Messages postés
32
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
26 octobre 2011

ouai en fait je me suis mal exprimé je comprend très bien le contenu a mettre dans connect
ce qui me gène en revanche c'est le

self::$ptr = ...
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012

C'est lui qui garde l'id de la connection :
self::$ptr = mysql_connect...

Et dans public static function query($sql)

return mysql_query($sql, self::$ptr)...



aKheNAtHoN