PHP|Débutant :: Forums

Advertisement

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

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

#1 11-06-2012 06:18:25

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Questions et problèmes sur MYSQL

Bonjour à tous,

J'ai commencer à apprendre le php il y a seulement 3 mois donc j'ai pas mal de questions dont je trouve pas forcement les réponses sur le net.

- J'utilise le datepicker de Jquery(ainsi que le dateTimePicker) pour toutes les dates de mon site et ils fonctionnent très bien, mais c'est au niveau de l'enregistrement de ça déconne un peu. J'utilise ceci pour enregistrer mes dates dans ma table mais dès que je veux les lire dans un php avec un formulaire de visu j'ai pas mal d'erreurs:

//Déclaration des Dates + Regex qui permet d'inverser l'année avec le jour pour un enregistrement correct dans mysql
  if(isset($_POST['date_appel'])) $date_appel = $_POST['date_appel'];
  $Newdate_appel = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_appel);

 

Apparemment le ereg_replace de devrait plus être utiliser d'après un livre que j'ai lu, est-ce qu'il y aurait un autre moyen? Surtout que sur certain ereg j'ai une erreur de ce type la: Deprecated: Function ereg_replace() is deprecated in......

- J'utilise l'UTF8 dans tout mon site et ma bdd est aussi en utf8 general CI, mais certain tableaux qui me servent à lire le contenu des tables me même des symboles bizarre sur tout ce qui contient des accents. J'utilise cette commande la pour le post:

