[RESOLU] un switch qui n'a pas l'air de vouloir fonctionner

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] un switch qui n'a pas l'air de vouloir fonctionner

Re: un switch qui n'a pas l'air de vouloir fonctionner

par don_roger » 01 déc. 2015, 10:54

Exactement, je ne l'avais pas vu dans le lot des 3554 résultats. Mea maxima culpa !

Merci encore !

Re: un switch qui n'a pas l'air de vouloir fonctionner

par or 1 » 01 déc. 2015, 10:48

Le echo "|$livre|"; me renvoie bien les bonnes valeurs
donc non, le | servait à vérifier ce point.

Re: un switch qui n'a pas l'air de vouloir fonctionner

par don_roger » 01 déc. 2015, 10:43

Youhou !! Bien joué ! Superbe erreur de débutant, c'est la faute à l'import csv dans ma base... et surement un peu la mienne... arf..

Merci tout plein !!

Il vaut mieux que je corrige dans ma base non ? il y a 3554 lignes, un petit update serait le bienvenu, qu'en penses-tu ?

Re: un switch qui n'a pas l'air de vouloir fonctionner

par Mazarini » 01 déc. 2015, 10:05

Code : Tout sélectionner

["livre"]=> string(8) "Rea1Bk2 "
A noter le blanc en fin de la variable, "Rea1Bk2 " différent de "Rea1Bk2".

Code : Tout sélectionner

