Envoyer variables PHP vers base de donnée

Résolu
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014 - 3 mars 2014 à 12:33
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 12 mars 2014 à 01:23
Bonjour,
J'ai un souci avec mon script j'ai une erreur interne de type 500 où cela cloche t-il ?

$host="mysql01-120.perso";
$login="mabase";
$password="mdp";
$base="mabase";
mysql_connect($host,$login,$password) or die(mysql_error());
mysql_select_db($base);


$couleur1 = isset($_GET['zonecouleur1']) ? $_GET['zonecouleur1'] : false;
$couleur2 = isset($_GET['zonecouleur2']) ? $_GET['zonecouleur2'] : false;
$couleur3 = isset($_GET['zonecouleur3']) ? $_GET['zonecouleur3'] : false;

if($couleur1){
if($couleur2){
if($couleur3){

$sql = mysql_query("INSERT INTO 'UTILISATEURS' ('zonecouleur1','zonecouleur2', 'zonecouleur3') VALUES ('$couleur1', '$couleur2', '$couleur3')";
//test si req bien executée

if($sql){
$reponse="Insertion de ".$couleur1." réussie dans la BDD ";

} else {

$reponse="La requette d'insertion n'a pas fonctionné";
}

//envoi de la reponse à Ajax
echo $reponse;
}
}
}
}


quelqu'un à une idée ?

18 réponses

jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
3 mars 2014 à 13:24
Bonjour,

Comme à chaque fois.... commence par faire ceci :

1 - Fais un echo de ta requête
2 - testes là en dur dans ta BDD...


Déjà... ça te permettra de voir si ta requête est bonne....


Ensuite pour ton mysql_query (je pense que tes apostrophes autour du nom de ta table et ceux autour du nom de tes champs génèrent ton erreur... ):
$query = "INSERT INTO UTILISATEURS 
        (zonecouleur1,zonecouleur2, zonecouleur3) 
         VALUES
        ('$couleur1', '$couleur2', '$couleur3')";
$sql = mysql_query($query) or die(mysql_error());


0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
Modifié par f0xi le 4/03/2014 à 00:37
faut vraiment que tu t'habitue a ne plus utiliser MySQL -----> MySQLi (qui est proche de MySQL au niveau nomage) ou PDO.
quand tu aura des averto des serveur à tout bout tu sera bien embêté !

ta condition est mal écrite voici une amélioration totale :

<?php
/* configuration base de données */
define('DB_HOST',  "localhost");
define('DB_USER',  "root");
define('DB_PASSW', "");
define('DB_NAME',  "tests");

/* affiche les messages de Deboggage (true) ou pas (false) */
define('DEBUG', true);

/* bonus : une fonction de test pour les couleurs HTML ! 
   afin d'eviter tout problème d'injection SQL ou d'enregistrer 
   des données érronées (mauvais code couleur par exemple.
*/
function isHTMLColor($color){
  // detecte les couleurs de format court #000 à #fff 
  // et les couleurs format long #000000 à #ffffff
  return preg_match('/^#([a-f0-9]{3}){1,2}$/i',$color);
}

/* connection à la base via MySQLi
*/
$DB = new mysqli(DB_HOST, DB_USER, DB_PASSW, DB_NAME);

// si erreur de connection
if($DB->connect_errno)
{
  echo "Une erreur du serveur empêche l'enregistrement des couleurs.";
  
  // DEBUG :: on affiche les erreur de connection de la base de données
  if(DEBUG) echo '<pre style="border:1px solid #c00">', $DB->connect_errno,' : ', $DB->connect_error,'</pre>';
}
// sinon continuer
else
{
  // récupération des couleurs (note les paramètres GET court !)
  // car les URL sont limitée en caractères sur de nombreux navigateurs.
  $couleur1 = isset($_GET['zc1']) ? $_GET['zc1'] : false;
  $couleur2 = isset($_GET['zc2']) ? $_GET['zc2'] : false;
  $couleur3 = isset($_GET['zc3']) ? $_GET['zc3'] : false;

  /* en une seule condition :
     si A et B et C alors ...
  */
  if(isHTMLColor($couleur1) && isHTMLColor($couleur2) && isHTMLColor($couleur3)){

    /* on utilise toujours sprintf pour remplir les requêtes 
       et on execute jamais une requête directement à la déclaration
    */
    $sql = sprintf("INSERT INTO '%s' VALUES ('%s','%s','%s')",
            'UTILISATEURS', $couleur1, $couleur2, $couleur3);

    // la requête s'execute avec succés
    if($DB->query( $sql ))
    {
       echo "Couleurs enregistrées."; 
    } 
    // sinon baaah .... ça marche pas :(
    else 
    { 
       echo "Erreur d'enregistrement des couleurs."; 
       
       // DEBUG :: on affiche les erreur MySQL qui sont survenues
       if(DEBUG) echo '<pre style="border:1px solid #c00">', $DB->errno,' : ', $DB->error,'<br/><i>', $sql,'</i></pre>';
    } 
  }
  // si les couleurs ne sont pas définie
  else
  {
    echo "Il n'y a rien à enregistrer.";
    
    // DEBUG :: on dump $_GET pour voir ce que notre form/ajax à envoyé à notre PHP
    if(DEBUG){ 
      print('<pre style="border:1px solid #c00">');
      print_r($_GET);
      print('</pre>');
    }
  }
}

