Vous n'êtes pas identifié(e).
coucou la communauté,
J'ai un gros problème avec la récupération de variables.
J'ai une table "vidéo" qui contient un champ "id_mot"où il peut y avoir plusieurs ids et une table motscle qui contient également "id_mot" mais unique.
Sur ma première page (plan-webtv.php) je fais une requête pour afficher les mots clé et je fais un lien vers la deuxième page (webtv-thematique.php) :
sur la page "webtv-thematique.php" ma requête porte sur les videos dont qui contiennent l'id_mot de la première page.
mais, il semblerai que cette variable ne soit pas récupérée. pourtant, je ne fais pas de uset sur la première page.
j'ai testé un echo pour voir
, mais ça me donne un
de plus, quand je met WHERE nom_mot='nom_mot'"; j'ai le message : Parse error: syntax error, unexpected T_VARIABLE in /homez.346 webtv-thematique.php on line 17 ( ligne du select).
$sql = "SELECT nom_mot FROM video WHERE nom_mot='nom_mot'";
//"SELECT * FROM video WHERE `id_mot` LIKE '%id_mot%'";
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
if($total) {
while($row = mysql_fetch_array($result)) {
/* indiquer $dest_file qui correspond au répertoire de destination */
$dest_file="/video/";
$dest_page="/video.php?";
$ext1="flv";
$ext2="jpg";
/* enlève un "\" */
$nom = "$row[nom]";
$source_file=("$nom");
$link = ("$URL_site$dest_page$nom");
$mediacontent = ("$URL_site$dest_file$source_file.$ext1");
$mediathumbnail = ("$URL_site$dest_file$source_file.$ext2");
?>
<table border="0" align="center" cellpadding="5" cellspacing="5">
<tr align="left">
<td rowspan="2" align="left" width="155px">
<a href="video.php?<?php echo $row[nom]; ?>">
<img src="<?php echo $mediathumbnail ?>" align="left" /></a></td>
<td align="left"><a href="video.php?<?php echo $nom; ?>"><font size="+1"><?php echo $row[title]; ?></font><br/> Mis en ligne le <?php echo $row[publication]; ?></a></td>
</tr>
<tr align="left">
<td align="left"><?php echo $row[description]; ?></td>
</tr>
</table>
<br/>
<?php }}?>
je pédale dans la choucroute et à force d'avoir le nez dessus, je ne vois plus rien et mes lunettes chauffent, lol.
J'ai besoin d'un regard expérimente s'il vous plait.
Hors ligne
coucou xTG,
merci de ta réponse, tu va passer sauveur officiel .
J'ai un peu modifié mon code pour faire une pagination.
J'ai un peu de mal à savoir quand mettre des doubles ou simples cotes.
$retour_messages=mysql_query('SELECT * FROM video WHERE nom_mot='nom_mot' LIMIT '.$premiereEntree.', '.$messagesParPage.'');
while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
qui me donne Parse error: syntax error, unexpected T_STRING
ou
qui me donne "Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /webtv-thematique.php on line 45"
la ligne 45 étant
je suis un peu larguée sur le coup
Hors ligne
Le mieux pour la syntaxe est d'utiliser la chose suivante :
Ainsi pas de soucis avec les quotes.
%d pour un entier, %s pour une chaîne de caractère et les autres sont dans la documentation php.
Si tu as toujours la même erreur affiches tes deux variables et testes la requête avec les deux valeurs dans phpmyadmin.
Ta requête ne renvoie peut être rien tout simplement.
Hors ligne
coucou,
maintenant j'ai
//$retour_messages=mysql_query('SELECT * FROM video LIMIT '.$premiereEntree.', '.$messagesParPage.'');
$query = sprintf("SELECT * FROM video WHERE id_mot='id_mot' LIMIT %d, %d",$premiereEntree,$messagesParPage);
$retour_messages = mysql_query($query);
49 while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
qui me donne
Hors ligne
Hors ligne
ben normalement si, j'ai vérifier dans ma BDD.
Il récupère bien l'id
mais je dois foirer ma requête.
C'est la clause WHERE qui le perturbe car quand je mets
while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
il fonctionne parfaitement.
Je ne m'y prends peut être pas bien : je souhaite voir apparaitre sur cette page toutes les vidéo de ma bdd qui contiennent l'id du mot selectionné dans le champ id mot de la table vidéo. Est ce que le fait qu'il y ait plusieurs id_mot dans ce champ peut géner la requete ??
parce que du coup, ce n'est pas vraiment WHERE id_mot[large]=[/large]'id_mot' mais plutôt [large]contient[/large] id_mot
Dernière modification par allhambra (28-07-2010 15:54:29)
Hors ligne
Et je me demandais aussisi la requete de pagination pouvais gêner ??
sinon c'est peut être mes tables ?
Champs de ma table vidéo (id (cle primaire et auto incrément) et id_mot sont en INT 11
id title nom contenu description publication fin etat id_mot id_organisateur lieux
Champs de la table motscle (id_mot est en INT 11 avec auto incrément et clef primaire)
id_mot nom_mot etat alias
serait il possible de faire un select sur les champs "id_mot" des deux tables WHERE id_mot = l'id récupéré ???
C'est l'avant dernière page du site et j'ai jusque demain soir pour tout boucler.
Peut être que demain à tête reposée j'y verrai plus clair
Hors ligne
Si ce n'est pas la valeur exacte il ne faut en effet pas utiliser une égalité.
Il te faut utiliser la syntaxe LIKE.
Tu trouveras ton bonheur là bas à travers quelques exemples : http://dev.mysql.com/doc/refman/5.0/fr/ … tions.html
Hors ligne
Bonjour,
oui, j'avais déjà testé, mais "LIKE'%$id_mot%' ne fait pas le tri et me renvoie tous les enregistrements
Juste comme ça pour info, prenons par exemple une table avec 10000 enregistrement et que sur TOUS les enregistrements la colonne col_x de type varchar le contenu commence par ART, et peu importe la suite du contenu de la colonne sur chaque enregistrement.
Si dans ta requete tu fait un WHERE col_x like '%ART*%' : Ta requete te renverras les 10000 enregistrements en résultat. Si tu fait par contre un WHERE col_x like '%Beaucoup*%' elle ne te renverra aucun enregistrement. Un where col_x like '%*Beaucoup*%' te retournera tous les enregistrements qui contiennent le mot beaucoup dans ta colonne col_x.
Moralité : A toi donc de mettre un critère de recherche PERTINENT dans ton Like sachant se que contient la colonne sur laquelle tu établis ton critère de recherche.
J'espère que cela t'a aidé.
++
Dernière modification par Jc (28-07-2010 21:16:21)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Coucou,
merci pour vos réponses, je me sens moins seule
je suis désespérée et j'ai cogité toute la nuit.
- Je me suis dit que comme il y à plusiers "id_mot dans le champs, il fallait que je trouve un truc pour les séparer.
dans ma bdd, le champ contient par exemple : 1,21, je fais donc appel à $id_mot = str_replace(",", " ", $id_mot); (est ce une bonne idée ??)
- j'ai affiché la requête pour voir ce qui ce passait il prend bien en compte l'id_mot et me retourne comme echo
//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM video'); //Nous récupérons le contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire WHERE nom_mot="nom_mot"
//$id_mot=$_GET['id_mot'];
$id_mot = str_replace(",", " ", $id_mot); // on remplace les , par des espaces
$tab=explode(" " , $id_mot); // on place les différents mots dans un tableau
$nb=count($tab); // on compte le nbr d'élément du tableau.
$sql="select * from video where id_mot like \"%$tab[0]%\" LIMIT $premiereEntree, $messagesParPage"; //on prépare la requête SQL.
for($i=1 ; $i<$nb; $i++)
{
$sql.="$operateur id_mot like \"%$tab[$i]%\" "; // on boucle pour integrer tous les mots dans la requête
}
//mysql_connect($host,$user, $passwd); // on se connecte au serveur
$result = mysql_db_query($db,$sql); // on execute la requête SQL.
if($result)
{
if(mysql_num_rows($result)==0) echo "<center><b>Pas de Résultat</b></center>
"; //si il n'y a pas de résultats
else
{
echo "<center><b>Résultat(s)</b></center><br>";
while($row = mysql_fetch_array($result))
{
$nom = $row["nom"];
echo " | < a href=\"video.php?$nom\">$nom</a> ";
echo $row["title"]; echo $row["publication"];
echo $row["description"];
}
mysql_free_result($result);
}
}
echo "La requete SQL execute est : $sql" ;
echo' <br />';
//J'ai rajouté des sauts à la ligne pour espacer les messages.
echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="webtv-thematique.php?page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';
?>
pour tester
première page
Pau doit renvoyer 18 resultat selon phpmyadmin
Commerce en renvoi 6
Hors ligne
rectificatif
première page
Hors ligne
Alléluia !!!
Ca fonctionne enfin à force de triturer le code
J'ai juste un dernier petit détail à régler concernant ma pagination car si je n'ai que 3 resultats (sport par exemple) ma pagination reste
puisque je ne fais pas le trie sur
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
mais si j'applique le tri sur la pagination et ma requete, il me retourne
Hors ligne
salut,
le message est généralemetn du au fait que la requete est foireuse, pour cela utilise le retour de la fonction mysql_query()
par exemple
Tu pourra ainsi voir le problème de la requete SQL.
ceci dit le count (*) c'est moyen, le mieux étant de compter quelque chose de précis (une clef prmiaire par exemple).
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
bon,
en modifiant le code comme indiqué
je n'ai effectivement plus de message d'erreur, mais je n'ai plus la numérotation non plus
j'avais oublié comme c'est fastidieux de coder, lol
Hors ligne
salut xTG,
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
boubou bou, toujours pas de numerotation
Hors ligne
l'echo des erreur me renvoie
et
il sort d'où ce #3 ???
Hors ligne
affiche la requête dans le message d'erreur, globalement ta requête est foireuse ^^
et si tu regarde bien ce que tu a mis (ou si tu fait un echo) tu verra que ce n'est pas le contenu tu tableau $tab index 0 qui est dans la chaine du like mais bien $tab[0] et comme mysql essai d'interpreter ce que tu lui demande il te dit que c'est pas bon d'ou l'erreur de ressource ..
Bref debuguer, debuguer et encore debuguer c'est le chemin de croix du codeur ^^
en gros
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
bonjour a tous, j'espère que vous avez passé un bon week end.
un grand merci a vous tous, ça fonctionne parfaitement.
Allez, plus qu'une page à coder et le site sera terminé ( je pourrais enfin profiter de mes vacances)
Dernière modification par allhambra (02-08-2010 14:46:15)
Hors ligne