// Verif de l'existance de $_POST['xxx']
  if (isset($_POST[''])){
    //Déclaration des variables pour les fieldsets de base pour la table "appels"
    $_POST['num_appelant'];
    $_POST['heure_appel'];

Dois-je utiliser des commande du style TRIM etc..?

Voila le code complet de ma page de traitement:

<?php
// Connexion à la base de donnée pour WAMP
$host = "localhost";
$user = "root";
$passwd = "";
$database = "gestspie";
$link = @mysql_connect($host, $user,$passwd);

// Affichage de l'erreur en cas d'erreur de connexion à la bdd
if(!$link){die('Erreur de connexion au serveur');}
$select_db = @mysql_select_db($database);
if(!$select_db){die('Erreur de connexion à la base');}

// Déclaration des variables
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Enregistrement reussi";
$message = $msg_erreur;

// Enregistrement des champs non remplis
// Utilisation la fonction PHP empty() qui retourne:
//  -> "vrai" si la variable passée en paramètre est vide
//  -> "faux" dans le cas contraire.
if (empty($_POST['num_appelant']))$message .= "Le numéro de l'appelant";

// Si le contenu de la variable $message et plus grand que celui de la variable $msg_erreur,
// c'est que nous venons d'ajouter des champs non remplis donc on affiche un message d'erreur
if (strlen($message) > strlen($msg_erreur)) {echo $message;}

// Si les champs sont bien remplis, on peut insérer leurs valeurs dans la base de données MySQL.
// Utilisation de mysql_real_escape_string() qui protège les données avant insertion et notamment
// les apostrophes, guillemets, etc... pour protéger des attaques par injection SQL.
// La boucle foreach() va passer toutes la variables $_POST envoyées par le formulaire en revue.
// Pour chacune d'elle nous allons créer une variable spécifique avec $$index, nettoyer sa valeur avec trim()
// (en enlevant notamment les espaces de fin) et sécuriser sa valeur avec mysql_real_escape_string().
else{
  foreach($_POST as $index => $valeur){
        $valeur = mysql_real_escape_string(trim($valeur));
}
  //Déclaration des Dates + Regex qui permet d'inverser l'année avec le jour pour un enregistrement correct dans mysql
  if(isset($_POST['date_appel'])) $date_appel = $_POST['date_appel'];
  $Newdate_appel = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_appel);
  if(isset($_POST['debut_inter'])) $debut_inter = $_POST['debut_inter'];
  $Newdebut_inter = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $debut_inter);
  if(isset($_POST['debut_impo_acces'])) $debut_impo_acces = $_POST['debut_impo_acces'];
  $Newdebut_impo_acces = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $debut_impo_acces);
  if(isset($_POST['fin_impo_acces'])) $fin_impo_acces = $_POST['fin_impo_acces'];
  $Newfin_impo_acces = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $fin_impo_acces);
  if(isset($_POST['fin_inter'])) $fin_inter = $_POST['fin_inter'];
  $Newfin_inter = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $fin_inter);
  if(isset($_POST['date_devis'])) $date_devis = $_POST['date_devis'];
  $Newdate_devis = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_devis);
  if(isset($_POST['date_emission'])) $date_emission = $_POST['date_emission'];
  $Newdate_emission = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_emission);
  if(isset($_POST['date_commande'])) $date_commande = $_POST['date_commande'];
  $Newdate_commande = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_commande);
  if(isset($_POST['maj_plans'])) $maj_plans = $_POST['maj_plans'];
  $Newmaj_plans = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $maj_plans);
  if(isset($_POST['date_emission'])) $date_emission = $_POST['date_emission'];
  $Newdate_emission = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_emission);
  if(isset($_POST['delais_livraison'])) $delais_livraison = $_POST['delais_livraison'];
  $Newdelais_livraison = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $delais_livraison);
  if(isset($_POST['date_reception'])) $date_reception = $_POST['date_reception'];
  $Newdate_reception = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $date_reception);
  if(isset($_POST['fin_travaux'])) $fin_travaux = $_POST['fin_travaux'];
  $Newfin_travaux = ereg_replace('^([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})$', '\\3-\\2-\\1', $fin_travaux);
 
  // Verif de l'existance de $_POST['xxx']
  if (isset($_POST[''])){
    //Déclaration des variables pour les fieldsets de base pour la table "appels"
    $_POST['num_appelant'];
    $_POST['heure_appel'];
    $_POST['num_appelant'];
    $_POST['heure_appel'];
    $_POST['media'];
    $_POST['nom_demandeur'];
    $_POST['batiment'];
    $_POST['systeme'];
    $_POST['service'];
    $_POST['local'];
    $_POST['type_inter'];
    $_POST['tps_inter_souhaite'];
    $_POST['objet_appel'];
    $_POST['objet'];
   
    //Déclaration des variables pour les autres fieldsets
    //On ne reprend pas les variables appels car déjà créer au-dessus
    $_POST['ensemble'];
    $_POST['element'];
    $_POST['sous_element'];
    $_POST['surete'];
    $_POST['tps_acces_signature'];
    $_POST['intervenant1'];
    $_POST['intervenant2'];
    $_POST['intervenant_autre'];
    $_POST['entreprise'];
    $_POST['prestation_effectuee'];
    $_POST['num_fim'];
    $_POST['type_inter_correctif'];
    $_POST['dysfonctionnement'];
    $_POST['parametre_bf'];
    $_POST['consignes_inter'];
    $_POST['type_operation'];
    $_POST['num_demande'];
    $_POST['devis_demandeur'];
    $_POST['devis_batiment'];
    $_POST['num_devis'];
    $_POST['montant_devis'];
    $_POST['devis_libelle'];
    $_POST['montant_valide'];
    $_POST['num_imputation'];
    $_POST['num_commande'];
    $_POST['annule'];
  }
  // Insérer les données dans la table "appels" avec une requête sql de type "INSERT" et la fonction mysql_query().
  // Vérification que la requête s'est bien effectuée avec la valeur de retour $res
  // Si c'est le cas, on affiche $msg_ok, sinon on affiche l'erreur qui a eu lieu dans MySQL
  // Le premier "" dans values correspont dans la table à l'ID qui est automatiquement incrémenté
  $sql="INSERT INTO appels(id, num_appelant, date_appel, heure_appel, media, nom_demandeur, batiment, systeme, service, local, type_inter, tps_inter_souhaite, objet_appel, commentaires)
  VALUES ('','"
.$_POST['num_appelant']."','$Newdate_appel','".$_POST['heure_appel']."','".$_POST['media']."','".$_POST['nom_demandeur']."','".$_POST['batiment']."','".$_POST['systeme']."','".$_POST['service']."','".$_POST['local']."','".$_POST['type_inter']."','".$_POST['tps_inter_souhaite']."', '".$_POST['objet_appel']."', '".$_POST['objet']."')";
 
  //On enregistre les champs des fieldsets correspondant au choix 1 : Fieldset correctif
  if($_POST["type_inter"] == '1'){
    $sql1="INSERT INTO correctif(id, id_appel, num_fim, date_appel, heure_appel, nom_demandeur, service, batiment, local, type_inter_correctif, systeme, ensemble, element, sous_element, surete, debut_inter, tps_acces_signature, debut_impo_acces, fin_impo_acces, fin_inter, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, dysfonctionnement, parametre_bf, consignes_inter, commentaires)
    VALUES ('','"
.$_POST['id_appel']."', '".$_POST['num_fim']."', '$Newdate_appel', '".$_POST['heure_appel']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '".$_POST['type_inter_correctif']."', '".$_POST['systeme']."', '".$_POST['ensemble']."', '".$_POST['element']."', '".$_POST['sous_element']."', '".$_POST['surete']."', '$Newdebut_inter', '".$_POST['tps_acces_signature']."', '$Newdebut_impo_acces', '$Newfin_impo_acces', '$Newfin_inter', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."', '".$_POST['intervenant_autre']."', '".$_POST['dysfonctionnement']."', '".$_POST['parametre_bf']."', '".$_POST['consignes_inter']."', '".$_POST['objet']."')";
  }
  //On enregistre les champs des fieldsets correspondant au choix 2 : Fieldset exploitation
  else if($_POST["type_inter"] == '2'){
    $sql1="INSERT INTO exploitation(id, id_appel, date_appel, heure_appel, type_exploitation, nom_demandeur, service, batiment, local, date_debut_inter, tps_acces_signature, debut_impo_acces, fin_impo_acces, fin_inter, tps_inter_souhaite, intervenant1, intervenant2, intervenant_autre, type_operation, objet, prestation_effectuee)
    VALUES ('','"
.$_POST['id_appel']."', '$Newdate_appel', '".$_POST['heure_appel']."', '".$_POST['type_exploitation']."', '".$_POST['nom_demandeur']."', '".$_POST['service']."', '".$_POST['batiment']."', '".$_POST['local']."', '$Newdebut_inter', '".$_POST['tps_acces_signature']."', '$Newdebut_impo_acces', '$Newfin_impo_acces', '$Newfin_inter', '".$_POST['tps_inter_souhaite']."', '".$_POST['intervenant1']."', '".$_POST['intervenant2']."','".$_POST['intervenant_autre']."', '".$_POST['type_operation']."', '".$_POST['objet']."', '".$_POST['prestation_effectuee']."')";
  }
  //On enregistre les champs des fieldsets correspondant au choix 3 : Fieldset devis
  else if($_POST["type_inter"] == '3'){
    $sql1="INSERT INTO devis(id, num_demande, datedevis, demandeur, batiment, date_emission, num_devis, montant_devis, libelle, montant_valide, date_commande, num_commande, num_imputation, delais_livraison, fin_travaux, maj_plans, date_reception, annule)
    VALUES ('', '"
.$_POST['num_demande']."', '$Newdate_devis', '".$_POST['devis_demandeur']."', '".$_POST['devis_batiment']."', '$Newdate_emission', '".$_POST['num_devis']."', '".$_POST['montant_devis']."', '".$_POST['devis_libelle']."', '".$_POST['montant_valide']."', '$Newdate_commande', '".$_POST['num_commande']."', '".$_POST['num_imputation']."', '$Newdelais_livraison', '$Newfin_travaux', '$Newmaj_plans', '$Newdate_reception', '".$_POST['annule']."')";
  }
 
  $res=mysql_query($sql);
  $res1=mysql_query($sql1);
  if($res && $res1) {
    echo $msg_ok;
    // Redirection vers la page appels_tableau
    header('Location: ../formulaires_tableau/gest_demande_tableau.php');
  } else {
    echo mysql_error();
  }
}
?>

Merci d'avance pour votre aide

Maxredphenix

Hors ligne

#2 11-06-2012 08:30:45

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Questions et problèmes sur MYSQL

Saluton,
Peut-on savoir d'où sort ce script ?
Je suis médusé, notamment, par la partie censée initialiser le tableau global $_POST (lignes 68 à 113).


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 11-06-2012 10:15:14

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Bonjour,

Il faut remplacer le ereg_replace par un preg_replace. "deprecated" signifie que la fonction n'est plus maintenue, et qu'elle est obsolète.
Passer par une fonction check_date(inputdate) serait plus approprié dans les lignes 39 à 65.
Comme a demandé MK, merci de nous donner une réponse. De plus et pour information le foreach avec $_POST ne sert strictement à rien dans ce contexte si ce n'est alourdir et rendre éventuellement instable votre code.

Le plus grave à mon sens, et que vous devriez modifier rapidement, c'est que votre code d'insertion annule tous les efforts et rend inutile votre démarche faite avec votre ereg_replace. D'où le problème d'insertion que vous avez...

Cordialement,

Jc.

EDIT: Votre pattern dans votre ereg_replace n'est de plus pas compatible avec le format de date standard de MySQL.

Dernière modification par Jc (11-06-2012 10:29:47)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#4 11-06-2012 11:53:48

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Merci à tous les deux pour vos réponses,

Le script vient de moi, il y a juste la partie concernant les elseif qui m'a été donnée dans un forum parce que j'avais créer un autre type de script et cela causait des problèmes. Pourquoi savoir l'origine? c'est si horrible que ça?

Pour la fonction preg_replace c'est bien ce qu'il me semblait vu ce que j'avais lu dans un des livres que j'ai acheter sur php 5.4 mais bon je voulais quand même l'avais d'utilisateurs expérimentés. Pour le checkdate je vais regarder sur le net parce que je connaissais pas du toutt, merci.

Le foreach va être supprimer dès ce soir, mais je pensais à l'origine qu'il fallait créer une boucle pour l'insertion c'est pour cela que je l'ai mis à la base.

Je n'ai pas accès à mon pc, je regarde dès que j'arrive ce soir.

Je vous tiens au courant.

Encore merci

Hors ligne

#5 11-06-2012 12:00:46

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Questions et problèmes sur MYSQL

maxredphenix a écrit :

Pourquoi savoir l'origine? c'est si horrible que ça?

Parce que si la condition de la ligne 68

if (isset($_POST['']))

se trouvait remplie (ce qui ne peut évidemment jamais avoir lieu heureusement) tu lirais ceci

Notice: Undefined index: num_appelant in C:\wamp\www\phpdeb\post.php on line 5

Notice: Undefined index: heure_appel in C:\wamp\www\phpdeb\post.php on line 6

Notice: Undefined index: num_appelant in C:\wamp\www\phpdeb\post.php on line 7

Notice: Undefined index: heure_appel in C:\wamp\www\phpdeb\post.php on line 8

Notice: Undefined index: media in C:\wamp\www\phpdeb\post.php on line 9

Notice: Undefined index: nom_demandeur in C:\wamp\www\phpdeb\post.php on line 10

Notice: Undefined index: batiment in C:\wamp\www\phpdeb\post.php on line 11

Notice: Undefined index: systeme in C:\wamp\www\phpdeb\post.php on line 12

Notice: Undefined index: service in C:\wamp\www\phpdeb\post.php on line 13

Notice: Undefined index: local in C:\wamp\www\phpdeb\post.php on line 14

Notice: Undefined index: type_inter in C:\wamp\www\phpdeb\post.php on line 15

Notice: Undefined index: tps_inter_souhaite in C:\wamp\www\phpdeb\post.php on line 16

Notice: Undefined index: objet_appel in C:\wamp\www\phpdeb\post.php on line 17

Notice: Undefined index: objet in C:\wamp\www\phpdeb\post.php on line 18

Notice: Undefined index: ensemble in C:\wamp\www\phpdeb\post.php on line 22

Notice: Undefined index: element in C:\wamp\www\phpdeb\post.php on line 23

Notice: Undefined index: sous_element in C:\wamp\www\phpdeb\post.php on line 24

Notice: Undefined index: surete in C:\wamp\www\phpdeb\post.php on line 25

Notice: Undefined index: tps_acces_signature in C:\wamp\www\phpdeb\post.php on line 26

Notice: Undefined index: intervenant1 in C:\wamp\www\phpdeb\post.php on line 27

Notice: Undefined index: intervenant2 in C:\wamp\www\phpdeb\post.php on line 28

Notice: Undefined index: intervenant_autre in C:\wamp\www\phpdeb\post.php on line 29

Notice: Undefined index: entreprise in C:\wamp\www\phpdeb\post.php on line 30

Notice: Undefined index: prestation_effectuee in C:\wamp\www\phpdeb\post.php on line 31

Notice: Undefined index: num_fim in C:\wamp\www\phpdeb\post.php on line 32

Notice: Undefined index: type_inter_correctif in C:\wamp\www\phpdeb\post.php on line 33

Notice: Undefined index: dysfonctionnement in C:\wamp\www\phpdeb\post.php on line 34

Notice: Undefined index: parametre_bf in C:\wamp\www\phpdeb\post.php on line 35

Notice: Undefined index: consignes_inter in C:\wamp\www\phpdeb\post.php on line 36

Notice: Undefined index: type_operation in C:\wamp\www\phpdeb\post.php on line 37

Notice: Undefined index: num_demande in C:\wamp\www\phpdeb\post.php on line 38

Notice: Undefined index: devis_demandeur in C:\wamp\www\phpdeb\post.php on line 39

Notice: Undefined index: devis_batiment in C:\wamp\www\phpdeb\post.php on line 40

Notice: Undefined index: num_devis in C:\wamp\www\phpdeb\post.php on line 41

Notice: Undefined index: montant_devis in C:\wamp\www\phpdeb\post.php on line 42

Notice: Undefined index: devis_libelle in C:\wamp\www\phpdeb\post.php on line 43

Notice: Undefined index: montant_valide in C:\wamp\www\phpdeb\post.php on line 44

Notice: Undefined index: num_imputation in C:\wamp\www\phpdeb\post.php on line 45

Notice: Undefined index: num_commande in C:\wamp\www\phpdeb\post.php on line 46

Notice: Undefined index: annule in C:\wamp\www\phpdeb\post.php on line 47


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 11-06-2012 12:55:53

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

exacte, j'avais même pas fait attention que j'avais laissé ce champ vide. Tu me conseilles de me quelque chose du style num_appelant vu qu'il est censé être non vide d'après la condition

if (empty($_POST['num_appelant']))$message .= "Le numéro de l'appelant";

Sinon pour le preg_replace il s'utilise bien comme ceci?:
$date = preg_replace('<^([0-9]{2})/([0-9]{2})/([0-9]{4})$>' , '\\3-\\2-\\1', $date);

Mais est-ce qu'il est vraiment nécessaire de faire un enregistrement en format anglais pour mysql?  si je configure un champs en varchar, est-ce que la date va s'enregistrer en format 01-01-2012 sans souci et surtout est-ce que je pourrais réutiliser mes dates enregistré dans un varchar pour
faire du traitement du style date1-date2=xx heures

Sinon juste comme ça est-ce que le script (mis à part le foreach et les dates) est correct? à l'heure actuelle il fonctionne mais je sais pas si ce code est "propre", j'en suis à mon 3eme livres sur le php et divers cours tels site du zero et j'avais j'ai vu un script entier et détaillé en disant il faut ceci et cela dans tel ordre donc j'ai fais ce que j'ai pu, ça fonctionne mais c'est peut être pas terrible pour des gens qui ont l'habitude de coder.

Encore merci pour ta réponse très rapide

Hors ligne

#7 11-06-2012 13:17:51

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Pour la fonction checkdate() ne regarde par sur le net tu ne la trouveras pas.^^
Voici un exemple de ce que je voulais dire


function check_date(mydate){ return preg_match(pattern,string);} // afin de contrôler que le format de date passé dans le POST soit correct et evite les problèmes d'injection.
function calc_date(mydate) {return str_replace(....);} // fonction qui transforme la date du format d'affichage utilisateur dans le format utilisé par mySQL
// Ensuite le traitement des variables se feraient sous la forme suivante
if (isset($_POST['date1'])){if (check_date($_POST['date1'])){$newDate=calc_date($_POST['date1']);}else{$newDate="";}}else{$newDate="";}
// et ainsi de suite pour chaque ligne.
 

Ensuite, les dates doivent être gérées au niveau de MySQL dans leur format standard c'est à dire "0000-00-00 00:00:00" > année-mois-jour heure:minutes:secondes. Il faut les enregistrer dans ce format là, pas un autre.

++

Dernière modification par Jc (11-06-2012 13:34:32)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#8 11-06-2012 21:36:25

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Merci pour ta réponse, c'est vrai que j'ai pas trouvé et j'ai vu ton message qu'après 30min passé sur google à chercher checkdate....dommage mais ça m'a permis de découvrir d'autres choses donc c'est pas grave.

Si j'ai bien compris, la première phrase compare le pattern à string pour vérifier que la date est dans un format correct, donc ceci pourrait aller non?:

$format_date= '#^¨([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})$#';
function check_date(mydate){ return preg_match($date1,$format_date);}

Ensuite pour la 2eme phrase le str_replace:

function calc_date(mydate) {return str_replace('<^([0-9]{2})/([0-9]{2})/([0-9]{4})$>' , '\\3-\\2-\\1', $date1);}

Mais pourquoi un str_replace au lieu du preg_replace?

Pour la troisième ligne:

if (isset($_POST['date1'])){
  if (check_date($_POST['date1'])){
    $newDate=calc_date($_POST['date1']);
  }
  else{
    $newDate="";
  }
}
else{
  $newDate="";
}

Pourquoi tu mets $newDate=""; si je comprends bien le champs sera vide du coups?

Tant pis pour le format mysql, c'est juste qu'il faut du coup que je fasse l'opération inverse dans chaque page de visualisation.

Jusque comme ça sans trop être trop embêtant, j'aurai une autre question:

j'ai des select coder de de ce style là:

<?php
  echo '<SELECT NAME="type_element" ID="type_element">';
  mysql_query("SET NAMES UTF8");
  require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
  $reponse = mysql_query("SELECT type_element FROM element ORDER BY type_element") or die(mysql_error);
  echo">SELECT NAME='type_element' onchange='FocusObjet()'>";
  while ($result = mysql_fetch_array($reponse)){
    echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
  }
  echo "</select>";
?>

Ils me servent à récuperer des valeurs dans ma bdd afin de remplir plus facilement mes formulaires et éviter des erreurs de frappe. Par contre si je veux avoir un formulaire de visualisation qui m'affiche automatiquement toutes les valeurs la table correspondnat à l'ID n°1 par exemple, comment puis faire pour avoir la valeur "type_element" enregistrer dans ma table et en même temps avoir le même principe de select afin de pouvoir le changer s'il l'utilisateur le décide.
J'ai tenter de modifier la première ligne avec un :

echo '<SELECT NAME="type_element" ID="type_element" value="<?php echo $datas['type_element'];?>">';

ou

echo '<SELECT NAME="type_element" ID="type_element" value="echo $datas['type_element'];">';

mais rien (à part des erreurs) et je trouve pas d'exemple sur le net....

De plus j'aimerai créer deux boutons me servant à faire enregistrement suivant et précédent. est-ce que c'est possible avec un code du style:

<a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']+1; ?>"><img src="../../images/suivant.png" width="45" height="45" alt="Page suivante" /></a>
<a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']-1; ?>"><img src="../../images/precedent.png" width="45" height="45" alt="Page précédente" /></a>

Soit, on ouvre la même page que celle ou on est actuellement: gest_demande.php mais on rajoute +1 ou -1 à l'id en cours afin de le transmettre via la méthode get dans l'autre page:

<?php
  require_once('../connexbdd.php');
  // Si id a été posté :
  if (isset($_GET['id'])){
    // Protection de la variable "ID" pour éviter une faille SQL
    $_GET['id'] = addslashes($_GET['id']);
    $reponse=mysql_query('SELECT * FROM preventif WHERE ID=\'' . $_GET['id'] . '\'') or die (mysql_error());
  }
?>

Est-ce une manière propre de faire cela, tout en gardant une seule et même page de visualisation?

Encore merci pour votre aide à tous les deux. J'espère ne pas trop vous dérangez.

maxredphenix

Dernière modification par maxredphenix (11-06-2012 21:36:48)

Hors ligne

#9 11-06-2012 22:58:21

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Bonsoir,

1) Je t'invite tout d'abord à relire ce post.

2) pour le str_replace, selon les traitements que l'on a besoin d'effectuer il peut être plus performant de l'utiliser. Dans ton cas, tu n'en as même pas besoin en fait. A partir du moment où tu as fait un check_date() dessus auparavant, et que, par conséquent tu es certain de la validité de la chaîne de caractère, tu peux construire la nouvelle date au format mySQL par concaténation avec les instructions left et substr de php.

3) Concernant le champ vide bien oui^^. Si tu ne mets pas ce code et si l'un des deux cas de figure pour lesquelles la variable est définie à "" est rencontré, ton code te générera une erreur. N'oublie pas ce qui est dit dans ce post.wink