// on finit par un petit formulaire basic pour tester.
?>
<form method="GET" action="">
  <p><label>zone couleur 1</label> <input type="text" name="zc1" value="#000"/></p>
  <p><label>zone couleur 2</label> <input type="text" name="zc2" value="#fff"/></p>
  <p><label>zone couleur 3</label> <input type="text" name="zc3" value="#4e4e4e"/></p>
  <hr>
  <p><input type="submit" value="Appliquer"/></p>
</form>


ton erreur est le quatrième "}" à la fin du script.

________________________________________________________
[ besoin de câbles audio, vidèo, informatique pas cher ?]
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
4 mars 2014 à 18:47
bonsoir,

 $sql = sprintf("INSERT INTO 'UTILISATEURS' VALUES ('zonecouleur1','zonecouleur2','zonecouleur3')",
'UTILISATEURS', $couleur1, $couleur2, $couleur3);


// la requête s'execute avec succés
if($DB->query( $sql ))
{
echo "Couleurs enregistrées.";
}
// sinon baaah .... ça marche pas :(
else
{
echo "Erreur d'enregistrement des couleurs.";

// DEBUG :: on affiche les erreur MySQL qui sont survenues
if(DEBUG) echo '<pre style="border:1px solid #c00">', $DB->errno,' : ', $DB->error,'<br/><i>', $sql,'</i></pre>';
}
}
// si les couleurs ne sont pas définie
else
{
echo "Il n'y a rien à enregistrer.";



Merci, c'est très intéressant et je vais adopter msqli pour la connexion. Je te remercie pour ta coopération, ton travail est carré et avec les commentaires c'est assez claires, ce qui n'est pas un mal pour ma situation. J'ai passé une partie de l'après midi sur l'adaptation du script et bien que je n'y connaisse pas grand chose avec un niveau de maternelles petite section, deux petites remarques

Tu utilises sprinf pourquoi pas, j'ai eu beau chercher je ne sais pas à quoi ça sert et j'ai placé le nom de ma table (utilisateurs) et les entrées de la base (zoucouleur1, 2, et 3).

Bien que mes valeurs apparaissent bien dans la fenêtre d'alerte de mon programme, je n'arrive pas à enregistrer dans la base les infos. Donc j'ai essayé dans tous les sens et j'arrive au même résultat (ben ça marche pas) mais je n'ai pas de message d'erreur venant de la base seulement l'echo "il n'y a rien à enregistrer". Alors piteusement je reviens ici pour demander une fois encore des explications voire une solution au problème
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
4 mars 2014 à 20:17
Ton erreur est encore et toujours liée à ta requête ....

As tu.. fais un ECHO de ta requête ?
Et l'as tu testé en direct dans ta BDD ????

Si tu l'avais fait.. je pense que tu aurais vu ton erreur...

Pour info.. il existe également des manuels sur le net pour les fonctions..
http://www.php.net/manual/fr/function.sprintf.php

Si tu regardes ce que tu as marqué :
$sql = sprintf("INSERT INTO 'UTILISATEURS' VALUES ('zonecouleur1','zonecouleur2','zonecouleur3')",
            'UTILISATEURS', $couleur1, $couleur2, $couleur3);


Et ce que F0xi t'a proposé :
   $sql = sprintf("INSERT INTO '%s' VALUES ('%s','%s','%s')",
            'UTILISATEURS', $couleur1, $couleur2, $couleur3);



Tu devrais voir une différence.. non ?


Donc... je t'en supplie... lorsque tu as des soucis avec tes requêtes...commence par faire un ECHO de celle-ci et testes là directement dans ta BDD !!!





0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
4 mars 2014 à 20:47
je ne sais pas faire un echo
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
4 mars 2014 à 21:18
Heu.... tu en fais pourtant dans ton code... :-(

Echo $mavariable;
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
4 mars 2014 à 21:24
Cela ne changeait pas le problème mais j'ai néanmoins rétablit comme à l'origine du script de foxi mais rien ne s'inscrit dans la base

$sql = sprintf("INSERT INTO '%s' VALUES ('%s','%s','%s')",
'UTILISATEURS', $couleur1, $couleur2, $couleur3);12


0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
4 mars 2014 à 21:27
Et tu as fais un echo de ta requête ?
Tu l'as testé directement dans ta bdd ???
(Ca ne fait que 30 fois que je te le demande. ...)
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
4 mars 2014 à 21:42
donnes moi cinq minutes et je vais essayer
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
4 mars 2014 à 21:41
Ma requête la voici :

function creerInstance(){
if(window.XMLHttpRequest){
/* Firefox, Opera, Google Chrome */
return new XMLHttpRequest();
}else if(window.ActiveXObject){
/* Internet Explorer */
var names = [
"Msxml2.XMLHTTP.6.0",
"Msxml2.XMLHTTP.3.0",
"Msxml2.XMLHTTP",
"Microsoft.XMLHTTP"
];
for(var i in names){
/* On teste les différentes versions */
try{ return new ActiveXObject(names[i]); }
catch(e){}
}
alert("Non supporte");
return null; // non supporté
}
};

function envoyerDonnees(){
var req = creerInstance();
/* On récupère la variable ici */

var ZoneCouleur1 = document.getElementById('titre').style.color;

var ZoneCouleur2 = document.getElementById('fonction').style.color;

var ZoneCouleur3 = document.getElementById('adresse').style.color;



req.onreadystatechange = function(){
/* Si l'état = terminé */
if(req.readyState == 4){
/* Si le statut = OK */
if(req.status == 200){
/* On affiche la réponse */
alert(req.responseText);
}else{
alert("Error: returned status code " + req.status + " " + req.statusText);
}
}
}
req.open("GET", "serveur.php?zc1="+ZoneCouleur1 + "&zc2="+ZoneCouleur2 + "&zc3="+ZoneCouleur3 ,true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(null);
}

Le code de foxi en ayant juste enlever son formulaire de test:


<?php
/* configuration base de données */
define('DB_HOST', "localhost");
define('DB_USER', "mabase");
define('DB_PASSW', "pass");
define('DB_NAME', "mabase");

/* affiche les messages de Deboggage (true) ou pas (false) */
define('DEBUG', true);

/* bonus : une fonction de test pour les couleurs HTML !
afin d'eviter tout problème d'injection SQL ou d'enregistrer
des données érronées (mauvais code couleur par exemple.
*/
function isHTMLColor($color){
// detecte les couleurs de format court #000 à #fff
// et les couleurs format long #000000 à #ffffff
return preg_match('/^#([a-f0-9]{3}){1,2}$/i',$color);
}

/* connection à la base via MySQLi
*/
$DB = new mysqli(DB_HOST, DB_USER, DB_PASSW, DB_NAME);

// si erreur de connection
if($DB->connect_errno)
{
echo "Une erreur du serveur empêche l'enregistrement des couleurs.";

// DEBUG :: on affiche les erreur de connection de la base de données
if(DEBUG) echo '<pre style="border:1px solid #c00">', $DB->connect_errno,' : ', $DB->connect_error,'</pre>';
}
// sinon continuer
else
{
// récupération des couleurs (note les paramètres GET court !)
// car les URL sont limitée en caractères sur de nombreux navigateurs.
$couleur1 = isset($_GET['zc1']) ? $_GET['zc1'] : false;
$couleur2 = isset($_GET['zc2']) ? $_GET['zc2'] : false;
$couleur3 = isset($_GET['zc3']) ? $_GET['zc3'] : false;

/* en une seule condition :
si A et B et C alors ...
*/
if(isHTMLColor($couleur1) && isHTMLColor($couleur2) && isHTMLColor($couleur3)){

/* on utilise toujours sprintf pour remplir les requêtes
et on execute jamais une requête directement à la déclaration
*/
$sql = sprintf("INSERT INTO '%s' VALUES ('%s','%s','%s')",
'UTILISATEURS', $couleur1, $couleur2, $couleur3);

// la requête s'execute avec succés
if($DB->query( $sql ))
{
echo "Couleurs enregistrées.";
}
// sinon baaah .... ça marche pas :(
else
{
echo "Erreur d'enregistrement des couleurs.";

// DEBUG :: on affiche les erreur MySQL qui sont survenues
if(DEBUG) echo '<pre style="border:1px solid #c00">', $DB->errno,' : ', $DB->error,'<br/><i>', $sql,'</i></pre>';
}
}
// si les couleurs ne sont pas définie
else
{
echo "Il n'y a rien à enregistrer.";

// DEBUG :: on dump $_GET pour voir ce que notre form/ajax à envoyé à notre PHP
if(DEBUG){
print('<pre style="border:1px solid #c00">');
print_r($_GET);
print('</pre>');
}
}
}

?>

et voici le message dans la boite d'alerte

Il n'y a rien à enregistrer.
<pre style="border:1px solid #c00">Array
(
[zc1] => rgb(204, 102, 0)
[zc2] => rgb(0, 204, 255)
[zc3] => rgb(204, 102, 255)
)
</pre>

0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
4 mars 2014 à 21:50
je ne veux pas le code de ta requête mais un écho de requête pour que tu puisses la copier coller dans ta base de données et vérifier qu'elle fonctionne. ....

Dis autrement. ..
Que t'affiche un : echo $sql ?
Que donnes l'utilisation en direct dans ta bdd de la requête ainsi obtenue ?
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
4 mars 2014 à 22:11
Vu le message d'erreur que tu as...il semble que ton if ne soit pas vérifié. .
Donc soit tes variables sont vides...soit ce ne sont pas des couleurs... le format testé dans la fonction ishtmlcolor ne correspondant pas a ce que tu lui envoie. ..
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
4 mars 2014 à 23:06
J'ai été dans phpadmin j'ai essayé la requête sql suivante

$sql = sprintf("INSERT INTO '%s' VALUES ('%s','%s','%s')",
'UTILISATEURS', $couleur1, $couleur2, $couleur3);

j'ai un message d'erreur 1064 et avec echo : erreur 1064 avec : echo $sql ? erreur 1064, je ne sais plus quoi faire
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
4 mars 2014 à 23:18
Je jette l'éponge pour ce soir je dois me lever de bonne heure demain
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
Modifié par jordane45 le 5/03/2014 à 01:01
1 - Lorsque je te demande de tester ta requête... ce n'est pas le code qui créé ta requête qu'il faut tester...
// Le code qui va créer ta requête:
$sql = "select * from matable where id='$toto'"; 
 
// Affiche la requête sur ta page web
Echo $sql;


Imaginons que toto soit égal à 10,
la requête qui s'affichera (grace au ECHO) sera alors :
select * from matable where id='10'

C'est cela qu'il faut tester....


2 - Comme je te l'ai indiqué précédement.. ton souci ne vient pas de là de toutes façons (du moins...cette fois...)

Tu as un message "d'erreur" qui est : " Il n'y a rien à enregistrer "
Si tu regardes ton code... ce message apparait dans le ELSE de ton test :
if(isHTMLColor($couleur1) && isHTMLColor($couleur2) && isHTMLColor($couleur3)){

//.......

} 
// si les couleurs ne sont pas définie
  else
  {
    echo "Il n'y a rien à enregistrer.";
    
    // DEBUG :: on dump $_GET pour voir ce que notre form/ajax à envoyé à notre PHP
    if(DEBUG){ 
      print('<pre style="border:1px solid #c00">');
      print_r($_GET);
      print('</pre>');
    }



Cela veut dire que ta condition (ton IF) n'est pas vérifié..

Dans ton IF tu vérifies ( par le biais de la fonction : isHTMLcolor) que tu as des chaines de caractères au format : #xxxxx
// detecte les couleurs de format court #000 à #fff 
  // et les couleurs format long #000000 à #ffffff

Alors que toi tu récupères sous la forme :
[zc1] => rgb(204, 102, 0)
[zc2] => rgb(0, 204, 255)
[zc3] => rgb(204, 102, 255) 


( c'est le problème lorsque l'on recopie sans comprendre du code fourni par quelqu'un d'autre...... )


Dans l'immédiat.. pour t'assurer que ton code fonctionne :
remplace le IF de f0xi par ceci :
 if(isset($couleur1) && isset($couleur2) && isset($couleur3)){
  // le reste du code..


Tu peux aussi remplacer ta variable $sql par l'écriture "simple" de la requête.. le sprintF est inutile (surtout pour des petites requêtes comme celle-ci )

$sql = "INSERT INTO UTILISATEURS  
          (zonecouleur1,zonecouleur2, zonecouleur3)
         VALUES ('$couleur1', '$couleur2', '$couleur3')
          ";
          
/* Avant de l'executer, histoire de voir si la requête est bonne
 Faisons un Echo de celle-ci ( tu pourras supprimer cette partie une fois que ton code fonctionnera correctement)
*/
Echo $sql;



Ne te reste plus qu'à tester....




Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 mars 2014 à 01:08
ha ouai nan mais t'as vraiment un niveau pourri en PHP/SQL !

:) héhéhéé

bon j'explique :

il y a une fonction "isHTMLColor" qui vérifie que les couleurs envoyées sont de format "#000" ou "#000000"

ici, le script nous renvois :
Il n'y a rien à enregistrer.
<pre style="border:1px solid #c00">Array
(
[zc1] => rgb(204, 102, 0)
[zc2] => rgb(0, 204, 255)
[zc3] => rgb(204, 102, 255)
)
</pre>

soit rgb(xxx,xxx,xxx) et non #000 ou #000000

voila ou est le problème ! le format n'est pas le bon. Tu n'a pas du lire les commentaires dans le code :

// detecte les couleurs de format court #000 à #fff
// et les couleurs format long #000000 à #ffffff
return preg_match('/^#([a-f0-9]{3}){1,2}$/i',$color);


tu veux aussi supporter RGBA et RGB ?! ok pas de problème, voici les corrections :

patch de la table UTILISATEURS
#PATCH POUR LA TABLE UTILISATEUR
  ALTER TABLE 'UTILISATEURS' 
  CHANGE 'zonecouleur1' 'zonecouleur1' VARCHAR(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, 
  CHANGE 'zonecouleur2' 'zonecouleur2' VARCHAR(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, 
  CHANGE 'zonecouleur3' 'zonecouleur3' VARCHAR(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;



Remplacement de la fonction isHTMLColor par ValidCSSColor
function ValidCSSColor($color){
  /* 
    detecte les chaines representation de couleurs au format CSS
    format court   #RGB     
    format long    #RRGGBB  
    fonction rgb   rgb(0-255, 0-255, 0-255) avec ou sans espace après les virgules
    fonction rgba  rgba(0-255, 0-255, 0-255, 0.0-1.0) avec ou sans espace après les virgules
    
    sans case sensitive, #ff = #FF, rgb() = RGB()
  */  
  return  preg_match('/^#([a-f0-9]{3}){1,2}$/i',$color) 
        ||
          preg_match('/^rgb\( ?((((\d{1,2})|(1\d{1,2})|(2[0-4]\d{1})|(25[0-5]))), ?){2}'.
                     '(((\d{1,2})|(1\d{1,2})|(2[0-4]\d{1})|(25[0-5]))){1} ?\)$/i', $color) 
        || 
          preg_match('/^rgba\( ?((((\d{1,2})|(1\d{1,2})|(2[0-4]\d{1})|(25[0-5]))), ?){3}'.
                     '((0.\d{0,8})|(1(.0)?)){1} ?\)$/i', $color);
}


un peu plus compliquée la bougresse ;) c'est pourquoi je l'avais pas mise au départ.


patcher les lignes suivantes (le reste du code ne change pas) :
  // récupération des couleurs (note les paramètres GET court !)
  $couleur1 = isset($_GET['zc1']) ? $_GET['zc1'] : false;
  $couleur2 = isset($_GET['zc2']) ? $_GET['zc2'] : false;
  $couleur3 = isset($_GET['zc3']) ? $_GET['zc3'] : false;
  
  if(ValidCSSColor($couleur1) && ValidCSSColor($couleur2) && ValidCSSColor($couleur3))
  {// si les couleurs sont valides 

    /* on utilise toujours sprintf pour remplir les requêtes 
       et on execute jamais une requête directement à la déclaration
    */
    $sql = sprintf("INSERT INTO '%s' VALUES ('%s','%s','%s')",
            'UTILISATEURS', $couleur1, $couleur2, $couleur3);


patcher les lignes suivantes :
<form method="GET" action="">
  <h3>Indiquez trois couleurs type CSS valides</h3>
  <p><label>zone couleur 1</label> <input type="text" name="zc1" maxlength="40" value="#000"/></p>
  <p><label>zone couleur 2</label> <input type="text" name="zc2" maxlength="40" value="#ffffff"/></p>
  <p><label>zone couleur 3</label> <input type="text" name="zc3" maxlength="40" value="rgb(0, 128, 190)"/></p>
  <hr>
  <p><input type="submit" value="Appliquer"/></p>
</form>



0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
5 mars 2014 à 01:16
Toi tu n'as pas lu ma réponse....héhéhé...

Bon en plus tu complexifie le truc avec tes fonctions de vérifications de couleur...
de toutes façons...ses couleurs il les prend directement de la propriété COLOR d'un élément html... donc... c'est censé être...une couleur..

Suite à notre discussion précédente, je pensais que tu aurais limité l'ajout de code ( complexe et inutile ) pour répondre aux "débutants".
* quand je dis inutile.. j'entends par là : qui ne répond pas à la question initiale....

C'est dommage que pour résoudre un souci ( au départ d'un code de 30 lignes (sauts de lignes compris)) d'en être à 17 échanges et un code qui fait désormais 80 lignes....bref manque plus que le code puisse nous faire le café....
Tout ça pour une erreur de "}" et une mauvaise syntaxe sql...

f0xi.. tes réponses sont superbes (propres..avec pleins de fonctionnalités..)... mais pas adaptées aux débutants...et bien au delà ( ... trop ...trop au delà) des réponses attendues....

C'est dommage...
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 mars 2014 à 01:21
au sujet de sprintf :

sprintf permet de formater une chaine contenant des marque de formatage avec des données.

exemple :
$nom = "Marcel";
sprintf("bonjour %s !", $nom)


renverra
"Bonjour Marcel !"

alors bien sur, pourquoi ne pas écrire directement :
"bonjour $nom !"
et oui ! pourquoi ?

parce que comme nous utilisons des "marques de formatage" => %s (pour les chaine) ou %d (pour les nombres) sprintf échouera si la donnée n'est pas du type attendus !

bah c'est nul ça non ? te dis-tu ?
et bah non ! c'est génial ! parce que dans le cas des requêtes SQL, ou l'on doit surveiller le type des données un minimum si je fais :

$nom = 57;
sprintf("bonjour %s !", $nom);


alors sprintf échoue et rien n'est retourné ! parfait !

si, $nom etait un objet (class php ou json ou tableau) sprintf échouerai et évite donc d'afficher ou d'enregistré une donnée qui n'aurait rien à faire dans notre résultat.

sprintf est équivalente a la fonction "format" du C ou du Pascal, et comme je suis sympa, je te renvois à mon tuto sur la fonction format de Delphi qui t'aidera beaucoup à comprendre son fonctionnement (c'est identique à sprintf à quelques détails près) --->
http://codes-sources.commentcamarche.net/faq/301-formatez-vos-chaines-de-caracteres-grace-a-la-fonction-format
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
5 mars 2014 à 01:45
Si c'est à moi que tu présentes sprintf...heu..comment dire.... je connais. ...
Mais là encore. .. tu anticipes un peu (beaucoup) trop les "besoins" du demandeur...

Je ne sais pas si tu connais AGILE..(ou xtrem programming.). on y trouve une phrase très pertinente : small is beatiful ... qui signifie (dans le cas du dev ): rien ne sert de coder plus que nécessaire. ...
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
5 mars 2014 à 10:36
@f0xi : Penses aussi pour ta fonction ValidCSSColor qu'une couleur peut être écrite en TEXTE => green..white..
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
5 mars 2014 à 16:50
Bonjour,

Je tiens à remercier foxi et Jordanne pour leurs lumières dans la sombre nuit de mon niveau carrément nul et pourri en matière de programmation php, sql et accessoirement JavaScript

:)))

En effet, plus ça va, plus, je me rends compte à quel point c'est un métier et une affaire de spécialiste, mais je dirai pour ma défense si toutefois j'avais à me justifier que ces connaissances de code et de langage sont l'affaire d'études au moins supérieures, en tout cas, d'un cursus plus ou moins normal jusqu'en terminal. L'affaire, également, de connaissances en mathématique, mais aussi en physique, en logique, en fonctionnement d'un ordinateur, l'apprentissage d'un vocabulaire, d'une grammaire, donc tout ce qui fait une formation complète, si elle est supérieure c'est une véritable mécanique intellectuelle qui se met en bouillonnement à chaque langage et à chaque problème donné. Je ne rentre pas dans ce cas de figure, et mon seul niveau de compétence s'arrête au HTML et au CSS en ce qui concerne la programmation. Donc problème, quand on aspire à créer un site de blog complètement paramétrable pour l'utilisateur. C'est la raison pour laquelle, je fais appel à de l'aide extérieur et ce n'est pas inutile, soyez en certain.
Car je progresse, néanmoins...

Le code fonctionne parfaitement, j'ai changé le $sql et modifier le sprintf, j'ai changé la fonction validcolorcss et modifier le varchard de ma tavble sql et donc tout s'inscrit dans la base sans problème, je clos donc le fil et merci à nouveau. Dans la vie, sur le net ou ailleurs...

Si vous souhaitez en savoir plus sur mon projet :

http://www.blog-machine.fr/pages/index1.htm
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 344
5 mars 2014 à 17:40
Quel que soit ton niveau .. il ne peut que s'améliorer...
Et chacun a sa propre logique.. sa propre vision de la solution..
La connaissance du langage s'octroie par la pratique ( ça inclue la "grammaire", la logique (propre à chaque langage), la vision (au sens large) de toutes les possibilités permettant de faire tel ou tel traitement...).
Chacun avance à son rythme... et on apprend le plus souvent d'avantage à cause (grâce) aux bugs que grâce à nos codes "parfaits" qui fonctionnent du premier coup...

Quand aux "études".. là je te dirais qu'il y a eu récemment un grand débat à ce sujet ( dans le café des membres)... personnellement je n'ai quasi jamais fait de dev dans mon cursus scolaire ( par contre.. réparer un magnétoscope.. ça.. je sais (savais..) faire ^^ ).


Par contre il y a un point essentiel : C'est là rigueur.. être carré dans le code que l'on écrit.. chercher à comprendre le code que l'on trouve à droite à gauche et pas juste le recopier...
Et enfin..et même surtout.. Réfléchir à la conception AVANT de commencer à coder..


Et j'en profite pour t'en remettre une couche :...
1 - Lorsque tu as un message d'erreur : Tu dois l'indiquer (dans son "entièreté" ) dans ton message.

2 - Essayes de debuguer tes programmes en y ajoutant des ECHO / PRINT_R .. pour te rendre compte des variables / Requêtes que tu créés et t'assurer que cela correspond à ce que tu devrais avoir.

3 - Apprends à tester tes requêtes directement dans ta BDD

4 - Pour tout ce qui est lié au Javascript / Ajax ... Installe toi le plugin FireBug ( pour fireFox ).. et lis sa documentation. Tu verras c'est un bon outil pour débuguer ses scripts..

Voilou.. y'a plus qu'à continuer ton dev ^^
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
5 mars 2014 à 19:11
merci Jordanne pour tes conseils et tu sais moi j'étais bon en histoire en géographie et en exposé donc... :-) et effectivement je m'y remets car ce n'est pas fini
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 mars 2014 à 00:09
@jordane45 :
non bien sur ce n'etait pas pour toi le petit résumé sur sprintf/format, petit lag entre les deux postage :)

En effet, plus c'est court et efficace mieux c'est, mais ... l'écriture académique du code et les contrôles adéquats permette de montrer ce qui est possible d'atteindre. Personnellement, je suis plus un adepte du "qui peut le plus, peut le moins" ... mais les deux concept s'accordent et se complète c'est plus que certain !

ce qui permet de conclure sur le "ni trop, ni trop peu".

bien sur, du programmeur amateur programmant en solo chez lui et faisant parfois l'impasse sur "la bonne et due forme" parce ouai pfff 4H du mat quoi ça marche on refactera plus tard ... et les groupes de travail ou sans structure générale et sans écriture normalisée ce serai vite le gros bouzins ... il faut trouver le juste équilibre. Mais tant qu'a faire, autant prendre la bonne marche de suite.

@Blog :
on a tous débuté un jour, jordan, moi, la plus part des gens ici sont autodidactes, comme quoi rien n'est impossible à qui veut.

tu vas galérer, oui, tu vas douter, beaucoup, tu vas souvent baisser les bras ou mettre de coté, certes, mais il faut persévérer, car notre niveau n'est pas inaccessible.

Personnellement, je passe plus de temps à lire les références de langages qu'à programmer, et souvent, on passe vite "une heure" sur un petit truc qu'on a pas tout à fait maitrisé ou compris correctement.

en sachant qu'au seins de mon entreprise je programme avec ces langages :
html
css
php (+api fpdf)
SQL pour mysql et oracle (base, table, fonctions, trigger, la totale)
javascript dont jQuery (+jgrowl, jtiptip et googlechart)
delphi 2009 (CGI/SOAP)
les scripts pour imprimantes EPL
et bien sur tout ce qui est config apache/php fichier htaccess etc.

le tout utilisé pour créer divers outils de traitement de flux de données, backoffice dédié, bridges flux partenaires etc.

alors qu'a la base, j'ai fait une courte formation html/php/mysql en 2003. Tout le reste, apris sur le tas.

si cela peut t'inspirer.
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
6 mars 2014 à 18:16
C'est marrant les académismes, bien sûr c'est inévitable, mais je suis pourtant séduit par le small is beautifull de Jordanne, un relan minimaliste et répétitif que j'apprécie aussi musicalement en classique et electro mais c'est un autre sujet...

C'est amusant les parcours mais quand on baigne professionnellement dans ce jus de code et de langage et que l'on échange avec des collègues, forcement on apprends plus vite.

En fait, je n'ai pas beaucoup eu l'occasion d'échanger dans ce domaine, toutefois j'ai connu MS Dos en 88 et depuis un ordinateur m'a toujours accompagné mais peu dans ses langages de programmation tel que le basic. Je n'avais pas la documentation ni le niveau, je me suis, donc, retranché vers les logiciels avec qu'une idée en tête : produire du contenu.

Puis en 1995 j'ai appris html 3.02 dans une entreprise avec un job plus ou moins d'intégrateur, Internet existait sous sa forme commerciale en France depuis à peine 2 ans. C'était le début, simple performant et la magie du net a opéré. Par la suite j'ai un peu décroché de tout ça, la vie quoi... Et puis heureusement en 2006, tout recommençait et depuis c'est quasiment une mise à jour quotidienne sur l'un de mes sites :

http://www.terminal-media.fr

Ce n'est pas le Pérou mais ça fonctionne et c'est propre (et small).

Maintenant, je m'oriente vers un blog paramétrable mais c'est surtout l'occasion de me donner des moyens supplémentaires et d'évoluer vers des formes de sites plus dynamiques et plus interactifs.

Autant, je suis arrivé au plafond de mes besoins avec html5 et css3 mais désormais j'arrive vers autre chose dont je ne vois pas la limite actuellement tant les applicatifs sont riches et variés.

Alors c'est vrai que cela va être encore beaucoup d'heures à se gratter la tête quand cela ne fonctionne pas mais j'estime que ça en vaut a chandelle et je suis cruellement jaloux de votre niveau en connaissant maintenant les possibilités qui s'offre à vous

et puis pour finir

1) C'est un défi intellectuelle qui est jubilatoire quand on obtient un résultat satisfaisant

2) C'est infiniment ludique comme un vaste jeu de lego ou de méccano

