Popup avec variable php

Résolu/Fermé
agui - 12 nov. 2009 à 11:34
 agui - 17 nov. 2009 à 11:55
Bonjour à tous !

Voilà, j'ai créé un système de news sur mon site. J'ai deux pages admin qui fonctionnent correctement et deux pages accessibles aux visiteurs qui posent problème...

La première page (index.php) affiche les titres des 5 dernières news publiées. J'aimerais que ces titres soient cliquables, si ils contiennent un contenu (descriptif) ou un lien (vers un autre site), et que cela ouvre une popup (news.php) qui affiche uniquement le titre + le contenu et/ou le lien de la news sur laquelle le visiteur a cliqué.

Je pense savoir d'où viennent les erreurs mais j'ai essayé pas mal de choses et là je ne sais plus quoi faire...
Voici les problèmes rencontrés sur ma page index.php. Je devrais avoir un lien sur mes titres uniquement si la news concernée possède un contenu et/ou un lien mais j'ai des liens sur chaque titre... Autre chose, depuis que j'ai modifié le lien vers une page classique du site en un lien vers un popup, ma page index.php ne s'affiche plus et m'indique une erreur de syntaxe (unexpected T_STRING, expecting ',' or ';' ligne echo '<a target=... de mon script ci-dessous). Voici ma condition et ma popup :

 
if (isset($contenu) OR isset($lien)) // Si les variables contenu ou lien existent
     {
     // On crée les entrées en HTML avec les liens
     echo '<a target="_blank" HREF="#" onClick="window.open('news.php?id=$id&amp;titre=$titre&amp;contenu=$contenu&amp;lien=$lien
','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=524, height=500');return(false)">' . $titre . '</a>';
      }
     else
     {
     // On crée les entrées en HTML sans lien
     echo $titre;
      }


Un grand merci d'avance pour votre aide !!!
A voir également:

29 réponses

Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
12 nov. 2009 à 12:03
ton target ne te sert a rien je pense tu peu l'enlever et tester voir si ca vien de la
0
Salut !
J'ai enlevé le target, c'est vrai que ça ne sert à rien mais par contre, toujours la même erreur, il manquerait un "," ou ";" et il y aurait un "T-string" (c'est quoi ça?) en trop...
Je pense que c'est une erreur de syntaxe mais je n'arrive pas à trouver cette erreur !
Merci d'avance pour votre aide...
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
12 nov. 2009 à 12:22
essay ca

if (isset($contenu) OR isset($lien)) // Si les variables contenu ou lien existent
     {
     // On crée les entrées en HTML avec les liens
    ?>
    <a  href="#" onClick="window.open('news.php?id=$id & titre=$titre & contenu=$contenu & lien=$lien','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=524, height=500');"><?php echo $titre; ?> </a>
      <?php 
      }
     else
     {
     // On crée les entrées en HTML sans lien
     echo $titre;
      }
0
Merci Tsunami...
Grâce à toi ça avance. J'ai un peu modifié le code que tu m'as donné car, une fois la page en ligne, cela m'affichait la même erreur... Voici donc ce que j'ai mis :

<a  href="#" onClick="window.open('news.php?id=<?php $id; ?> & titre=<?php $titre; ?> & contenu=<?php $contenu; ?> & lien=<?php $lien; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=524, height=500');"><?php echo $titre; ?></a>


Par contre, j'ai un lien sur chaque titre et ça c'est un problème car je ne veux pas qu'un titre soit cliquable et ouvre une popup si la news correspondante ne comporte ni contenu ni lien vers un autre site.

Deuxième problème, le popup est vide même si la news a un titre (elle en a chaque fois un) + un contenu (descriptif) et/ou un lien. Là, ça doit être un problème d'affichage des variables récupérées...

Voilà, du coup, je mets tout mon code pour les deux pages.

index.php :

<?php
mysql_connect("XXX", "YYY", "ZZZ");
mysql_select_db("madb");
// On récupère les 5 dernières news publiées
$retour = mysql_query('SELECT * FROM news WHERE publier=1 ORDER BY id DESC LIMIT 0, 5');
// On se déconnecte de MySQL
mysql_close();
// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($retour))
{
?>
    			<div class="news">
    <h3><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    $titre = nl2br(stripslashes($donnees['titre']));
    $contenu = nl2br(stripslashes($donnees['contenu']));
    $lien = $donnees['lien'];
    
    
    if (isset($contenu) OR isset($lien)) // Si les variables contenu ou lien existent
     {
     // On crée les entrées en HTML avec les liens
    ?>
    <a  href="#" onClick="window.open('news.php?id=<?php $id; ?> & titre=<?php $titre; ?> & contenu=<?php $contenu; ?> & lien=<?php $lien; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=524, height=500');"><?php echo $titre; ?></a>
      <?php 
      }
     else
     {
     // On crée les entrées en HTML sans lien
     echo $titre;
      }
    ?>
    </font></h3>
    <br>
    			</div>
<?php
} // Fin de la boucle des news
?>


news.php

<?php
mysql_connect("XXX", "YYY", "ZZZ");
mysql_select_db("madb");
// On récupère la news correspondante
$retour = mysql_query('SELECT * FROM news WHERE id=' . $_GET['id']);
// On se déconnecte de MySQL
mysql_close();
// Puis on fait une boucle pour afficher le résultat :
while ($donnees = $retour)
{
?>
    			<div class="news">
    <h3><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    // On enlève les éventuels antislash
    $titre = stripslashes($donnees['titre']);
    echo $titre;
    ?>
    </font></h3><br>
    <p><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    // On enlève les éventuels antislash
    $contenu = stripslashes($donnees['contenu']);
    echo $contenu;
    ?></font></p>
    <p><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    $lien = $donnees['lien'];
    echo '<a href="' . $donnees['lien'] . '">' . $lien . '</a>';
    ?></font></p>
        			</div>
<?php
} // Fin de la boucle des news
?>


Voilà, j'espère que c'est un peu plus clair avec le code entier !
Merci d'avance pour votre aide !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
12 nov. 2009 à 13:12
A merde quel con j'ai oublier de reafficher dans le window.open ^^'

pour ton premier probleme remplace OR par ||

prefere ca, ca evite les erreurs

$id = $_GET['id'];

$retour = mysql_query('SELECT * FROM news WHERE id=$id);


mais surtout la grosse betise de la page place ton mysql_close() en bas de ta page si tu le laisse la il coupe les patte au while et du coups ba le while ce dit y a personne puisque s'est ferme je peu dormire

place ton mysql_close() la

<?php
} // Fin de la boucle des news
?>
0
OK j'ai changé tout ça mais toujours les mêmes problèmes...
1) tous les titres sont cliquables sur index.php
2) le popup (news.php) est vide, cette fois complètement, il n'affiche même plus le background color !!! mais il affiche une erreur (syntax erro : unexpected T-STRING) à la ligne $titre = ... suivante :