4) les noms de balise et les attributs de balise s'écrivent en minuscules en html/xhtml

5) Pour l'id en $_GET, oui tu peux le faire, mais il faut s'assurer que la personne n'étant pas habilitée à consulter un tel contenu ne puisse le faire en connaissant simplement l'URL.

Dernière modification par Jc (11-06-2012 23:00:18)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 12-06-2012 07:54:44

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour,

Encore merci pour tes réponses,

J'ai regarder ton lien et j'ai changé mon scritp par :

<?php
require_once('../connexbdd.php');
// Si id a été posté :
if (isset($_GET['id'])){
// Protection de la variable "ID" pour éviter une faille SQL
$id= intval($_GET['id']);
$reponse=mysql_query('SELECT * FROM preventif WHERE ID=$id ') or die (mysql_error());
}
?>

J'ai pas tester pour le moment car je peux pas rentrer avant demain soir mais ça devrait être bon non?

Pour le str_replace, si j'ai bien compris tu me dis que du coups il fait que je le remplace par un left et substr, il va falloir que je regarde ça parce que je les connais pas encore celle la wink
Par contre pour ce qui est des verif avec le checkdate et la fonction de construction de la nouvelle date tu penses que ce j'ai noter dans mon post précédent est correct? (vivement que je rentre pour tester....)

Très instructif ton post "Conseils d'un developpeur", c'est bête mais les trois livres que j'ai lu pour le moment ne disent même pas un tier de ce que tu viens de dire.

Pour le 4, c'est bizarre tu es le 2eme à me dire ça alors que dans les livres ils conseillent plus de les mettre en majuscule....

Pour le 5, je vais donc tenter de le faire comme ça, j'attendais d'avoir l'avis de pro avantd e me relancer dans autre chose. je vais donc tenter ceci en rentrant chez moi:

    <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']+1; ?>"><img src="../../images/suivant.png" width="45" height="45" alt="Page suivante" /></a>
    <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']-1; ?>"><img src="../../images/precedent.png" width="45" height="45" alt="Page précédente" /></a>

Juste comme ça le faite de passer l'id par la méthode GET n'est pas trop dangereux? en tout cas pour ce qui est des autorisation j'ai créer une table utilisateurs avec un système de session sur chaque page et le site sera en intranet (je créer un site du style webapp pour me simplifier la vie au boulot, même si pour le moment il me la complique...:) parce que j'en ai marre de tout faire sur papier, à 100 feuilles/mois + tout rentrer sur excel les sommes à la fin du mois afin de faire des stats==> c'est du total gaspillage)

Encore merci

Hors ligne