0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 mars 2014 à 01:39
amusant, j'ai à peu près le même parcours que toi, sauf que j'ai dévié à l'époque sur le Pascal, j'ai touché un peu à la scène Demo, devenus un fou de Delphi jusqu'en 2009-2010 et devenus accro au PHP/Javascript en 2012 (donc à peine 1 an pour bien maitriser PHP/MySQL/Ajax)

continus, tu y arrivera !
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
7 mars 2014 à 18:20
J'ai continué mais je suis confronté à des problèmes qui me paraissent insurmontables. Parce que sur le papier c'est bien c'est beau mais dans les faits, une catastrophe, mais si tu veux participer à mon projet tu es le bienvenue, j'ai peur d'être trop ambitieux avec ce truc
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
Modifié par f0xi le 8/03/2014 à 04:15
nooon, rien n'est insurmontable, il suffit d'y aller pas à pas.

déjà, je pense que tu essaye de trop faire de chose en même temps:
ajax + php + sql

ça fait beaucoup à ingurgiter. expérimente un à un :

html + ajax
puis
php seul
puis
sql (dans phpmyadmin pour apprendre les requetes de bases)
puis
php avec sql
et enfin
ajax qui appel php + sql.

quand tu maitrisera les erreurs de chacun, tu saura identifier plus facilement les erreurs liées à l'utilisation des trois en même temps.

