Vous n'êtes pas identifié(e).
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:
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:
Dois-je utiliser des commande du style TRIM etc..?
Voila le code complet de ma page de traitement:
// 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
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
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
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
Pourquoi savoir l'origine? c'est si horrible que ça?
Parce que si la condition de la ligne 68
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
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
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
Pour la fonction checkdate() ne regarde par sur le net tu ne la trouveras pas.^^
Voici un exemple de ce que je voulais dire
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
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?:
Ensuite pour la 2eme phrase le str_replace:
Mais pourquoi un str_replace au lieu du preg_replace?
Pour la troisième ligne:
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à:
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 :
ou
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:
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:
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
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.
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
Bonjour,
Encore merci pour tes réponses,
J'ai regarder ton lien et j'ai changé mon scritp par :
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
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:
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
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 :
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
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
Merci Jc, c'est cool ca commence a rentrer un ptit peu alors, j'ai pas lu tout ces livre pour rien....
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
Bonjour,
1) Pour tout vous dire, le code n'est pas génial du tout.
En effet il est strictement inutile de faire un
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
++
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
Re,
Je n'avais pas vu ceci
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
T'énerves pas, Jc, après je suis obligé de passer le buvard sur tes postillons de fautes d'orthographe !
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
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:
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">
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:
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
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 . 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
Bonjour,
Je viens de regarder mon code et en effet la ligne
é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:
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
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:
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
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
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