#11 12-06-2012 09:16:39

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Questions et problèmes sur MYSQL

Jc a écrit :

2) pour le str_replace, selon les traitements que l'on a besoin d'effectuer il peut être plus performant de l'utiliser. Dans ton cas, tu n'en as même pas besoin en fait. A partir du moment où tu as fait un check_date() dessus auparavant, et que, par conséquent tu es certain de la validité de la chaîne de caractère, tu peux construire la nouvelle date au format mySQL par concaténation avec les instructions left et substr de php.

Cadeau, j'ai toujours ça qui traîne dans un coin de mes développements :

<?php
function maldati($date,$sep){
    return implode($sep,array_reverse(explode($sep,$date)));
    }
echo maldati('2008/09/22','/');

L'avantage c'est que ça fonctionne dans les deux sens.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 12-06-2012 10:54:53

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Bonjour,

Merci MK wink je n'y avais pas pensé^^.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#13 12-06-2012 11:48:27

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Merci Maljuna Kris pour cette fonction,

Juste comme ça vu que je débute:
Le explode va prendre la date 2008/09/22 pour enlever les / ce qui va donner 2008  09  22
Le array reverse va inverser le 22 et le 2008
le implode va au final rajouter les / pour faire 22/09/2008

C'est bien ça?

Par rapport à mon post précédent, la dernière question concernant l'id? C'est pas trop dangereux de faire ça?

Encore merci

Hors ligne

#14 12-06-2012 13:36:30

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Bonjour,

C'est bien ça wink
Pour l'id non, ce n'est pas dangereux.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#15 12-06-2012 14:06:30

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Merci Jc, c'est cool ca commence a rentrer un ptit peu alors, j'ai pas lu tout ces livre pour rien.... smile

Et vis a vis de la structure du fichier de traitement des donnees, mis a part la conversion des dates et le foreach qu'il faut enlever, c'est plutot correct comme code?

Par rapport au champs de type input et textarea, qu'est ce que vous utilisez de votre côté pour le traitement de ces champs vu qu'ils peuvent contenir des caracteres speciaux non pris en charge par mysql et donc mal afficher via le fichier php de visualisation?
J'ai lu qu'il fallait faire un htmlspecialchar, c'est correct? Si on traite les donnees avec htmlspecialchar, est-ce qu'il faut faire un truc particulier dans le code php qui ira reprendre les donnees dans la bdd?

Encore merci de votre aide

Hors ligne

#16 12-06-2012 14:57:17

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Bonjour,

1) Pour tout vous dire, le code n'est pas génial du tout.
En effet il est strictement inutile de faire un


if (isset($_POST['data'])){if (preg_match(pattern,string)){$data=$_POST['data'];}else{$data="";}}else{$data="";}
// si c'est pour faire ensuite un truc du genre
$sql=$myPDO->query("INSERT INTO mytable (value1,value2) VALUES ('".$_POST['data']."', 2)";
// En effet si $_POST['data'] contient du script, cette ecriture valide la tentative d'injection et la ligne précédente ne sert plus à rien si ce n'est de la déco. C'est $data qu'il faut utiliser ici et non $_POST['data'] !!!.
 

2) MySQL peut stocker et gérer tous les caractères utilisés sur la planète.