après, oui pas de soucis, je veux bien aider de temps en temps quand tu aura des demandes.

ce qu'il te faut pour commencer c'est :
jQuery 1.11, Php 5, MySQL et un navigateur comme chrome ou firefox (préférence pour firefox car chrome peu parfois être ronchon du cache avec les serveurs locaux)

s'entrainer sur $.ajax (jquery) voir référence get, post, success, error, done.

s'entrainer sur PHP voir référence echo, print, print_r, vardump, sprintf, mysqli (en mode objet), simplexml, require_once, include_once, include, require, array, get_file_content, put_file_content, addslashes, hash, md5, define, defined, et après class, static, public, private, __construct, __destruct, __get, __set...

s'entrainer sur MySQL (via phpmyadmin) SELECT, INSERT, UPDATE, DELETE, SELECT avec jointure (LEFT JOIN, INNER JOIN, USING, ON)

le reste suivra de lui même avec serialize (jquery), pleins de truc avec php et les DUPLICATE KEY, TRIGGER, FUNCTION de mysql.

quelques conseils :

toujours coder en UTF-8 sans BOM, utiliser des base en utf8_general_ci, toujours un id d'element dans la structure des tables (table_utilisateurs.id_utilisateur, table_droits.id_droit, table_articles.id_articles, table_articles_lang.id_article/id_lang, table_lang.id_lang), toujours identifier en minuscule avec underscore (table_utilisateur, $table_utilisateur, var table_utilisateur, $("#table_utilisateur") .table_utilisateur etc.
réserver les majuscules pour les constantes (valeurs par défaut, con
stantes etc : DB_HOST, ZERO, TAG...)

