IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

problème php, mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut problème php, mysql
    bonjour tout le monde

    j'ai un petit problème, je travail sur un site associatif de journalisme qui est gérer par une interface d'administration a cause du nombre important d'article.

    l'interface d'administration de mon site fonctione presque, il me manque la fonctionalité la plus importante, je m'explique :

    -le site est en 2 partie la partie administration et la partie vitrine

    -la partie vitrine:
    c'est là que les visiteurs vont aller pour voir le site, lire les articles, ...

    -la partie administration :
    c'est là que les redacteur ou administrateur posteront les articles (sauvegarder dans une base de données mysql), ils y sont corriger, (traduit), puis enfin, envoyée dans une page du site. et c'est la que sa se complique

    je vous ai mis cette image pour mieux comprendre, l'image c'est se que verront les visiteur du site quand ils iront sur une page news, article, ...



    se que je veut faire :

    -la fonction que je desire réaliser (sinon l'interface administrateur ne sert strictement à rien) c'est une sorte de menu qui m'affiche tous les articles d'une section sous forme de lien (sa c'est bon je sais faire), lorsque je clique sur un lien sa me met l'id de larticle dans l'url pour me faire une requete sql (select * from $table ...) (sa aussi c'est bon)

    le problème !!!

    une fois que j'ai le resultat de ma requete, COMMENT FAIRE pour le mettre dans le tout premier cadre de ma page (cadre = casse titre+image+texte de l'image ci-dessus)

    de plus, le champs texte n'est qu'un extrait en nombre de caractére defini et si le texte et plus long (il sera presque toujours plus long) sa met des ... + le lien "lire la suite" qui mène a une page où il 'y aura cette fois ci que l'article en question et le texte en entier.

    voila pour le lien j'avoue je n'ai pas encore refléchie, je m'en debrouillerai plus tard, mais en ce qui concerne la fonction qui permet d'inserer un article depuis la base de données jusqu'au site web, la je seche complet, s'il vous plait aidez moi !!
    Images attachées Images attachées  

  2. #2
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    Salut. Bon je te préviens je suis débutant alors les erreurs sont possible, et je n'ai pas tester le code. Mais bon ca te donne des pistes:

    - Une fois que tu as le résultat de ta requête, tu dois faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    echo '<table>';
     
    $sql = "SELECT titre, urlimage, texte FROM table WHERE ...";
    $temp = mysql_query($sql);
     
    while($result = mysql_fetch_assoc($temp)) //Une boucle pour traiter chaque ligne
    {  echo '<tr><td colspan="2">'.$result['titre'].'</td></tr>';
        echo '<tr>
                  <td><img src="'.$result['urlimage'].'"/></td>
                  <td>'.$result['texte'].'</td>
                </tr>';
    }
    echo '</table>';

    Ensuite, pour la taille de texte limitée moi je ferais comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(strlen($result['texte']>80)) //strlen donne le nbr de caractère d'une chaine
    {     echo substr($result['texte'], 0, 80).' ...(lire la suite)';}
    else
    {     echo $result['texte'];}
    Voila pour les liens je te laisse te débrouiller. Sinon si tu veux des details sur les fonctions utilisées, Manuel PHP

    En espérant t'avoir aidé ++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    j'avais pas pensé à utilisée substr et sublen pour la limitée la taille du texte, merci .

    pour l'affichage je veut pas faire un affichage direct, se qui me faut, c'est que lorsqu'un administrateur va cliquer sur un article qu'il veut mettre en ligne, l'article (ne s'affiche pas, mais) il est inscrit dans le premier cadre de la page adéquate (c'est vachement dur à expliquer), en gros se qu'il faudrait c'est qu'il y est dans la page qui rassemble les différents article, il faudrait une requete pour afficher l'article, mais comment faire pour savoir quelle article prendre puisque les article changent tous le temps, exemple :

    // le premier article est ercrit
    article 1 dans le premier cadre

    //le deuxième article est ecrit
    article 2 dans le premier cadre
    article 1 dans le deuxième cadre

    //...

    ne me dite pas qu'il faut a CHAQUE fois aller sur la page pour changer l'identifiant de l'article, les gens qui vont s'en servir ne connaissent rien en codage et moi je serait plus là pour les aider car je suis qu'en stage et je galère un MAX

  4. #4
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Bonjour
    Ne galérons pas

    Je crois que la solution PEUT etr simple, mais le probleme est pas bien expliqué a mon avis

    J'explique ce que j'en comprends

    Tes articles sont en ordre décroissant de parrution? car dans le post précédent tu écrivait s'il y a 1 article il est dans le cadre 1. Si le 2e article parrait il prends la place dans le cadre 1 et le premier dans le cadre 2.

    (petite parenthèse)
    tu en fait afficher comment d'articles dans ta page? car s'il y en a par exemple 10 ca va...50 ca devient chiant...un nombre indéterminé(100 par année pendant x années) devient lourd
    (fin de la parenthèse)

    Citation Envoyé par mémélia
    une fois que j'ai le resultat de ma requete, COMMENT FAIRE pour le mettre dans le tout premier cadre de ma page (cadre = casse titre+image+texte de l'image ci-dessus)
    donc tu veux que l'admin click un lien et que ce message devient le premier en haut de la liste(dans le premier cadre) afin que quoi? il puisse le modifier directement là? Aussi, est-ce que tu veux que les autre articles s'inscrive dans les autres cadres ex:
    il y a 5 articles
    Cadre1 -> article 5
    Cadre2 -> article 4
    Cadre3 -> article 3
    Cadre4 -> article 2
    Cadre5 -> article 1
    l'admin click sur le 3, tu veux qu'il apparaisse dans le premier cadre donc j'en déduit que tu veux comme suit
    Cadre1 -> article 3 ->En mode édit?
    Cadre2 -> article 5
    Cadre3 -> article 4
    Cadre4 -> article 3
    Cadre5 -> article 2
    Cadre6 -> article 1

    C'est ca??

    Moi je trouve que ca ferait beau en effet, mais des fois beau et facile a faire ne vont pas ensemble....
    pourquoi ne pas faire, quand il click sur l'article qu'il veut, tu l'envoie dans une page en "mode édition" tu enregistrer les changement et redirige vers ta page de cadres...
    Ta sorte de trie pourrrait etre par ordre de dernière modification comme ca, l'article ayant été le dernier a etre modifier parraitrait en haut de ta liste de cadre

    Remarque que je suis p-e carrément dans le champs avec ma compréhension de ton probleme et mes solution loufoque....

  5. #5
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    Salut !

    lorsqu'un administrateur va cliquer sur un article qu'il veut mettre en ligne, l'article (ne s'affiche pas, mais) il est inscrit dans le premier cadre de la page adéquate (c'est vachement dur à expliquer)
    Ouais c'est vachement dur a expliquer

    Bon en fait je comprend pas ce qu'il se passe quand l'admin clique sur un article. A paprement tu dis qu'il ne s'affiche pas directement, mais à quoi sert l'étape intérmediaire ?

    Sinon pour obtenir un affichage dans l'ordre, tu peux faire que lorsqu'une personne créé ou lorsqu'un admin valide, tu enregistres la date et l'heure de validation. Comme ca dans ta requete pour l'affichage, tu fais un tri (croissant ou décroissant) par ce champ date.

    Ensuite si tu veux faire la différence entre un article validé ou non, et bien tu peux soit controler qu'il y ai une date (dans le cas ou la date se place quand l'admin valide, et non pas la création), ou dans le cas ou la date se place pendant la création de l'article tu rajoutes un champ "statut" a ta table "articles" pour savoir par exemple si il est "A" = accepté, "R" = refusé.

    POur les dates c'est un champs "Datetime" qu'il te faut, et tu pourras faire un "SELECT * FROM articles ORDER BY datevalid" et tu les auras dans l'ordre.

    Logiquement tu ne dois JAMAIS toucher à l'identifiant d'un ensemble de données. Tu dois trouver une solution alternative. Sinon gare aux erreurs !


    Mais comme dit ozzmax, faudrais que tu nous corriges, car c'est pas super clair ce que tu veux faire !

    ++

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    je vais essayer d'être un peu plus clair, puisque les article son ecrit et modifier depuis l'interface administrateur, comment faire pour les mettre dans le site vitrine (celui qui est accessible à tous)

    bigltnt
    Logiquement tu ne dois JAMAIS toucher à l'identifiant d'un ensemble de données. Tu dois trouver une solution alternative. Sinon gare aux erreurs !
    je ne voulais pas modifier l'identifiant d'un article, mais changer l'identifiant dans la requete pour que sa aille chercher un autre article.


    ozzmax
    donc tu veux que l'admin click un lien et que ce message devient le premier en haut de la liste(dans le premier cadre) afin que quoi? il puisse le modifier directement là? Aussi, est-ce que tu veux que les autre articles s'inscrive dans les autres cadres ex:
    il y a 5 articles
    Cadre1 -> article 5
    Cadre2 -> article 4
    Cadre3 -> article 3
    Cadre4 -> article 2
    Cadre5 -> article 1
    l'admin click sur le 3, tu veux qu'il apparaisse dans le premier cadre donc j'en déduit que tu veux comme suit
    Cadre1 -> article 3 ->En mode édit?
    Cadre2 -> article 5
    Cadre3 -> article 4
    Cadre4 -> article 3
    Cadre5 -> article 2
    Cadre6 -> article 1

    C'est ca??
    oui c'est sa, mais qu'est-ce que tu appel mode edit? car la modification d'un article se déroule de la page modification de l'interface administrateur, et la on est sur une des pages du site vitrine. de plus les modification devront (de préférence) être réalisée avant la publication d'un article.


    bigltnt
    Ensuite si tu veux faire la différence entre un article validé ou non, et bien tu peux soit controler qu'il y ai une date (dans le cas ou la date se place quand l'admin valide, et non pas la création), ou dans le cas ou la date se place pendant la création de l'article tu rajoutes un champ "statut" a ta table "articles" pour savoir par exemple si il est "A" = accepté, "R" = refusé.
    sa c'est peut être une bonne idée, je m'explique, le fait de cliquer sur un article sur la partie admin du site met un "A" (pour acceptée) dans le champs d'un article.
    dans la partie vitrine, on a une requete qui affiche tout les article (a condition qu'il rentre dans la page, sinon une deuxième page est créer) qui ont le "A", dans l'odre du plus récent au plus ancien.

    je vais essayer sa et je revien vous dire si sa marche, merci de votre aide



    désolé, je suis pas douée pour expliquer, et c'est pas un sujet facile a expliquer.

  7. #7
    Membre actif Avatar de bigltnt
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 227
    Points : 205
    Points
    205
    Par défaut
    OK je vois déjà un peu mieux ^^

    sa c'est peut être une bonne idée, je m'explique, le fait de cliquer sur un article sur la partie admin du site met un "A" (pour acceptée) dans le champs d'un article.
    dans la partie vitrine, on a une requete qui affiche tout les article (a condition qu'il rentre dans la page, sinon une deuxième page est créer) qui ont le "A", dans l'odre du plus récent au plus ancien.
    Oui, c'est une solution qui marche. Mais dans ce cas là, tu ne peux pas avoir un affichage ordonné, j'entend par là le dernier article validé se trouve en haut (par exemple).

    Le mieux serait donc de faire un champ "dateValid", de type "Datetime". Lorsque l'administrateur valide l'article, tu fais une requete SQL du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="UPDATE articles SET ...., dateValid=NOW() WHERE idArticle='$_POST['idArticle']'";
    La fonction NOW() va rentrer la date et l'heure actuelle (celle du serveur). Donc pour la vitrine, tu dois afficher que les articles ayant une date différente de "0000-00-00 00:00:00" ou NULL (je sais plus si NULL marche), car si la dateValid est remplie, et bien il faut l'afficher !

    Donc au final, ta requete ressemblera à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql="SELECT * FROM articles WHERE dateValid!='0000-00-00 00:00:00' ORDER BY dateValid";
    //Ou dateValid NOT NULL, mais je sais pas si ca marche, ca dépend de la valeur par défaut je crois, mais la première solution doit marcher
    Voila bon courage tiens nous au courant ^^

  8. #8
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Citation Envoyé par mémélia
    oui c'est sa, mais qu'est-ce que tu appel mode edit? car la modification d'un article se déroule de la page modification de l'interface administrateur, et la on est sur une des pages du site vitrine. de plus les modification devront (de préférence) être réalisée avant la publication d'un article.
    Ben en vrai c'est ce que j'avais interprété du premier message que t'avais inscrit

    Citation Envoyé par mémélia
    lorsque je clique sur un lien sa me met l'id de larticle dans l'url pour me faire une requete sql (select * from $table ...) (sa aussi c'est bon)

    le problème !!!

    une fois que j'ai le resultat de ma requete, COMMENT FAIRE pour le mettre dans le tout premier cadre de ma page (cadre = casse titre+image+texte de l'image ci-dessus)
    à la force de relecture
    je crois que c'est une date de modification qu'il te faut et un état comme l'a proposé bigltnt
    ainsi tu fais afficher dans tes cadres seulement les articles acceptés(dans la clause where de ton select) et tu tri sur les dates
    à chaque fois qu'il y a modification de l'article du modifie la date de dernière modification
    ce que je te suggère par contre c'est d'avoir une date de soumission d'article que tu ne changera jamais, tu modifies seulement un champs date de modif
    comme ca tu peux toujours s'avoir l'article original date de quand

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    désolé, jai été absent pendant un moment alor jai pa pu écrire

    bon alor, j'ai rajouter un champs status dans ma base de donnée, qui est, par défault à 0, et il passe à 1 lorsqu'un administrateur le met en ligne.

    Dans la partie vitrine du site, pour que le nombre d'article ne soit pas limiter, j'ai fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0;$i<$nbart;$i++)
    ($nbart me di le nombre d'article a afficher)

    dans le for j'ai mes calques (titre, image, date ,texte) et dans chaqu'un d'eux j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	//on cree la requete
    	$sql="SELECT titre
    	FROM `news`
    	WHERE status = 1";
    	$result=mysql_query($sql)or die("Erreur SQL !<br>".$sql."<br>".mysql_error());
     
    	//on affiche le résultat
    	$row=mysql_fetch_row($result);
    	$image=$row[$cpt];
    et ensuite un code html pour afficher
    sa marche pour un article, le deuxième plante parske "mysql_fetch_row" ou "mysql_fetch_array" creer un tableau sous cette forme :
    Array ( [0] => titre_article_1)
    Array ( [0] => titre_article_2)
    et pour que se ke j'ai fais marche, il faudrai :
    Array ( [0] => titre_article_1 [1] => titre_article_2)

    voila voila si quelqu'un a une solution se serait bien

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    c bon c résolu, voila se que j'ai fait et sa marche trés bien pour moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <?php
    //on se connect a la BdD
    $base = mysql_connect ('localhost', 'root', '');
    mysql_select_db ('site');
     
    //requete
    $sql="SELECT *
    FROM `news`
    WHERE status=1";
    $result=mysql_query($sql)or die("Erreur SQL !<br>".$sql."<br>".mysql_error());
     
    //variable qui me permet de faire decendre les article
    $sep=-150;
    while ($row=mysql_fetch_row($result))
    {
    	//je recupère les données depui ma base
    	$num=$row[0];
    	$titre=$row[1];
    	$date=$row[2];
    	$image=$row[3];
    	$texte=$row[4];
     
    	//j'incrémente le compteur
    	$sep=$sep+150;
     
    	//calque du titre
    	$toptitre=$sep+271;
    echo "<div id='titre' style='position:absolute; left:258px; top:".$toptitre."px; width:427px; height:24px; z-index:10' align='left'>";
     
    	//j'affiche le titre dans son calque
    	echo "<font color='#FF9933' face='Verdana, Arial, Helvetica, sans-serif' size='+2'>";
    	echo $titre;
    	echo "</font>";
     
    	//calque de l'image
    	$topimage=$sep+297;
    echo "</div>";
    echo "<div id='image' style='position:absolute; left:258px; top:".$topimage."px; width:85px; height:85px; z-index:11'>";
     
    	//j'affiche l'image dans son calque
    	echo "<img src='../site/".$image."' border=0 width=85 height=85>";
     
    	//calque du texte
    	$toptexte=$sep+297;
    echo "</div>";
    echo "<div id='texte' style='position:absolute; left:345px; top:".$toptexte."px; width:431px; height:104px; z-index:12' align='justify'>";
     
    	//j'affiche le texte dans son calque
    	$taille=strlen($texte);
    	$table="news";
    	//strlen donne le nbr de caractère d'une chaine
    	if($taille >= 260) 
    	{
    	     echo "<font color='#FF9933' face='Verdana, Arial, Helvetica, sans-serif' size='-1'>";
    	     echo (substr($texte, 0, 260));
    	     echo " ... ";
    	     echo "<form method='GET'>";
    	     echo "<a href='art.php?id=$num&tab=$table'>lire la suite</a>";
    	     echo "</form>";
    	     echo "</font>";
    	}
    	else
    	{
    	    echo $texte;
    	}
     
    	//calque de la date
    	$topdate=$sep+270;
    echo "</div>";
    echo "<div id='date' style='position:absolute; left:685px; top:".$topdate."px; width:91px; height:25px; z-index:13'>";
     
     
     
     
    	//j'affiche la date dans son calque
    	echo "<font color='#FF9933' face='Verdana, Arial, Helvetica, sans-serif' size='-1'>";
    	echo $date;
    	echo"</font>";
     
    echo "</div>";
    }
    ?>
    c'est un peu long mais sa marche bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème PHP / MySQL
    Par GTAddict dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/04/2010, 13h59
  2. Problème PHP/Mysql script horaire d'un planning
    Par jessica76 dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2010, 19h30
  3. [MySQL] problème php mysql
    Par thiba dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/12/2009, 11h09
  4. [MySQL] Problème PHP/Mysql mon php n'exécute pas la requête
    Par matew dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/04/2007, 13h01
  5. problème php mysql
    Par ph_anrys dans le forum Requêtes
    Réponses: 15
    Dernier message: 02/03/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo