Page 1 sur 2

conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:15
par Skippy
Tout d'abords bonjour à tous !

Voilà j'ai un petit soucis avec un script tout simple.

J'ai un lecteur MP3 en flash, qui m'affiche tout les titres contenus dans un dossier.
Voulant dupliquer ce lecteur, mais en faisant en sorte que dans le lecteur 1, il me lise le dossier 1, etc..

J'essaie avec les conditions if et elseif, mais cela marche seulement pour la condition if
Si je met 2 if, cela ne marche que pour la dernière condition.

Pourquoi ?
<?php echo("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");

if ($_GET['file_link'] = "music_skippy") {$file = "modules/music-playlist/music_skippy/".$_GET['title'].".mp3";} 
elseif ($_GET['file_link'] = "rep_tek_music") {$file = "modules/music-playlist/rep_tek_music/".$_GET['title'].".mp3";}

$file_index = "".$_GET['title']."";
?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<title><? print($file_index) ?></title>
<annotation></annotation>
<trackList>
<track>
<location><? print($file) ?></location>
<annotation><? print($file_index) ?></annotation>
</track>
</trackList>
</playlist>
D'avance, merci beaucoup pour votre aide

Salutations

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:34
par Dr@ke
Si tu remplaces ceci:
if ($_GET['file_link'] = "music_skippy") {$file = "modules/music-playlist/music_skippy/".$_GET['title'].".mp3";}
elseif ($_GET['file_link'] = "rep_tek_music") {$file = "modules/music-playlist/rep_tek_music/".$_GET['title'].".mp3";}
Par:
$link = (isset($_GET['file_link'])) ? $_GET['file_link']  : null;
$title = (isset($_GET['title'])) ? $_GET['title']  : null;

if ($link == 'music_skippy') {
$file = 'modules/music-playlist/music_skippy/' . $title . '.mp3';
}
elseif ($link == 'rep_tek_music') {
$file = 'modules/music-playlist/rep_tek_music/' . $title . '.mp3';
}

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:41
par Skippy
le code ci-dessus ne marche pas non plus

est-ce normal les espaces entre ' . $titles . '?
/' . $title . '.mp3';

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:45
par Dr@ke
Cela ne peut pas fonctionner avec un seul =.
C'est une incohérence de code.
Donc déjà laisse les deux ==

1 seul = -> permet de définir une variable.
2 == -> permet de faire de test d'égalité

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:46
par Skippy
Cela ne peut pas fonctionner avec un seul =.
C'est une incohérence de code.
Donc déjà laisse les deux ==
Ah ok, mais cela marchait au moins pour une condition

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:48
par Dr@ke
NOn cela fonctionnait pour une autre raison, il ne faisait aucune comparaison.
1 seul = n'est pas un signe de comparaison et donc PHP ne l'interprète pas comme cela :wink:

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:49
par fab
== ce n'est pas strictement égal mais égal tout simplement!
=== c'est strictement égal à comprendre valeur + type
= c'est l'assignation