et ... apprendre à ne plus utiliser <table> en HTML :)



voila un exemple de ce que j'utilise comme structure pour mes modules :

<script src="js/class/users.class.js"></script>
</head>
<body>

  <div id="user_result"></div>

  <div id="user_form_content">
  <form id="user_form">
    <div id="user_add_msg"></div>
    <input type="hidden" name="adduser" value="1"/>
    <p><input type="text" maxlength="16" name="username" value="" placeholder="Nom de l'utilisateur"/></p>
    <p><input type="password" maxlength="32" name="password" value="" placeholder="Mot de passe"/></p>
    <p><input type="password" maxlength="32" name="passcheck" value="" placeholder="Confirmation"/></p>
    <p><input type="button" id="btn_user_form_add" value="Ajouter l'utilisateur"/></p>
  </form>
  </div>

  <content style="display:none;width:0;height:0;">
    <div id="msg_user_list_fail">
      <p class="msg warning">Pas d'utilisateurs dans la base.</p>
    </div>
    <div id="msg_user_list_error">
      <p class="msg error">Une erreur s'est produite dans l'appel des données demandées.</p>
    </div>

    <div id="msg_user_add_success">
      <p class="msg success">Utilisateur ajouté.</p>
    </div>
    <div id="msg_user_add_fail">
      <p class="msg warning">Echec de l'enregistrement de l'utilisateur</p>
    </div>
    <div id="msg_user_add_error">
      <p class="msg error">Une erreur s'est produite dans l'appel des données demandées.</p>
    </div>
  </content>