3) Pourquoi il est préconisé pour les débutant d'utiliser l'UTF8 par défaut avec une collation insensible à la casse dans les bases de données?
a) Parcequ'il est plus facile à un débutant de ne pas s'occuper et de gérer les problèmes d'affichage de caractères spéciaux lorsque la collation du SGBDR est différente de celle du serveur Apache et/ou PHP.
b) Parcequ'un débutant ne se soucie guère de contrôler la qualité de ses données dans son code applicatif en s'assurant d'un stockage standardisé des données dans le SGBDR (ce n'est déjà pas très répandu/systématique chez les pros^^), et par conséquent de développer un code qui s'assure de tout cela au niveau PHP/Js, et en le recontrôlant au niveau SGBDR. Ex: Prénom toujours commençant par une Majuscule et écrit en minuscule.
c) Quelle collation utiliser au niveau SGBDR alors? privilégiez autant que possible une collation compatible binaire et par conséquent sensible à la casse, définie sur un seul octet! Si votre application est localisée, et que des caractères spéciaux sont couramment utilisés alors changez la collation mais pas autrement.

3) Il vous faut veiller à l'unicité, l'intégrité et à la qualité de vos données dans votre base de données à tout prix d'autant plus si vous êtes commerçant (plus précisément à l'acidité de vos données). Donc à partir du moment où ceci est garanti par votre développement les données provenant de votre BD n'ont pas besoin de se voir adjoindre des traitements de protection supplémentaires lors de lecture de données. C'est uniquement lors de l'écriture et de la mise à jour qu'il faut prendre toutes les précautions.

4) Rien de mieux pour protéger vos données que des contrôles de typage de données explicites et de contrôler vos chaînes de caractères avec preg_match. Pourquoi alors tout le monde utilise htmlspecialchar (ou l'equivalent)? La loi du moindre effort tout simplement et qui se contente de garantir tout juste le minimum syndical. Les expressions régulières utilisées avec preg_match font de plus parties des choses les plus complexes à apprendre en PHP. Elles existent aussi en Javascript bien qu'il y ait des petites différences syntaxiques avec le PHP. Pour la plupart, voir un simple pattern d'expression régulière, leur donne la migraine wink

++

Dernière modification par Jc (12-06-2012 15:20:58)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#17 12-06-2012 17:02:20

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Re,

Je n'avais pas vu ceci

maxredphenix a écrit :

Mais est-ce qu'il est vraiment nécessaire de faire un enregistrement en format anglais pour mysql?  si je configure un champs en varchar, est-ce que la date va s'enregistrer en format 01-01-2012 sans souci et surtout est-ce que je pourrais réutiliser mes dates enregistré dans un varchar pour
faire du traitement du style date1-date2=xx heures

1) La question de savoir si l'enregistrement des dates en format anglais est nécessaire ou pas dans mysql, ne se pose pas : C'est comme cela que MySQL le gère et le stocke. Cela constitue donc le format standard de traitement. L'affichage de la date au format francophone ne doit se faire qu'au moment de l'affichage.

2) Les dates et les heures ne doivent être enregistrées dans les bases de données dans un type DATETIME (ou équivalent selon le SGBDR) pour le moins et EXCLUSIVEMENT! Sinon aucune gestion de date/heure ne sera possible au niveau SGBDR, et les données s'en retrouveront complètement inconsistantes.

++

Dernière modification par Jc (12-06-2012 17:02:32)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#18 12-06-2012 17:20:20

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Questions et problèmes sur MYSQL

T'énerves pas, Jc, après je suis obligé de passer le buvard sur tes postillons de fautes d'orthographe ! lol


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#19 12-06-2012 18:17:18

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Lol MK, j'mneverve pas j'explique big_smile


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#20 13-06-2012 20:45:07

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour,

Désolé pour le retard. Merci pour toute ces infos, pour la bdd j'avais bien mis tout mes champs date en datetime ou seulement date pour les datepicker simple, mais je voulais juste savoir au cas ou si il y avait pas moyen d'avoir un enregistrement en "français" mais maintenant je suis sur que c'est non...;)

J'ai tester les lignes suivante pour faire un suivant précédent mais j'ai droit à un jolie message d'erreur:

<!-- Boutons suivant et précédent -->
<div>
  <div id="BtnSuivant">
    <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']+1; ?>"><img src="../../images/suivant.png" width="33" height="33" alt="Page suivante" /></a>
  </div>
  <div id="BtnPrecedent">
    <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']-1; ?>"><img src="../../images/precedent.png" width="33" height="33" alt="Page précédente" /></a>
  </div>
</div>

Notice: Undefined variable: datas in C:\wamp\www\Monsite\php\formulaires_visualisation\gest_demande.php on line 141 Call Stack #TimeMemoryFunctionLocation 10.0005411192{main}( )..\gest_demande.php:0 1">( ! ) Notice: Undefined variable: datas in C:\wamp\www\Monsite\php\formulaires_visualisation\gest_demande.php on line 144 Call Stack #TimeMemoryFunctionLocation 10.0005411192{main}( )..\gest_demande.php:0 -1">

Screenshot erreur

Pour ce qui est de ma page de traitement je te remercie de ta sincérité, j'ai créer ceci pour la verif via un preg_match:

$verif_input = "/^[a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]+$/";
if (isset($_POST['num_appelant'])){if (!preg_match($verif_input, $input = htmlspecialchars(trim($_POST['num_appelant'])))){$input= $num_appelant;} else {$input="";}

Vous trouvez ça correct ou complètement nul?

Pour ce qui est de l'utf8, ce que je comprends pas c'est que dans mon code actuel, si j'enregistre mon nom prénom dans le champs prévu à cette effet, en retour j'ai droit à j?r?my  (avec les ? dans un carré)

Merci

maxredphenix

Hors ligne

#21 14-06-2012 00:28:49

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Bonsoir,

1) D'où sort ton $datas['id'] ? Apparamment cette variable n'existe pas, tu as donc oublié de la définir préalablement.
2) Le preg_match est complètement faux. Je t'invite à consulter un tuto comme celui-ci pour mettre en place tes patterns. Il inclus un testeur regexp en ligne : cadeau wink . Tu y verras que de mettre également / comme caractère d'encadrement n'est pas pertinent. Je t'invite également à consulter la documentation de la fonction preg_match déjà pour corriger ta syntaxe.

++

