PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : MySQL, PostgreSQL, etc... » [RÉSOLU] SQLite et un peu de PDO » 20-03-2017 19:39:09

Bien j'ai trouvé la source de mon problème.

Comme souvent erreur d'étourderie (ou fatigue, notamment due au grand âge)

while($r = $q->fetch());{

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”

#2 Re : MySQL, PostgreSQL, etc... » [RÉSOLU] SQLite et un peu de PDO » 20-03-2017 19:39:09

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

#3 MySQL, PostgreSQL, etc... » [RÉSOLU] SQLite et un peu de PDO » 20-03-2017 19:39:09

Maljuna Kris
Réponses : 2

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 :

<?php
$choix=0;                
if(isset($_GET['chant'])){$choix=intval($_GET['chant']);}

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

1er appel

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 ?

#4 Re : Forum Général PHP » Pb variable » 29-03-2017 12:58:00

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é.

#5 Re : Forum Général PHP » effacer tous les fichiers d'un dossier » 03-04-2016 18:35:45

Tout cela m'a l'air assez décousu, au final.

Bref, en lisant la doc PHP de unlink() je trouve ceci :

This will delete all files in a directory matching a pattern in one line of code.

<?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à.

#6 Re : Forum Général PHP » effacer tous les fichiers d'un dossier » 03-04-2016 18:35:45

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 :

<?php

$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.

#7 Re : Javascript » Modifier le comportement du script EasyPrompter » 03-04-2016 09:53:46

Bon alors j'ai progressé, j'ai modifié le script en lui ajoutant 4 lignes :

    /****************/
    /** Raccourcis **/
    /****************/

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.

#8 Re : Javascript » Modifier le comportement du script EasyPrompter » 03-04-2016 09:53:46

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 :


    /****************/
    /** Raccourcis **/
    /****************/

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.
@+

#9 Re : Forum Général PHP » GD fond transparent imagecreatetruecolor » 02-04-2016 15:52:37

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.

#10 Javascript » Modifier le comportement du script EasyPrompter » 03-04-2016 09:53:46

Maljuna Kris
Réponses : 2

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 :

Code page EasyPrompter a écrit :

        /****************/
        /** 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.

#11 Re : Forum Général PHP » Problème avec conservation de mise en forme » 09-11-2015 16:29:18

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é.

#12 Re : Apache, quel est le secret de tes plumes ? » mod_rewrite » 24-11-2015 20:02:42

Saluton,

Ta question tombe à point nommé car voici ce que j'ai posté sur le forum moribond de WD-Media (coucou Manicow) :

MoKo a écrit :

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=$1

J'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.

#13 Re : MySQL, PostgreSQL, etc... » Problème affichage SQL » 01-11-2015 12:03:55

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.

#15 Re : Forum Général PHP » Envoie données Tableau dynamique avec 2 liste dynamique » 12-08-2015 19:03:12

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.

#16 Re : Forum Général PHP » preg_split() » 28-07-2015 19:52:34

Bon, en attendant une solution avec preg_split(), je fais avec les moyens du bord

<?php
function decoupe_vers($vers){
  $bouts=array();
  $i=-1;
  $bout='';
  while(++$i<strlen($vers)){
    switch($vers[$i]){
      case'[':
        if($bout<>''){$bouts[]=$bout;}
        $bout='[';
        break;
      case ']':
        $bouts[]=$bout.']';
        $bout='';
        break;
      default :
        $bout.=$vers[$i];
      }
    }
  $bouts[]=$bout;
  return $bouts;
  }
?>

ç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 les boutons qui vont bien 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.

#17 Forum Général PHP » preg_split() » 28-07-2015 19:52:34

Maljuna Kris
Réponses : 1

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 :

<?php
$verso=utf8_decode("[Am]Bo[Dm]nita, la canción que nos están can[Am]tando.");
$pattern= "??????"; // par quoi remplacer ces ????
$bouts=preg-split($pattern, $verso);
?>

de façon à ce que $bouts contienne :

contenu de $bouts a écrit :

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.

#18 Re : MySQL, PostgreSQL, etc... » erreur sql sur page accueil » 05-11-2014 13:21:37

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.

#19 Re : Forum Général PHP » Comment séparer les mots récupérés dans un input type text ? » 11-11-2014 00:58:43

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

#20 Re : Forum Général PHP » Requête SQL et div sous bootstrap » 30-10-2014 22:14:32

Saluton,

Nedankinde.

Mais ce serait sympa de nous en expliquer les tenants et les aboutissants, ça peut toujours servir à d'autres.

MK.

#21 Re : Forum Général PHP » Modification script vers php5.5 » 28-10-2014 08:57:03

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.

#22 Re : HTML, xHTML CSS » Lien fonctionne qu'au deuxieme clic » 28-10-2014 21:20:28

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.

#23 Re : Forum Général PHP » Requête SQL et div sous bootstrap » 30-10-2014 22:14:32

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)

/<?php
/**
 * fichier d'inclusion commun de l'application
 * exemple gestion de bibliothèque avec PDO
 * @auteur Dennis Popel
 */
// Chaîne de connexion au SGBD utilisateur/motDePasse
$connStr = 'mysql:host=localhost;dbname=pdo';
$utilisateur = 'root';
$motDePasse = '';
/**
 * cette fonction affichera l'en-tête sur chaque page
 * y compris la balise d'ouverture html,
 * la section head et la balise d'ouverture body.
 * Elle pourrait être appelée avant tout affichage de
 * la page elle-même
 * @param string $titre le titre de la page
 */
function montreEntete($titre)
    {?>
<html>
    <head><title><?php echo htmlspecialchars($titre)?></title></head>
    <body>
        <h1><?php echo htmlspecialchars($titre)?></h1>
        <a href="livres.php">Livres</a>
        <a href="auteurs.php">Auteurs</a>
        <hr />
    <?php
    }
/**
 *  Cette fonction 'ferme' les balises body et html
 *  ouvertes par la fonction montreEntete()
 */
function montrePied()
    {?>
    </body>
</html>
<?php
    }
/**
* Cette fonction affichera un message d'erreur, invoquera
* la fonction montrePied() et terminera l'application
* @param string $message le message d'erreur
*/
function montreErreur($message)
    {
    echo "<h2>Erreur</h2>";
    echo nl2br(htmlspecialchars($message));
    montrePied();
    exit();
    }
// // Créee l'objet de connexion
try
    {
    $conn = new PDO($connStr, $utilisateur, $motDePasse);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
catch(PDOException $e)
    {
    MontreEntete('Erreur');
    montreErreur("Désolé, une erreur s'est produite.
    Merci d'essayer plus tard.\n" . $e->getMessage());
    }

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.
@+

#24 Re : Forum Général PHP » Requête SQL et div sous bootstrap » 30-10-2014 22:14:32

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 ?

#25 Re : Forum Général PHP » les Flags en php » 22-10-2014 09:19:42

ing_tiziouzou2014 a écrit :

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 '==='

Pied de page des forums

Propulsé par FluxBB