<?php
    // On enlève les éventuels antislash
    $titre = stripslashes($donnees['titre']);
    echo $titre;
    ?>


J'ai essayé ceci ci-dessous aussi :

$titre = stripslashes($titre);


mais ça ne fonctionne pas non plus...

Merci !
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
12 nov. 2009 à 21:34
pourquoi tu n'esserais pas echo stripslashes($titre); ?? ou echo stripslashes($donnees['titre']);

mais pour lister tes varriable de cette maniere tu doit dire dans ton while que tu va deffinir les valeur de ta bdd dans un tableau donc remplace dans ton while(...) par ca

while($donnees = mysql_fetch_array($retour))
0
J'ai essayé tout ça mais tjs les mêmes problèmes (liens sur tous les titres et popup vide) !!!

Voilà la partie modifiée de news.php :

while($donnees = mysql_fetch_array($retour))
{
?>
    			<div class="news">
    <h3><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    // On enlève les éventuels antislash et on affiche le titre correspondant à la news
    echo stripslashes($titre);
    ?>
    </font></h3><br>
    <p><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    // On enlève les éventuels antislash et on affiche le contenu correspondant à la news
    echo stripslashes($contenu);
    ?></font></p>
    <p><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    echo '<a href="' . $lien . '">' . $lien . '</a>';
    ?></font></p>
        			</div>


Cette fois, mon popup vide m'indique tjs la même erreur unexpected T_STRING mais cette fois au niveau de cette ligne : echo '<a href="' . $lien . '">' . $lien . '</a>';
J'ai aussi essayé pas mal d'autres possibilités mais tjs pas la bonne.

Je ne désespère pas mais je pense que la nuit sera longue !!! HELP - THX
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
12 nov. 2009 à 22:18
$donnees['titre']

s'est un tableau fau que le nom de tes champs figuer dans le tableu donner

d'ou mysql_fetch_array()

s'est de la logique
0
Salut Tsunami,
Contente que tu sois de retour...
Je ne comprends pas bien ce que tu essaies de me dire... Tu parles de ma bdd ?
Peux-tu me donner + de précisions stp ?
Merci d'avance !
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
13 nov. 2009 à 09:15
En fait quand tu veu afficher les donner de ta base de donner apres avoir fait un select le mieu et le plus pratique s'est dutiliser la fonction mysql_fetch_array() qui grosso modo met les valeur retourner par la requête dans un tableau.

$donnee = mysql_fetch_array($requete)


cette ligne signifie : je place dans le tableau $donnee les valeur retourner par ma requette

si tu as un champs bla dans ta base de donner pour afficher toute les valeur de blas dans un whille(), il faudra que tu place echo $donnee['bla'];
cela affichera toute les valeur de bla

Et de même pour le reste de tes champs


while($donnees = mysql_fetch_array($retour))
{
     echo $donnee['titre'];
}



0
Salut Tsunami...
Contente de voir que tu es encore là...
Je comprends bien ce que tu veux me dire mais j'ai essayé tout ça et ça ne marche toujours pas !
Voici à nouveau le code de ma deuxième page (news.php) :

<?php
mysql_connect("XXX", "YYY", "ZZZ");
mysql_select_db("madb");
// On récupère la news correspondante
$id = $_GET['id'];
$retour = mysql_query('SELECT * FROM news WHERE id=$id);
// Puis on fait une boucle pour afficher le résultat :
while($donnees = mysql_fetch_array($retour))
{
?>
    			<div class="news">
    <h3><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    // On enlève les éventuels antislash et on affiche le titre correspondant à la news
    $titre = stripslashes($donnees['titre']);
    echo $titre;
    ?>
    </font></h3><br>
    <p><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    // On enlève les éventuels antislash et on affiche le contenu correspondant à la news
    echo stripslashes($contenu);
    ?></font></p>
    <p><font face="Arial,Helvetica,Geneva,Swiss,SunSans-Regular">
    <?php
    echo '<a href="' . $lien . '">' . $lien . '</a>';
    ?></font></p>
        			</div>
<?php
} // Fin de la boucle des news
// On se déconnecte de MySQL
mysql_close();
?>


J'ai essayé plusieurs trucs, voir dans le code ci-dessus, pour afficher titre, contenu et lien mais news.php est tjs vide !!!
J'ai lu et relu mon code, chose pas facile car je n'ai cessé de le modifier depuis une semaine pour tenter de trouver LA solution.

J'ai remarqué cela :

$retour = mysql_query('SELECT * FROM news WHERE id=$id);


Il y a un seul apostrophe dans la paranthèse du select. J'en ai donc rajouté un avant de refermer la paranthèse et là surprise quand je mets la page en ligne, ma page news.php actualisée m'indique maintenant une erreur venant de cette ligne (not a valid MySQL result resource) :

while($donnees = mysql_fetch_array($retour))


Là je n'y comprends plus rien !!! Mais je ne laisserai pas tomber tant que je n'aurai pas trouver la solution !!!
Merci d'avance !
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
13 nov. 2009 à 11:48
mysql_query("SELECT * FROM news WHERE id = '".$id."') or die(mysql_error());

remplace ta syntaxe par ca
0
Etrange... J'ai maintenant une erreur (unexpected T_STRING) à la ligne <div class="news">

En réfléchissant un peu, je me dis que ça pourrait provenir du " car il n'est pas fermé ici : mysql_query("SELECT * FROM news WHERE id = '".$id."') or die(mysql_error());
Mais quand j'ajoute un " avant la dernière paranthèse, j'ai l'erreur suivante : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource ... ligne 46. Et la ligne 46, c'est celle-ci : while($donnees = mysql_fetch_array($retour))

Oh la la ! C'est compliqué la logique !!!
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
13 nov. 2009 à 12:22
Oui effectivement j'ai oublier le " tu en a besoin met le
$retour = mysql_query("SELECT * FROM news WHERE id = '".$id."'") or die(mysql_error()) ;


fait un echo mysql_num_rows($retour);
et on verra ce que ca te retourne
0
Non, tjs vide...
Quand je place correctement le " qu'on avait oublié, news.php s'ouvre correctement, bonne dimension, couleur de fond mais il n'y a rien dedans !!! Voici l'url affichée en haut : https://www.pagesjaunes.fr/?id= & titre= & contenu= & lien=

echo mysql_num_rows($retour);
ne me retourne rien de plus !

Mes variables sont-elles bien transmises ? Je n'y comprends plus rien, ma db fonctionne et les champs sont bien créés et nommés...

THX !
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
13 nov. 2009 à 13:12
Euh il manque un truk dans tes lien ...
tu envois des varriable en GET qui son vide si tu recuperer ton id mais qui ne correspond a rien normal que ca ne t'affiche rien

peu tu me donner le code de tes liens s'il te plais ?
0
No problem ! Le voilà :

<?php
    $titre = nl2br(stripslashes($donnees['titre']));
    $contenu = nl2br(stripslashes($donnees['contenu']));
    $lien = $donnees['lien'];
    
    
    if (isset($contenu) || isset($lien)) // Si les variables contenu ou lien existent
     {
     // On crée les entrées en HTML avec les liens
    ?>
    <a  href="#" onClick="window.open('news.php?id=<?php $id; ?> & titre=<?php $titre; ?> & contenu=<?php $contenu; ?> & lien=<?php $lien; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=524, height=500');"><?php echo $titre; ?></a>
      <?php 
      }
     else
     {
     // On crée les entrées en HTML sans lien
     echo $titre;
      }
    ?>


Ici aussi j'ai essayé pas mal de trucs mais sans résultat !!! Pourtant, je pense que mon lien est bon, non ?
Merci encore !
0
Tsunami Chups Messages postés 224 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 21 juillet 2010 12
13 nov. 2009 à 16:24
ok s'est bon s'est tout vu

quand tu fait onClick="window.open('news.php?id=<?php $id; ?> &

met un echo entre les deux par exemple pour l'id

onClick="window.open('news.php?id=<?php echo $id; ?> &
0
C'est cool, je commence à avoir de bonnes idées donc !!! En voyant que mes $ id, titre, contenu et lien n'apparaissaient pas dans l'URL, je venais justement d'ajouter les echo avant de revenir vers toi...
J'ai également ajouter $id = $donnees['id']; car sans ça la valeur de l'id n'était pas reprise dans l'url de news.php.

<?php
    $id = $donnees['id'];
    $titre = nl2br(stripslashes($donnees['titre']));
    $contenu = nl2br(stripslashes($donnees['contenu']));
    $lien = $donnees['lien'];
    
    
    if (isset($contenu) || isset($lien)) // Si les variables contenu ou lien existent
     {
     // On crée les entrées en HTML avec les liens
    ?>
    <a  href="#" onClick="window.open('news.php?id=<?php echo $id; ?> & titre=<?php echo $titre; ?> & contenu=<?php echo $contenu; ?> & lien=<?php echo $lien; ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=524, height=500');"><?php echo $titre; ?></a>


Malgré quelques petits soucis, un petit miracle s'est produit... En effet, sur mes 5 titres de news cliquables depuis index.php, trois ouvrent le popup news.php et affiche le titre + le contenu (si il y en a un) + le lien (si il y en a un). Par contre, je ne comprends pas pourquoi les autres liens ne fonctionnent pas... D'ailleurs un des titres cliquables ne devrait pas l'être car il ne contient ni contenu, ni lien (voir condition isset). D'autre titres devraient par contre l'être et ne le sont pas.

De plus, j'ai un message d'erreur sur ma page index.php "terminé, mais il existe des erreurs sur la page". Elles doivent en partie provenir de ma condition isset vu que les titres que je voudrais cliquables ne le sont pas spécialement et vis versa !

Ca progresse mais le casse-tête continue. Enfin, déjà super contente d'avoir 3 liens sur 5 qui fonctionnent. Ca par contre, je n'y comprends rien, c'est vraiment bizarre...
0