Je suis pas certain de bien comprendre ton problème, mais si je crois savoir qu'il est possible que les deux conditions soient remplies dans ces cas là tu dois pas mettre un esleif mais simplement un autre if

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:51
par Skippy
Ok mais ton code ci-dessus ne fonctionne pas :(

en tout cas merci de te pencher (pas trop, au risque de tomber) sur mon problème ^^

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 17:55
par Dr@ke
D'après moi, $_GET['file_link'] est vide et donc en faisant la première fois:
$_GET['file_link'] = "music_skippy"
tu assignais une valeur à $_GET['file_link'].

Pour le confirmer : met le code que j'ai posté, et ensuite ajoute cette ligne:
echo 'contenu de la variable $_GET['file_link']:' . var_dump($_GET['file_link']);
[EDIT]
$_GET['file_link'] -> tu dois avoir dans l'url qui te permet d'accéder à la page:
http://www.ton-site.com/index.php[b]?fi ... sic_skippy[/b]
ou
http://www.ton-site.com/index.php[b]?fi ... _tek_music[/b]

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 18:05
par Skippy
Ok, bon la petite pleure, faut que je la sorte un moment.

je reprendrai tout cela plus tard...

pour voir ce que j'essaie de faire je remet mon 1ier code, comme ça au moins une partie fonctionne
http://www.simbios.ch/modules.php?ModPa ... c-playlist

En fait j'ai deux tableaux. le 1ier va chercher dans la db tout les fichiers ayant un champ link_file=music_skippy
le 2ieme dans la db tout les fichiers ayant un champ link_file=rep_tek_music

En cliquant sur un lien, cela ouvre le lecteur MP3 avec comme contenu les variables passées en $_GET

Je suppose que tout cela est bien crade, mais je n'y comprend malheureusement pas grand chose

Re: conditions IF et ELSEIF

Posté : 28 oct. 2009, 23:27
par Skippy
re.

Alors si j'ajoute ça, ça plante
echo 'contenu de la variable $_GET['file_link']:' . var_dump($_GET['file_link']);
si je reprend ce code (j'ai viré les espaces
$link = (isset($_GET['file_link'])) ? $_GET['file_link']  : null;
$title = (isset($_GET['title'])) ? $_GET['title']  : null;

if ($link == 'music_skippy') {
$file = 'modules/music-playlist/music_skippy/' . $title . '.mp3';
}
elseif ($link == 'rep_tek_music') {
$file = 'modules/music-playlist/rep_tek_music/' . $title . '.mp3';
}
Cela me change rien. la 1iere condition est trouvée, mais pas le elseif. Si je met 2 if, ça sera le dernier qui fonctionnera
D'après moi, $_GET['file_link'] est vide et donc en faisant la première fois:
Non elle n'est pas vide, car elle est envoyée par un lien la page d'avant (voir lien plus haut pour comprendre)

Bonne soirée

Re: conditions IF et ELSEIF

Posté : 29 oct. 2009, 00:05
par Dr@ke
Alors si j'ajoute ça, ça plante
echo 'contenu de la variable $_GET['file_link']:' . var_dump($_GET['file_link']);
Exact et normal donc ajoute ça:
echo 'Contenu de la variable $_GET["file_link"]: ' . var_dump($_GET['file_link']);
(j'ai viré les espaces
Inutile, cela fonctionne avec les espaces puis je trouve ça plus clair surtout quand on débug un script.
Cela me change rien. la 1iere condition est trouvée, mais pas le elseif. Si je met 2 if, ça sera le dernier qui fonctionnera
Normal pour les deux if, il faut 1 if et 1 elseif.
Et oui cela change quelque-chose car cette partie fonctionne maintenant correctement.
(Il est impératif de ne pas utiliser 1 seul signe = dans une condition)

Ajoute ceci au tout début du script (cela permettra d'afficher toutes les erreurs):
error_reporting(-1);
Bonne soirée

Re: conditions IF et ELSEIF

Posté : 29 oct. 2009, 11:54
par Skippy
Bonjour.

Alors...
Exact et normal donc ajoute ça:
echo 'Contenu de la variable $_GET["file_link"]: ' . var_dump($_GET['file_link']);
Ok alors du côté des variables envoyées avec $_GET, il n'y a pas de problèmes.

si je clique sur un lien de la rubrique rep_tek_music --> "rep_tek_music" Contenu de la variable $_GET["file_link"]:
si je clique sur un lien de la rubrique music_skippy ---> "music_skippy" Contenu de la variable $_GET["file_link"]:
Cela me change rien. la 1iere condition est trouvée, mais pas le elseif. Si je met 2 if, ça sera le dernier qui fonctionnera
Normal pour les deux if, il faut 1 if et 1 elseif.
Et oui cela change quelque-chose car cette partie fonctionne maintenant correctement.
(Il est impératif de ne pas utiliser 1 seul signe = dans une condition)
ok mais pourquoi lorsque j'écris le code ci-dessous, cela fonctionne. Du moins pour la seconde condition.
( seulement un =)
$link = (isset($_GET['file_link'])) ? $_GET['file_link']  : null;
$title = (isset($_GET['title'])) ? $_GET['title']  : null;

if ($link = 'music_skippy') {
$file = 'modules/music-playlist/music_skippy/'.$title.'.mp3';
}
elseif ($link = 'rep_tek_music') {
$file = 'modules/music-playlist/rep_tek_music/'.$title.'.mp3';
}
Et ce code ci-dessous, ne fonctionne pas ainsi (deux ==)
$link = (isset($_GET['file_link'])) ? $_GET['file_link']  : null;
$title = (isset($_GET['title'])) ? $_GET['title']  : null;

if ($link == 'music_skippy') {
$file = 'modules/music-playlist/music_skippy/'.$title.'.mp3';
}
elseif ($link == 'rep_tek_music') {
$file = 'modules/music-playlist/rep_tek_music/'.$title.'.mp3';
}
je comprend bien le fait qu'il faille mettre deux == mais ça veut pas le faire :cry:
Ajoute ceci au tout début du script (cela permettra d'afficher toutes les erreurs):
error_reporting(-1);
Ça ne me retourne rien

EDIT
si je met ca :
<?php echo 'contenu de la variable $link:' . var_dump($link); ?>
cela me retourne :
NULL contenu de la variable $link:

string(13) "rep_tek_music" contenu de la variable $_GET["file_link"]:
string(15) "Top Music Remix" contenu de la variable $_GET["title"]:
string(15) "Top Music Remix" contenu de la variable $title :

Re: conditions IF et ELSEIF

Posté : 29 oct. 2009, 13:38
par Dr@ke
Ok alors du côté des variables envoyées avec $_GET, il n'y a pas de problèmes.
si je clique sur un lien de la rubrique rep_tek_music --> "rep_tek_music" Contenu de la variable $_GET["file_link"]:
si je clique sur un lien de la rubrique music_skippy ---> "music_skippy" Contenu de la variable $_GET["file_link"]:

si je met ca :
<?php echo 'contenu de la variable $link:' . var_dump($link); ?>
cela me retourne : NULL contenu de la variable $link:
Euh ben c'est impossible lol
$link étant la valeur de $_GET["file_link"] -> il devrait retourner la même valeur que $_GET["file_link"].
Ou alors c'est que vérifie la valeur de $link avant l'assignation de sa valeur...

Donc: Test maintenant avec exactement le script écrit de cette manière:
<?php
error_reporting(-1);

echo '<?xml version="1.0" encoding="UTF-8" ?>';

$link = (isset($_GET['file_link'])) ? trim($_GET['file_link']) : null;
$title = (isset($_GET['title'])) ? trim($_GET['title']) : null;

echo 'contenu de la variable $link:' . var_dump($link);
echo 'contenu de la variable $title:' . var_dump($title);
echo 'Contenu de la variable $_GET["file_link"]: ' . var_dump($_GET['file_link']);

if ($link === 'music_skippy') {
$file = 'modules/music-playlist/music_skippy/' . $title . '.mp3';
}
elseif ($link === 'rep_tek_music') {
$file = 'modules/music-playlist/rep_tek_music/' . $title . '.mp3';
}
else {
$file = null;
}

if (isset($file) && !empty($title)) {
echo'
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<title>' . htmlspecialchars($title) . '</title>
<annotation></annotation>
<trackList>
<track>
<location>' . htmlspecialchars($file) . '</location>
<annotation>' . htmlspecialchars($title) . '</annotation>
</track>
</trackList>
</playlist>
';
}
else {
echo 'Erreur Critique';
}
?>
Test comme cela et donne moi le résultat.
(J'en ai profité pour l'améliorer un peu)

Re: conditions IF et ELSEIF

Posté : 29 oct. 2009, 16:36
par Skippy
Cela me renvoie :
NULL contenu de la variable $link:string(15) "Castagnet party"
contenu de la variable $title:string(12) "music_skippy"
Contenu de la variable $_GET["file_link"]:
avec ton code, là il ne trouve ni le titre ni le chemin d'accès