conditions IF et ELSEIF

Eléphanteau du PHP | 18 Messages

28 oct. 2009, 17:15

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

Mammouth du PHP | 985 Messages

28 oct. 2009, 17:34

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';
}
Modifié en dernier par Dr@ke le 28 oct. 2009, 17:44, modifié 2 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 18 Messages

28 oct. 2009, 17:41

le code ci-dessus ne marche pas non plus

est-ce normal les espaces entre ' . $titles . '?
/' . $title . '.mp3';
Modifié en dernier par Skippy le 28 oct. 2009, 17:45, modifié 1 fois.

Mammouth du PHP | 985 Messages

28 oct. 2009, 17:45

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é
Modifié en dernier par Dr@ke le 28 oct. 2009, 17:47, modifié 1 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 18 Messages

28 oct. 2009, 17:46

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

Mammouth du PHP | 985 Messages

28 oct. 2009, 17:48

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:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
fab
ViPHP | 2657 Messages

28 oct. 2009, 17:49

== 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
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 18 Messages

28 oct. 2009, 17:51

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 ^^

Mammouth du PHP | 985 Messages

28 oct. 2009, 17:55

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]
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 18 Messages

28 oct. 2009, 18:05

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

Eléphanteau du PHP | 18 Messages

28 oct. 2009, 23:27

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

Mammouth du PHP | 985 Messages

29 oct. 2009, 00:05

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
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 18 Messages

29 oct. 2009, 11:54

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 :

Mammouth du PHP | 985 Messages

29 oct. 2009, 13:38

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)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 18 Messages

29 oct. 2009, 16:36

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