switch (trim($rs_ligne["livre"])) {

Re: un switch qui n'a pas l'air de vouloir fonctionner

par don_roger » 30 nov. 2015, 22:07

Arf,

Mais je fais quoi alors moi, une petite prière :priere: ?!

Je me demande si le format de données de la colonne importe ? En l'occurrence il s'agit de texte, et je n'ai jamais auparavant rencontré ce type de problème. J'ai essayé les ' ', et les " ", et les ===, mais rien ne fonctionne, c'est bizarre...

Au passage, j'ai testé un :

Code : Tout sélectionner

if ($livre === "Rea1Bk2") { $songbook = "Real_Book_2.pdf"; $delta_book = 1; }
Juste après le switch pour voir, et ça aussi ne fonctionne pas...

Re: un switch qui n'a pas l'air de vouloir fonctionner

par or 1 » 30 nov. 2015, 19:02

j'ai testé et ce que j'ai dit est faux, un variable déclarée dans un case, existe bien après le switch.

Re: un switch qui n'a pas l'air de vouloir fonctionner

par or 1 » 30 nov. 2015, 18:18

$songbook = "";
$delta_book= 0;
avant le switch, pour que ces 2 variables existent toujours après sa fermeture.

Re: un switch qui n'a pas l'air de vouloir fonctionner

par don_roger » 30 nov. 2015, 18:03

Hello or 1,

merci de t'être intéressé à mon problème. J'avais pensé à changer la variable dans le switch.

Le echo "|$livre|"; me renvoie bien les bonnes valeurs, en revanche, la variable $songbook prend toujours la valeur définie dans la partie default... snif...

Re: un switch qui n'a pas l'air de vouloir fonctionner

par or 1 » 30 nov. 2015, 17:57

j'essaierais :
$livre = $rs_ligne["livre"];
echo "|$livre|";
switch ($livre) {

Re: un switch qui n'a pas l'air de vouloir fonctionner

par don_roger » 30 nov. 2015, 17:45

Hello, merci pour ta réponse.

Ce qui est curieux c'est que je me sers du même $rs_ligne['livre'] dans la construction de mon tableau, et cela s'affiche sans problème. C'est dans la même boucle, tout à la fin.

J'ai pensé à la casse et ma colonne s'appelle bien livre.

Le var_dump me donne les bonnes valeurs de champs.
Ex pour le 1er enregistrement :

{["id"]=> string(1) "1" ["titre"]=> string(9) "Ablution " ["auteur"]=> NULL ["livre"]=> string(8) "Rea1Bk2 " ["page"]=> string(1) "1" }

Je crois que c'est le switch qui ne fonctionne pas, et je ne sais pas pourquoi...

Si je ne mets pas de comportement par défaut, j'ai un message d'erreur m'indiquant que les variables $songbook et $delta_book sont inconnues.
Dans le cas contraire, seule l'action par défaut est exécutée...

Interloqué je suis...

Re: un switch qui n'a pas l'air de vouloir fonctionner

par ynx » 30 nov. 2015, 17:36

Salut,

Ta méthode et ton code semble corrects.

Je suppose que la requête sql s’exécute sans erreur ? Dans le doute tu peux vérifier les messages d'erreurs via mysqli_error (exemple ici : http://php.net/manual/fr/mysqli.error.php#example-1878)

Que donne un var_dump($rs_ligne); dans la boucle while ? Les données correspondent t-elles bien à ce qui est attendu ?
Attention à la casse, la colonne "livre" ne serait pas "Livre" ?

Bonne journée

un switch qui n'a pas l'air de vouloir fonctionner

par don_roger » 30 nov. 2015, 17:13

Bonjour à tous,

Je sollicite vos yeux perspicaces de lynx... je n'y comprends goutte...

Le principe de mon script est de générer une liste issue d'une table dans une base mysql dans un bête tableau html et de créer des liens dynamiquement, en fonction de la valeur d'un champ.

Je me sers d'un switch pour changer la valeur de ma variable , et j'ai besoin de comparer la valeur dudit champ avec les différents cas possibles de mon switch. J'espère que je suis clair...

Mais le problème est que quelle que soit la valeur du champ, c'est toujours l'action par défaut qui est exécutée. Comme si la comparaison entre les 2 chaînes de caractère ne fonctionnait pas.

Voici mes 2 questions :

- ma méthode est-elle la bonne ?
- pourquoi que ça marche t-y donc pas ?

Voici mon code (oui, c'est un truc pour gérer mes partitions) :

Code : Tout sélectionner

<?php require_once("cnn.php"); $req=("Select * FROM partoches"); $rs = mysqli_query($cnn,$req); $nb_lignes = mysqli_num_rows($rs); echo "Actuellement dans la base, il y a ".$nb_lignes." titres."; // Construction du tableau echo "<table>"; echo "<tr align=\"center\">"; echo "<td>Titre</td><td>Auteur</td><td>Song Book</td>"; echo "</tr>"; while ($rs_ligne = mysqli_fetch_assoc($rs)) { switch ($rs_ligne["livre"]) { case "Rea1Bk2": $songbook = "Real_Book_2.pdf"; $delta_book = 1; break; case "JazzFake": $songbook = "Jazz_Fake_Book.pdf"; $delta_book = 1; break; case "NewReal3": $songbook = "The_New_Real_Book_3.pdf"; $delta_book = 1; break; case "JazzLTD": $songbook = "Jazz_LTD.pdf"; $delta_book = 1; break; case "NewReall": $songbook = "The_New_Real_Book_1.pdf"; $delta_book = 1; break; case "Colorado": $songbook = "Colorado_Book.pdf"; $delta_book = 1; break; case "Realbkl": $songbook = "Real_Book_1.pdf"; $delta_book = 1; break; case "NewReal2": $songbook = "The_New_Real_Book_2.pdf"; $delta_book = 1; break; case "Rea1Bk3": $songbook = "Real_Book_3.pdf"; $delta_book = 1; break; case "Library": $songbook = "Library.pdf"; $delta_book = 1; break; case "EvansBk": $songbook = "Evans_Book.pdf"; $delta_book = 1; break; case "Evans Bk": $songbook = "Evans_Book.pdf"; $delta_book = 1; break; default : $songbook = ""; $delta_book= 0; } echo "<tr align=\"center\">"; echo "<td><a href=\"partoches/".$songbook."#page=".($rs_ligne["page"] + $delta_book)."\" title=\"Cliquez sur le lien pour atteindre la partition voulue\" target=\"_blank\">".$rs_ligne["titre"]."</a></td><td>".$rs_ligne["auteur"]."</td><td>".$rs_ligne["livre"]."</td>"; echo "</tr>"; } echo "</table>"; $rs->free(); ?>
Merci d'avance !