/* users.class.js */
var Users = {
  list : function(){
    $.ajax({
      type:"GET",
      url:"actions/users.php",
      success:function(result)
      {
        if(result == '0') 
        {
          $('#users_result').html( $('#msg_user_list_fail').html() );
        }
        else
        {
          $('#users_result').html(result);
        }        
      },
      error:function()
      {
        $('#users_result').html( $('#msg_user_list_error').html() );
      }
    });
  },
  add : function(){
    $.ajax({
      type:"POST",
      url:"actions/users.php",
      data:$('#user_form').serialize(),
      success:function(result)
      {
        if(result == '1')
        {
          $('#user_add_msg').html( $('#msg_user_add_success').html() );
          Users.list();
        }
        else if(result == '0')
        {
          $('#user_add_msg').html( $('#msg_user_add_fail').html() );
        }
        else 
        {
          $('#user_add_msg').html( $('#msg_user_add_error').html() );
        }
      },
      error:function()
      {
        $('#user_add_msg').html( $('#msg_user_add_error').html() );
      }
    });
  }
}

$(document).ready(function(){
  $('#btn_user_form_add').on('click', function(){
    Users.add();
  });
  Users.list();
});


<?php
/* actions/users.php */

  require_once("../config/settings.inc.php");
  require_once("../class/database.class.php");
  require_once("../class/tools.class.php");
  require_once("../class/users.class.php");
  
if(Tools::PostCheck('adduser', 'username', 'password'))
{
  if(Tools::PostValue('password') !== Tools::PostValue('passcheck'))
  {
    exit(string '0');
  }
  
  $sql = sprintf("
    INSERT INTO bm_users VALUES(NULL, '%s','%s','%s')
  ", 
    Tools::PostValue('username', vlESCAPE),
    Tools::PostValue('password', vlCRYPTED128),
    Tools::PostValue('passcheck', vlHASH)
  );
  
  if($DB->query($sql))
  {
    exit(string '1');
  }
  else
  {
    exit(string '0');
  }
}
else
{
  $sql = "SELECT id_user, username FROM bm_users";
  
  if($result = $DB->query($sql))
  {
    echo '<ul id="userlist">';
    while($row = $result->fetch_assoc)
    {
      echo  '<li id="user_', $row['id_user'], '">',
              '<span>', Tools::Unescape( $row['username'] ), '</span>',
            '</li>';
    }
    echo '</ul>';
    $result->free();
  }
  else
  {
    exit(string '0');
  }
}
?>
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
9 mars 2014 à 17:30
Merci pour tes conseils et notamment le <table> c'est vrai que pour un puriste ça fait dresser les cheveux sur la tête, c'est un héritage de html sans css et c'est il faut bien l'avouer, un peu facile mais pratique.