Dernière modification par Jc (14-06-2012 00:29:55)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#22 14-06-2012 06:02:25

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Bonjour,

Je viens de regarder mon code et en effet la ligne

<?php while ($datas = mysql_fetch_assoc($reponse)) { ?>

était en dessous de ma div contenant les boutons suivant/précédent donc forcement ils ne connaissaient pas $data

Par contre lors d'un clic sur un des bouton,  ma page ayant un url:
http://localhost/Monsite/php/formulaires_visualisation/gest_demande.php?id=2
passe bien à
http://localhost/Monsite/php/formulaires_visualisation/gest_demande.php?id=3
donc la déctection de l'id est bonne, mais ne s'affiche que les boutons enregistrer/effacer mais rien d'autres

voil ala partie <body> de ma page servant à la visualisation:

  <body>
    <!-- En Tête - Banniere avec logo -->
    <div id="header" class="banniere">
      <?php
        $titre="Gestion des Demandes"; // Déclaration du titre qui sera affiché dans le header
        require_once('../header.php');
      ?>
    </div>
    <!-- Menu -->
    <div id="barre_navigation">
      <ul id="menu">
        <li><a href="../../index.php"><img src="../../images/home.png" alt="menu" title="menu" style="position: relative; display: inline-block; float:left; padding:2px 0px 0px 9px;"/>Revenir au menu</a></li> <!-- Enregistrement de la page en cours après avoir rempli les champs du formulaire + Revenir au menu -->    
        <li><a href="../formulaires_tableau/gest_demande_tableau.php">Tout afficher</a></li> <!-- Affichage de toutes les fiches dans un tableau -->
        <li><a href="../formulaires_statistique/demande_stat.php">Statistiques</a></li> <!-- Affichage des différents graphiques possibles -->  
        <li><a href="#">Imprimer</a></li> <!-- Impression de la page en cours-->     
      </ul>
      <!-- Appel de la page php servant à l'affichage de l'utilisateur qui est connecté ainsi que le bouton de deconnexion -->
      <?php require_once('../header_navigation.php');?>
    </div>
    <!-- Boucle de récupération des données de la bdd via l'id correspondant à la ligne choisie -->
    <?php while ($datas = mysql_fetch_assoc($reponse)) { ?>
    <!-- Boutons suivant et précédent -->
    <div>
      <div id="BtnSuivant">
        <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']+1; ?>"><img src="../../images/suivant.png" width="33" height="33" alt="Page suivante" /></a>
      </div>
      <div id="BtnPrecedent">
        <a href="../formulaires_visualisation/gest_demande.php?id=<?php echo $datas['id']-1; ?>"><img src="../../images/precedent.png" width="33" height="33" alt="Page précédente" /></a>
      </div>
    </div>
    <!-- Formulaire -->
    <form name="form_demande" method="post" action="../formulaires_traitement/update_demande.php">
      <!-- Regroupement des champs concernant le numéro, la date, et le numéro de l'appelant -->
      <div id="num_appel"><fieldset style="border:none">
        <div id="fourcolonnes_gauche"> <!-- Mettre à gauche du fieldset-->
          <span class= "id_appel">
            <label for="id_appel">N°: </label>
            <input type="text" name="num_appelant" id="num_appelant" value="<?php echo $datas['id'];?>"/>
          </span>
        </div>
        <div id="fourcolonnes_centreg"> <!-- Mettre au milieu à gauche du fieldset-->
          <span class="num_appelant">
            <label for="num_appelant">N° de l'appelant: </label>
            <input type="text" name="num_appelant" id="num_appelant" value="<?php echo $datas['num_appelant']; ?>"/>
          </span>
        </div>
        <div id="fourcolonnes_centred"> <!-- Mettre au milieu à droite du fieldset-->
          <label>Date Appel: </label>
          <input type="text" id="date_appel" name="date_appel" value="<?php echo $datas['date_appel'];?>" /> <!-- Affichage du calendrier avec date du jour rentrer automatiquement -->
        </div>
        <div id="fourcolonnes_droite"> <!-- Mettre à droite du fieldset-->
          <label>Heure Appel: </label>
          <input type="text" id="timepicker" name="heure_appel" value="<?php echo $datas['heure_appel'];?>" /> <!-- Affichage de l'heure: Rentrer automatiquement -->
        </div>
      </fieldset>
      </div>
      <!-- Regroupement des champs concernant les informations principales -->
      <div class="infoglobales"><fieldset>
        <legend>Informations Globales</legend>
          <!-- Block de gauche du fieldset Infoglobale -->
          <div id="infoglobalegauche">
            <span>
              <label for="media">Média: </label>
              <?php
                echo '<SELECT NAME="media" ID="media">';
                mysql_query("SET NAMES UTF8");
                require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
                $reponse = mysql_query("SELECT type_media FROM media ORDER BY type_media") or die(mysql_error);
                echo">SELECT NAME='media' onchange='FocusObjet()'>";
                while ($result = mysql_fetch_array($reponse)){
                  echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
                }
                echo "</select>";
              ?>
              <br />
            </span>
            <span>
              <label for="systemes">Système: </label>
                <?php
                echo '<SELECT NAME="systeme" ID="syteme">';
                mysql_query("SET NAMES UTF8");
                require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
                $reponse = mysql_query("SELECT type_systeme FROM systemes ORDER BY type_systeme") or die(mysql_error);
                echo">SELECT NAME='systeme' onchange='FocusObjet()'>";
                while ($result = mysql_fetch_array($reponse)){
                  echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
                }
                echo "</select>";
              ?>
            </span>
          </div>
          <!-- Block central du fieldset Infoglobale -->
          <div id="infoglobalemilieu">
            <span>
              <label for="nom_demandeur">Demandeur: </label>
              <input type="text" name="nom_demandeur" id="nom_demandeur" maxlength="30" value="<?php echo $datas['nom_demandeur'];?>" />
            </span>
            <br />
            <span>
              <label for="service">Service: </label>
              <input type="text" name="service" id="service" maxlength="50" value="<?php echo $datas['service'];?>" />
            </span>
          </div>
          <!-- Block de droite du fieldset Infoglobale -->
          <div id="infoglobaledroite">
            <span>
              <label for="batiment">Bâtiment: </label>
              <input type="text" name="batiment" id="batiment" maxlength="10" value="<?php echo $datas['batiment'];?>"/>
            </span>
            <span>
              <label for="local">Local: </label>
              <input type="text" name="local" id="local" value="<?php echo $datas['local'];?>"/>
            </span>
          </div>
      </fieldset>
      </div>
     
      <!-- Regroupement des champs concernant les Interventions -->
      <div id="interventions"><fieldset>
        <legend>Interventions</legend>
          <div id="infoglobalegauche">
            <span>
              <label>Type Inter : </label>
              <input type="text" name="local" id="local" value="<?php echo $datas['type_inter'];?>" />
            </span>
          </div>
          <div id="infoglobalemilieu">
            <span>
              <label for="tps_inter_souhaite">Tps Souhaité: </label>
                <?php
                echo '<SELECT NAME="tps_inter_souhaite" ID="tps_inter_souhaite">';
                mysql_query("SET NAMES UTF8");
                require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
                $reponse = mysql_query("SELECT tps_inter_souhaite FROM tps_inter_souhaite ORDER BY tps_inter_souhaite") or die(mysql_error);
                echo">SELECT NAME='tps_inter_souhaite' onchange='FocusObjet()'>";
                while ($result = mysql_fetch_array($reponse)){
                  echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
                }
                echo "</select>";
                ?>
            </span>
          </div>
          <div id="infoglobaledroite">
            <span>
              <label for="objet_appel">Objet Appel: </label>
                <?php
                echo '<SELECT NAME="objet_appel" ID="objet_appel">';
                mysql_query("SET NAMES UTF8");
                require_once('../connexionbdd.php'); // Connexion à mysql via le fichier connexion.php
                $reponse = mysql_query("SELECT objet_appel FROM objet_appel ORDER BY objet_appel") or die(mysql_error);
                echo">SELECT NAME='objet_appel' onchange='FocusObjet()'>";
                while ($result = mysql_fetch_array($reponse)){
                  echo "<OPTION VALUE='$result[0]'>$result[0]</OPTION>\n";
                }
                echo "</select>";
                ?>
            </span>
          </div>
          <div style="with:100%">
            <span>
              <label for="objets">Commentaires :</label>
              <textarea name="objet" class="objet" cols="70" rows="3" autocomplete="off" value="<?php echo $datas['commentaires'];?>"></textarea>
            </span>
          </div>
        </fieldset>
      </div>
      <?php }?> <!-- Fin de la boucle while de récupération des données -->
      <!-- Envoie / Annulation du formulaire -->
      <div id="inputs">
        <input type="submit" value="Enregistrer" id="enregistrer" class="submit"/>
        <input type="reset" value="Effacer" id="effacer" class="reset"/>
      </div>
              </form>
</body>

Je te remercie encore une fois pour l'aide que tu m'apportes et la rapidité de tes réponses.

maxredphenix

Merci pour le lien je vais regarder cela aujourd'hui.

Dernière modification par maxredphenix (14-06-2012 06:03:28)

Hors ligne

#23 14-06-2012 09:56:59

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

Je viens de regarder ton lien, mais j'avoue que je suis un peu paumer. Je pensais pas qu'enregistrer du texte contenant des caractères spéciaux (àé etc..) tout en évitant les problèmes d'injections ou autres serait si difficile à faire en php

Je viens de relire le paragraphe sur les fonctions dans un de mes livres, est-ce que c'est pas plus simple de faire ceci:

< ?php
  // Fonction d’encodage des caractères spéciaux  + saut de ligne en <br>
  function txt_formulaire($texte){
    return nl2br(htmlentities ($texte, ENT_QUOTES,'UTF-8')) ;
  }
if (isset($_POST['num_appelant'])){
  $num_appelant=txt_formulaire(($_POST['num_appelant'])
}

J'ai pas tester pour le moment, vu que je suis pas sur mon pc (et que c'est moi qui vient de le faire donc c'est surement faux:( )  mais comme ça le texte qui est envoyé via mon formulaire est converti, en plus il me prends en compte mes sauts de ligne pour mes textarea et si je me trompe pas il va prendre en compte les guillement et les quotes. Après je sais pas si ça résolve mon souci de caractère accentué. Il va falloir que je teste cela ce soir (sauf si tu me réponds avant et que tu me dis que c'est nul....)

Juste comme ça, ça fait combien de temps que tu programme en php ou autres langages web, ça t'as pris du temps pour arrivé à un bon niveau?

maxredphenix

Hors ligne

#24 14-06-2012 10:05:45

maxredphenix
Membre
Inscription : 06-11-2010
Messages : 58

Re : Questions et problèmes sur MYSQL

J'ai oublier de te demander, est-ce que tu connaitrais pas par hasard un plugin, script ou autres permettant de générer des graphiques de statistiques (histogramme, camembert, courbe)  en fonction des données contenues dans ma bdd mysql mais qui serait en même temps compatible avec html2pdf?

Pour le moment j'ai tenté hightgraph mais fonctionne pas avec html2pdf. Là je suis avec Pchart mais il me génère pas l'image du graphique désiré et comme il n'est plus mis à jour depuis 2008 plusieurs personnes mon conseillées de me tourner vers autre chose mais je trouve rien de valable, soit c'est payant, soit il faut une connexion à internet mais moi c'est en réseau local, soit c'est un super truc mais pas compatible avec html2pdf

je t'explique le pourquoi de cette question: je dois créer un compte rendu mensuel dans lequel il y a des stats et quitte à faire, vu que j’essaie de tout mettre sur informatique autant que tout soit fait depuis l'application.

Merci

Hors ligne

#25 14-06-2012 12:36:55

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Questions et problèmes sur MYSQL

Bonjour,

Alors je pense que tu es en train de tout mélanger. Le lien sur les regexp, c'est pour ton pattern (preg_match), et j'avais bien précisé que cela faisait partie des choses les plus difficiles à apprendre en PHP. Ensuite, la syntaxe pour ton preg_match est fausse d'où mon lien vers le manuel php : on ne fait pas d'affectation de variable en plein milieu d'une signature de fonction en php!
Pour les encodages UTF8, ton problème rejoint celui que j'ai évoqué précisément avec les débutants! En général on utilise plus simplement les fonctions utf8_encode() et utf8_decode().

Vérifie avec jpgraph à tout hasard.

++

Dernière modification par Jc (14-06-2012 12:37:53)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums