Vous n'êtes pas identifié(e).
Bien j'ai trouvé la source de mon problème.
Comme souvent erreur d'étourderie (ou fatigue, notamment due au grand âge)
Ce point-virgule intempestif avant l'accolade empêchait à la boucle de s'éxécuter.
C'est piégeur parce que ça ne déclenche pas d'exception de parsing PHP et le code entre les {} s'exécute une fois et affichait donc “while”
Bon, je vous fais part de mes découvertes au fil de l'eau.
Finalement j'ai installé le module SQLite de Firefox et lui me permet de voir le contenu de la table hits qui contient bien les chants 300 et 400 avec chacun un score de 2.
Donc je vais maintenant me concentrer sur le parcours de la requête SELECT dont le résultat semble vide ????
Saluton de la part d'un revenant.
Sur mon site de chansons j'essaye de faire apparaître le hit-parade des 30 chansons les plus visitées.
Jusqu'ici j'ai bricolé un truc qui utilise un array sérialisé et sauvegardé sous forme d'un fichier texte sur le serveur.
Ça fonctionne relativement bien sauf que, de temps à autres, un accès concurrentiel au fichier texte réinitialise ce dernier à vide et tout repart à zéro.
J'ai donc décidé de me faire violence et de gérer ça avec une petite base de donnée SQLite (comme au bon vieux temps).
Voici le script de test :
/// DB connection string and username/password
$connStr = 'sqlite:pdo.db';
$user = 'root';
$pass = '';
// Create the connection object
try
{
$conn = new PDO($connStr, $user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
showHeader('Erreur');
showError("Désolé, une erreur s'est produite.\n" . $e->getMessage());
}
// Création de la table hits si elle n'existe pas
$conn->query("CREATE TABLE IF NOT EXISTS hits (id INTEGER PRIMARY KEY, song INTEGER UNIQUE, score INTEGER)");
// Y-a-t'il une chanson sélectionnée ?
if(isset($choix) && $choix>0){
// Lire l'enregistrement correspondant à la chanson sélectionnée
$q=$conn->query("SELECT COUNT(*) AS trouve FROM hits WHERE song = $choix");
$count = $q->fetch();
$q->closeCursor();
?><pre><?php var_dump($count); ?></pre><?php
if($count['trouve']>0){// l'enregistrement existe mettre la table à jour
$conn->query("UPDATE hits SET score = score + 1 WHERE song = $choix");
echo 'UPDATE<br />';
}
else{
$conn->query("INSERT INTO hits(song, score) VALUES($choix,1)");
echo 'INSERT<br />';
}
}
// récupérer les 10 meilleurs scores
$q=$conn->query("SELECT song, score FROM hits ORDER BY score DESC, song LIMIT 30");
$q->setFetchMode(PDO::FETCH_ASSOC);
while($r = $q->fetch());{
$favoris[$r['song']]['vus']=$r['score'];
echo 'dans While<br />';
}
$q->closeCursor();
?>
<pre><?php var_dump($favoris);?></pre>
et les résultats de son appel, le premier sans passage de valeur et les deux suivants avec passage de ?chant=300
dans While
array(1) {
[""]=>
array(1) {
["vus"]=>
NULL
}
}
++++++++++++++++++++
2ème appel
array(2) {
["trouve"]=>
string(1) "0"
[0]=>
string(1) "0"
INSERT
dans While
array(1) {
[""]=>
array(1) {
["vus"]=>
NULL
}
}
+++++++++++++++++++++
3ème appel
array(2) {
["trouve"]=>
string(1) "1"
[0]=>
string(1) "1"
}
UPDATE
dans While
array(1) {
[""]=>
array(1) {
["vus"]=>
NULL
}
}
La particularité de SQLite est que lorsqu'on se connecte à une base de données inexistante il crée un fichier vide, ici pdo.db.
Je trouve déjà bizarres les affichages des var_dump[$count]
On voit bien qu'au premier appel on accède directement au parcours de la requête SELECT, au deuxième appel on passe par INSERT, logique la table est vide et au troisième on passe bien par UPDATE, toujours logique puisque on a le même chant 300 sélectionné par $_GET['chant].
Sauf que les résultats des var_dump ne sont pas cohérents puisque la valeur 300 de “song” n'apparaît pas.
J'ai testé ensuite avec ?chant=400 et il passe bien par INSERT, puis UPDATE la fois suivante, mais les var_dump restent les mêmes.
Et, de toutes façons, quand je rapatrie la base pdo.db depuis mon serveur pour la tester avec sqliteman, la table “hits” est bien créée mais reste désespérément vide.
Qu'est-ce qui m'échappe selon vous ?
Saluton,
Ton code est tout de même très “approximatif”, je note, entre autres choses, que tu ne testes pas si tes requêtes SELECT retourne vraiment un résultat avant d'en affecter le contenu à des variables.
Pourquoi SELECT * puisque tu sais que tu ne veux récupérer que trois colonnes : city.id, city_name et city_detail ?
Enfin ta description du dysfonctionnement est on ne peut plus absconse pour nous autres : “quand je clique sur le lien” … Quel lien ?
Enfin, l'éventuel résultat de la dernière requête de jointure de "save & liaison" n'est pas exploité.
Tout cela m'a l'air assez décousu, au final.
Bref, en lisant la doc PHP de unlink() je trouve ceci :
<?php array_map('unlink', glob("some/dir/*.txt")); ?>
En remplaçant *.txt par, successivement *.jpg, *.jpeg, *.png, *.gif, ou, encore plus fort, si tu trouves un caïd en expressions rationnelles qui permette à glob() de trouver, en une seule passe, tous les fichiers avec ces extensions, mais rien que ceux-là.
Saluton,
Peut-être commencer en faisant précéder :
unlink($chemin); // On efface
par
printf("%s<br />", $chemin);
En fait je placerais plutôt le code dans cet ordre :
$dossier_traite = "ROOT.'data/dossier/'.$nom.'/'";
$repertoire = opendir($dossier_traite); // On définit le répertoire dans lequel on souhaite travailler.
while (false !== ($fichier = readdir($repertoire))) // On lit chaque fichier du répertoire dans la boucle.
{
// Si le fichier n'est pas un répertoire…
if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier))
{
$chemin = $dossier_traite."/".$fichier; // On définit le chemin du fichier à effacer.
printf("%s<br />", $chemin);
unlink($chemin); // On efface.
}
}
closedir($repertoire);
Après je m'interroge quant à l'impact d'unlink sur le pointeur interne de la fonction readdir, mais je ne lis rien de rédhibitoire dans la doc.
Testons déjà comme ça et voyons le résultat.
Bon alors j'ai progressé, j'ai modifié le script en lui ajoutant 4 lignes :
var option1 = {'disable_in_input':true} ;
shortcut.add("Space", Prompter.playPause, option1);
shortcut.add("f9", Prompter.playPause, option1);// pour AirTurn Quad mode 4
shortcut.add("Return", Prompter.playPause, option1);
shortcut.add("Ctrl+space", Prompter.invertDirection, option1);
shortcut.add("Ctrl+return", Prompter.invertDirection, option1);
shortcut.add('down', Prompter.speedDown, option1);
shortcut.add('f4', Prompter.speedDown, option1);// pour AirTurn Quad mode 4
shortcut.add('up', Prompter.speedUp, option1);
shortcut.add('f7', Prompter.speedUp, option1);// pour AirTurn Quad mode 4
shortcut.add('left', function(){$('#playlist-select-prev').click();}, option1);
shortcut.add('right', function(){$('#playlist-select-next').click();}, option1);
shortcut.add('add', function(){$('#zoom .plus').click();}, option1);
shortcut.add('subtract', function(){$('#zoom .moins').click();}, option1);
shortcut.add('6', function(){$('#zoom .moins').click();}, option1);
shortcut.add('=', function(){$('#zoom .plus').click();}, option1);
shortcut.add('Shift+6', function(){$('#zoom .moins').click();}, option1);
shortcut.add('Shift+=', function(){$('#zoom .plus').click();}, option1);
shortcut.add('home', function(){$('#reset').click();}, option1);
shortcut.add('tab', function(){$('#playlist-select-next').click();Prompter.start();}, option1);
shortcut.add('ctrl+Shift+t', function(){$('#playlist-select-next').click();Prompter.start();}, option1);// pour AirTurn Quad mode 4
shortcut.add("Alt+i", function(){btnAction('italic');}, {'target':$('#win-playlist-item textarea')[0]});
shortcut.add("Alt+b", function(){btnAction('bold');}, {'target':$('#win-playlist-item textarea')[0]});
shortcut.add("Alt+u", function(){btnAction('underline');}, {'target':$('#win-playlist-item textarea')[0]});
J'ai testé sur mon PC et les touches F9, F4, F7 et Ctrl+Shit+T sont bien opérationnelles dans EasyPormpter.
Il ne me restait plus qu'à tester cela sur ma tablette Acer Androïd en y connectant via BlueTooth le Quad AirTurn BT-106 et là ????
Impossible de faire reconnaître ce périphérique par la tablette.
Mais je m'aperçois maintenant que même mon PC sous Ubuntu (Paramètres sytème->Bluetooth->Recherche de périphériques) ne le trouve pas non plus.
Je vais donc me replonger dans la doc et procéder par tâtonnement.
Bon, tout en postant hier je me suis rendu compte que la solution était dans les bouts de code que je citais.
J'ai donc modifié le code comme suit :
var option1 = {'disable_in_input':true} ;
shortcut.add("Space", Prompter.playPause, option1);
shortcut.add("f9", Prompter.playPause, option1);// pour AirTurn Quad mode 4
shortcut.add("Return", Prompter.playPause, option1);
shortcut.add("Ctrl+space", Prompter.invertDirection, option1);
shortcut.add("Ctrl+return", Prompter.invertDirection, option1);
shortcut.add('down', Prompter.speedDown, option1);
shortcut.add('f4', Prompter.speedDown, option1);// pour AirTurn Quad mode 4
shortcut.add('up', Prompter.speedUp, option1);
shortcut.add('f7', Prompter.speedUp, option1);// pour AirTurn Quad mode 4
shortcut.add('left', function(){$('#playlist-select-prev').click();}, option1);
shortcut.add('right', function(){$('#playlist-select-next').click();}, option1);
shortcut.add('add', function(){$('#zoom .plus').click();}, option1);
shortcut.add('subtract', function(){$('#zoom .moins').click();}, option1);
shortcut.add('6', function(){$('#zoom .moins').click();}, option1);
shortcut.add('=', function(){$('#zoom .plus').click();}, option1);
shortcut.add('Shift+6', function(){$('#zoom .moins').click();}, option1);
shortcut.add('Shift+=', function(){$('#zoom .plus').click();}, option1);
shortcut.add('home', function(){$('#reset').click();}, option1);
shortcut.add('tab', function(){$('#playlist-select-next').click();Prompter.start();}, option1);
shortcut.add('ctrl+Shift+t', function(){$('#playlist-select-next').click();Prompter.start();}, option1);// pour AirTurn Quad mode 4
shortcut.add("Alt+i", function(){btnAction('italic');}, {'target':$('#win-playlist-item textarea')[0]});
shortcut.add("Alt+b", function(){btnAction('bold');}, {'target':$('#win-playlist-item textarea')[0]});
shortcut.add("Alt+u", function(){btnAction('underline');}, {'target':$('#win-playlist-item textarea')[0]});
J'ai testé sur mon PC, et EasyPrompter réagit bien comme attendu avec les touches F9, F4,F7 et Ctrl+Shift+T.
Il ne me reste plus qu'à tester sur ma tablette avec le pédalier Quad AirTurn, mais là, j'ai corvée de belle-mère.
Je vous tiens au courant.
@+
Saluton codeur21,
Parmi les commentaires (certes en anglais) dans la doc de la fonction imagecreatetruecolor() je lis ceci que je t'ai traduit (à peu près)
Si vous voulez créer une image PNG dont le fond soit totalement transparent procédez comme suit:
<?php
$png = imagecreatetruecolor(800, 600);
imagesavealpha($png, true);$trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127);
imagefill($png, 0, 0, $trans_colour);
$red = imagecolorallocate($png, 255, 0, 0);
imagefilledellipse($png, 400, 300, 400, 300, $red);
header("Content-type: image/png");
imagepng($png);
?>Il vous suffit donc de créer une image en vraies couleurs, (assurez-vous que le canal alpha soit activé), puis de remplir l'image avec une couleur qui a eu son niveau d'alpha réglé sur totalement transparent (127).
L'image PNG résultant du code ci-dessus aura un cercle rouge sur un fond totalement transparent.
J'espère que cela va te permettre d'avancer dans ton projet.
@mike.
Saluton,
Oui, je sais, ça faisait longtemps, mais je me suis reconverti en barde depuis 4 ans que je suis en retraite.
Et justement, j'ai découvert cette petite merveille EasyPrompter, car avec plus de 300 chansons à mon répertoire vous vous doutez bien, qu'en scène, il me faut un pense-bête et que je ne peux pas me trimbaler avec mes 12 carnets de 30 chansons.
J'ai donc installé cette page HTML pilotée par JQuery sur ma tablette Androïd et ça fonctionne tout à fait très bien.
Mais voilà, quand je joue de la guitare, mes mains sont prises aussi ai-je pensé à une commande au pied et j'ai donc fait l'acquisition d'un pédalier Quad piloté par un Transceiver AirTurn BT-106 qui communique avec la tablette via Bluetooth.
Sauf que ce transceiver possède 6 modes pré-programmés et, bien que le mode 6 soit théoriquement déclaré programmable, le fournisseur, à qui j'ai demandé comment procéder, reste muet sur le sujet.
Aussi, malin comme vous me connaissez, ai-je appliqué l'adage “think different” et j'ai retourné la problématique en me proposant de faire réagir EasyPrompter aux MODE 4 du transceiver.
Je me suis donc plongé dans le code Javascript de la page et j'ai trouvé cela :
/****************/
/** Raccourcis **/
/****************/var option1 = {'disable_in_input':true} ;
shortcut.add("Space", Prompter.playPause, option1);
shortcut.add("Return", Prompter.playPause, option1);
shortcut.add("Ctrl+space", Prompter.invertDirection, option1);
shortcut.add("Ctrl+return", Prompter.invertDirection, option1);
shortcut.add('down', Prompter.speedDown, option1);
shortcut.add('up', Prompter.speedUp, option1);
shortcut.add('left', function(){$('#playlist-select-prev').click();}, option1);
shortcut.add('right', function(){$('#playlist-select-next').click();}, option1);
shortcut.add('add', function(){$('#zoom .plus').click();}, option1);
shortcut.add('subtract', function(){$('#zoom .moins').click();}, option1);
shortcut.add('6', function(){$('#zoom .moins').click();}, option1);
shortcut.add('=', function(){$('#zoom .plus').click();}, option1);
shortcut.add('Shift+6', function(){$('#zoom .moins').click();}, option1);
shortcut.add('Shift+=', function(){$('#zoom .plus').click();}, option1);
shortcut.add('home', function(){$('#reset').click();}, option1);
shortcut.add('tab', function(){$('#playlist-select-next').click();Prompter.start();}, option1);shortcut.add("Alt+i", function(){btnAction('italic');}, {'target':$('#win-playlist-item textarea')[0]});
shortcut.add("Alt+b", function(){btnAction('bold');}, {'target':$('#win-playlist-item textarea')[0]});
shortcut.add("Alt+u", function(){btnAction('underline');}, {'target':$('#win-playlist-item textarea')[0]});
Mais je ne suis guère avancé car je ne sais pas comment ajouter des lignes pour prendre en compte les commandes envoyées par le transceiver et que je peux résumer comme suit :
Mode 4 du AirTurn BT-106 TRANSCEIVER avec pédalier Quad
------------------------------+-------------------+----------------------------------------------------------------------------------------------------------------------------+
Port pédalier + envoi + raccourcis équivalents à créer dans EasyPrompter
------------------------------+-------------------+----------------------------------------------------------------------------------------------------------------------------+
1- gauche + F9 + shortcut.add('tab', function(){$('#playlist-select-next').click();Prompter.start();}, option1);
------------------------------+-------------------+----------------------------------------------------------------------------------------------------------------------------+
2 - gauche du milieu + F4 + shortcut.add('down', Prompter.speedDown, option1);
------------------------------+------------------+----------------------------------------------------------------------------------------------------------------------------+
3 - droite du milieu + F7 + shortcut.add('up', Prompter.speedUp, option1);
------------------------------+-------------------+----------------------------------------------------------------------------------------------------------------------------+
4 – droite + Ctrl+Shift+T + shortcut.add("Space", Prompter.playPause, option1);
------------------------------+-------------------+----------------------------------------------------------------------------------------------------------------------------+
En fait dans la définition des raccourcis je ne sais pas comment traduire F9, F4, F7 et Ctrl+Shift+T, existe-t-il un syntaxe propre à JQuery ou Javascript ????
Sachant que j'ai aussi pisté ce code dans la page
</script>
<script type="text/javascript">
// <![CDATA[
var shortcut={'all_shortcuts':{},'add':function(shortcut_combination,callback,opt){var default_options={'type':'keydown','propagate':false,'disable_in_input':false,'target':document,'keycode':false};if(!opt)opt=default_options;else{for(var dfo in default_options){if(typeof opt[dfo]=='undefined')opt[dfo]=default_options[dfo]}}var ele=opt.target;if(typeof opt.target=='string')ele=document.getElementById(opt.target);shortcut_combination=shortcut_combination.toLowerCase();var func=function(e){e=e||window.event;if(opt['disable_in_input']){var element;if(e.target)element=e.target;else if(e.srcElement)element=e.srcElement;if(element.nodeType==3)element=element.parentNode;if(element.tagName=='INPUT'||element.tagName=='TEXTAREA')return}if(e.keyCode)code=e.keyCode;else if(e.which)code=e.which;var character=String.fromCharCode(code).toLowerCase();if(code==188)character=",";if(code==190)character=".";var keys=shortcut_combination.split("+");var kp=0;var shift_nums={"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":"\"",",":"<",".":">","/":"?","\\":"|"};var special_keys={'esc':27,'escape':27,'tab':9,'space':32,'return':13,'enter':13,'backspace':8,'scrolllock':145,'scroll_lock':145,'scroll':145,'capslock':20,'caps_lock':20,'caps':20,'numlock':144,'num_lock':144,'num':144,'pause':19,'break':19,'insert':45,'home':36,'delete':46,'end':35,'pageup':33,'page_up':33,'pu':33,'pagedown':34,'page_down':34,'pd':34,'left':37,'up':38,'right':39,'down':40,'multiply':106,'add':107,'subtract':109,'decimalpoint':110,'divide':111,'minus':43,'plus':45,'f1':112,'f2':113,'f3':114,'f4':115,'f5':116,'f6':117,'f7':118,'f8':119,'f9':120,'f10':121,'f11':122,'f12':123};var modifiers={shift:{wanted:false,pressed:false},ctrl:{wanted:false,pressed:false},alt:{wanted:false,pressed:false},meta:{wanted:false,pressed:false}};if(e.ctrlKey)modifiers.ctrl.pressed=true;if(e.shiftKey)modifiers.shift.pressed=true;if(e.altKey)modifiers.alt.pressed=true;if(e.metaKey)modifiers.meta.pressed=true;for(var i=0;k=keys[ i ],i<keys.length;i++){if(k=='ctrl'||k=='control'){kp++;modifiers.ctrl.wanted=true}else if(k=='shift'){kp++;modifiers.shift.wanted=true}else if(k=='alt'){kp++;modifiers.alt.wanted=true}else if(k=='meta'){kp++;modifiers.meta.wanted=true}else if(k.length>1){if(special_keys[k]==code)kp++}else if(opt['keycode']){if(opt['keycode']==code)kp++}else{if(character==k)kp++;else{if(shift_nums[character]&&e.shiftKey){character=shift_nums[character];if(character==k)kp++}}}}if(kp==keys.length&&modifiers.ctrl.pressed==modifiers.ctrl.wanted&&modifiers.shift.pressed==modifiers.shift.wanted&&modifiers.alt.pressed==modifiers.alt.wanted&&modifiers.meta.pressed==modifiers.meta.wanted){callback(e);if(!opt['propagate']){e.cancelBubble=true;e.returnValue=false;if(e.stopPropagation){e.stopPropagation();e.preventDefault()}return false}}};this.all_shortcuts[shortcut_combination]={'callback':func,'target':ele,'event':opt['type']};if(ele.addEventListener)ele.addEventListener(opt['type'],func,false);else if(ele.attachEvent)ele.attachEvent('on'+opt['type'],func);else ele['on'+opt['type']]=func},'remove':function(shortcut_combination){shortcut_combination=shortcut_combination.toLowerCase();var binding=this.all_shortcuts[shortcut_combination];delete(this.all_shortcuts[shortcut_combination]);if(!binding)return;var type=binding['event'];var ele=binding['target'];var callback=binding['callback'];if(ele.detachEvent)ele.detachEvent('on'+type,callback);else if(ele.removeEventListener)ele.removeEventListener(type,callback,false);else ele['on'+type]=false}};
// ]]>
</script>
Si un caïd de Javascript et/ou JQuery pouvait me dépatouiller un peu tout ça, ce serait sympatoche.
Saluton,
Ton problème est intimement lié à l'environnement Joomla/JsJobs que je ne maîtrise pas (et c'est un euphémisme).
La solution réside donc exclusivement dans la manipulation de ces outils, il m'apparaît, en conséquence, que tu gagnerais ton temps à solliciter un forum qui leur soit directement dédié.
Saluton,
Ta question tombe à point nommé car voici ce que j'ai posté sur le forum moribond de WD-Media (coucou Manicow) :
Je vois dans phpinfo() parmi les loaded-modules Apache : mod-rewrite.
Mais quand je mets ce fichier .htaccess à la racine de mon site
# .htacess
RewriteEngine on
RewriteRule /kanto/([a-z \-]) reroute.php?chant=$1J'obtiens le message suivant :
Apache a écrit :Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.Please contact the server administrator, tech@wdmedia.net and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/1.3.41 Server at www.avcxjo-moko-kantas.fr Port 80
Quelqu'un(e) a-t-il une explication ?
Merci
Je précise que je souhaiterai que, par exemple http://www.avcxjo-moko-kantas.fr/kanto/niaiseux redirige vers http://www.avcxjo-moko-kantas.fr/rerout … t=niaiseux
Mais je demeure dans l'attente d'une réponse.
Saluton PandadeMios,
Il s'agit d'une classique gestion de rupture dans le parcours séquentiel d'une série.
Il faut initialiser une variable $ChqPrecedent à vide avant d'entrer dans la boucle de parcours du jeu d'enregistrements.
Au début du traitement dans la boucle tu compares $ChPrecedent avec la valeur courante dans la requête (c'est là aussi que ton SELECT * va te compliquer la tâche) et chaque fois qu'il y a différence tu écris la nouvelle valeur dans $ChPrecedent et tu affiches les colonnes redondantes sinon tu passes directement aux colonnes suivantes.
Saluton,
Autre chose, je te conseille d'oublier toute forme de SELECT *.
Le billet de Fred “La guerre des étoiles”
Saluton,
Tu devrais vérifier dans le source HTML de ton formulaire comment sont nommés tes <select> parce que le résultat du print_r($_POST) est assez curieux, [_$row] ne me dit rien qui vaille.
Bon, en attendant une solution avec preg_split(), je fais avec les moyens du bord
ça fonctionne, c'est déjà ça.
Si vous allez là http://www.avcxjo-moko-kantas.fr/bonita.php et que vous cliquez sur l'un des deux boutons vous verrez le résultat.
La seule chose qui reste mystérieuse pour moi c'est pourquoi le titre de la chanson dans l'entête est décalé vers le haut.
Saluton les anciens, c'est MK qui est de passage, et bonjour aux plus récents.
Mon problème est simple mais dépasse mes maigres compétences en matière d'expressions rationnelles :
de façon à ce que $bouts contienne :
Array{0=>"[Am]",1=>"Bo",2=>"[Dm]",3=>"nita, la canción que nos están can",4=>"[Am]",5=>"tando."}
Car je veux insérer le résultat dans un document via FPDF et modifier la couleur des noms des accords, bien sûr il faudrait que $pattern s'adapte à tout ce qui pourra être entre [ ].
Merci de votre attention.
@mike.
Effectivement ça ne peut pas être l'alias `feat` de la table phpas_featured qui pose problème puisque, juste avant dans cette clause On feat.adid ne dérange pas.
Donc, vérifie le nom de tes colonnes dans la table phpas_featured.
Et par ailleurs, de grâce, ne relance pas, à ton tour, la guerre des étoiles.
Saluton,
En première analyse je te dirigerais vers les fonctions PHP explode() ou split().
Mais je pressens des difficultés à venir liées à la non-unicité et non universalité potentielles de l'espace comme caractère de séparation et aux articles et autres conjonctions de coordination.
En effet, commet traiteras-tu, par exemple : "soucis de logiciel"
@mike
Saluton,
Nedankinde.
Mais ce serait sympa de nous en expliquer les tenants et les aboutissants, ça peut toujours servir à d'autres.
MK.
Saluton,
Petit problème, Delphine ma chérie (oui, le MK est un animal très câlin avec les demoiselles), dans ton code final, je ne vois pas quand le texte de la $requête est soumis à PDO pour exécution.
Saluton,
Si j'en crois ce que je vois dans le petit bout de source HTML du post initial ce qui est entre accolades {} ressemble à de l'insertion par un CMS ou un truc de la sorte.
Donc il y a peu de chance que l'honorable solution de Delphine, qui raisonne en pure HTML, fonctionne.
Par contre, il faudrait nous en dire un peu plus sur l'architecture sous-tendue car nous ne sommes pas devins.
Saluton Delphine,
Il faudrait que tu saches pourquoi la connexion est impossible. Pour cela, inspire-toi de cet exemple que j'ai pris dans le livre de Denis Popel (Learning PDO)
Pour ce qui concerne le motif du recours aux <div>s plutôt qu'aux balises sémantiques de tableau, permets-moi de rester sceptique. Avec les CSS et Javascript il est tout à fait possible d'obtenir ce type de rendu dynamique et interactif. Mais je ne connais pas Bootstrap et ses subtilités.
@+
Saluton Delphine,
As-tu vérifié, en affichant le source HTML, que tu passes bien à l'intérieur de ta structure while{} ?
Tu peux aussi faire un echo $i en sortie de while ça te donnerait déjà une première indication.
Le code présenté m'interpelle tout de même pourquoi ne pas utiliser les balises HTML sémantiquement adaptées (table, thead, tbody, tr, th, td ) au lieu de cette embrouillamini de <div> imbriquées ?
if ($flag = 0)if ($flag = 1)
Sans même aller chercher à comprendre ce code, déjà '=' en PHP c'est l'opérateur d'affectation, les opérateurs de comparaison sont soit '==' soit '==='