Pour le reste évidement je vais m'y pencher sérieusement mais cela n'a rien d'évident, bien au contraire. Mais je voudrais être certain d'une chose. Est ce que je prends le bon chemin pour arriver à mes fins. Voici mon problème :

J'ai mes modules JavaScript qui opère sur le css et qui change des attribut, text-align: justify, center,... ect, des boites de sélections avec des tailles de polices, des polices embarqués, enfin bref un certain nombre de valeurs que je veux enregistrer dans un fichier pour que mon utilisateur les retrouve dans une session sans construction de document. Dois-je mieux utiliser XMLHttpRequest et php en get pour récupérer mes valeurs ou plutôt passer par le Dom avec php et sauver mon document avec des noeuds ? Quelle est la meilleure des démarches à suivre, XHR ou le Dom ? Ou existe t-il une autre alternative
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
10 mars 2014 à 17:19
J'ai fait l'acquisition d'un livre sur jquery, c'est génial quelle réduction de prise de tête...
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
12 mars 2014 à 01:23
:) et oui c'est bien certain !

pas la peine de reflechir entre :
document.getElementById('monelement').style.display = 'none';
et
$('#monelement').hide();

gain de temps, gain de poids quand on utilise beaucoup de javascript, ajax simplifié, animation, dynamisation ... que du bonheur.
et avec jQuery UI ... encore plus de rapidité.
0
Rejoignez-nous