PHP|Débutant :: Forums

Advertisement

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

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

#1 Re : MySQL, PostgreSQL, etc... » Aide à la réflexion sur une requête php mysql » 02-12-2020 21:18:25

Jc

Bonjour,

Je pense que votre modèle de données est à revoir.
Dans ce que vous cherchez à faire, par exemple, votre table RESERVDATE ne devrait comporter que deux colonnes reserv_date DATE , max_resa TINYINT avec la clé primaire sur le tuple {reserv_date, max_resa} (rappel : la PK est de type clustered index par défaut sur SQL Server)
Ensuite, afin d'éviter l'utilisation de triggers dans votre base, il faut décomposer la démarche d'inscription en deux étapes, et passer par une procédure stockée pour contrôler et valider la validité de chaque inscription.
Pourquoi en deux étapes ?
Tout simplement pour afficher pour le joueur connecté, ses possibilités d'inscriptions. En fonction du choix fait au sein de cette liste par le joueur, on valide l'inscription (avec recontrôle idéalement au niveau de la procédure stockée).

Voilà pour la démarche.
Sinon, évitez les SELECT *, et les champs sont dans la nature, dans les Bases de données ce sont des colonnes.

Bon dimanche.

#2 Re : Forum Général PHP » BARRE DE RECHERCHE EN PHP » 21-12-2020 12:32:36

Jc

Bonjour,

La méthodologie adéquate pour ce genre de recherche est intimement liée à votre structure de données et votre structure applicative.
Difficile de vous aider davantage en l'état actuel de ce qui est portée à notre connaissance.

Cordialement,

Jc

#3 Re : Forum Général PHP » php5.6 vers php7 : Erreurs » 12-05-2020 10:52:46

Jc

Bonjour,

L'extension PHP utilisant les instructions mysql_query était obsolète en PHP 5.5.0, et a été supprimée en PHP 7.0.0. Je vous recommande vivement de passer à l'extension PDO pour MySQL.

Cordialement,

Jc

#4 Re : Forum Général PHP » LA COMMANDE INNER JOIN » 12-09-2019 16:59:45

Jc

Bonjour,

Difficile de vous répondre sans connaître la structure des tables.
Cependant pour pouvoir effectuer la jointure il vous faudrait une colonne pays_id dans votre table VILLES.
Ainsi vous pourriez écrire la requête suivante :

'SELECT ville_id, ville_nom, pays_nom
FROM villes INNER JOIN pays ON villes.pays_id=pays.pays_id
WHERE pays.pays_id=' . intval($pays_id)

Ensuite dans votre code vous réutilisez les mêmes nom de variables en PHP, ce qui peut créer des conflits.

A+

#5 Re : Forum Général PHP » php mysql controle dans un formulaire avant de poster » 12-09-2019 16:50:44

Jc

Bonjour,

Il vous suffirait de requêter la liste des sponsors de coureurs disponibles, idem pour la course, et de les mettre dans un selectbox dédié du formulaire.

A+

#6 Re : MySQL, PostgreSQL, etc... » Victime d'une tentative de hack : "injection SQL" » 07-04-2019 04:17:52

Jc

Bonjour,

Je ne prends pas la mouche. On est ici sur un forum de débutant et affirmer de tels choses est pour moi irresponsable vis-à-vis des lecteurs de ce forum.
Je dis donc les choses comme elles sont et comme il est de ma responsabilité de les dire.
Ensuite, pour ceux qui utilisent mysql_real_escapte_string, outre le fait que je les encourage à passer à PDO, je n'ai pas dit qu'il était inutile mais très largement insuffisant car il n'offre aucune garantie contre le hack.

Bonne journée.

#7 Re : MySQL, PostgreSQL, etc... » Victime d'une tentative de hack : "injection SQL" » 07-04-2019 04:17:52

Jc

Continuez à l'utiliser pour vous protéger des injections big_smile
Je vous propose un test : appliquez votre real_escape_string à l'exemple du lien que je vous ai fourni, et observez le résultat.
Bonne continuation smile

#8 Re : MySQL, PostgreSQL, etc... » Victime d'une tentative de hack : "injection SQL" » 07-04-2019 04:17:52

Jc

Bonjour,

real_escape_string ou autre fonction du genre ne va pas vous protéger des injections SQL qu'on se le dise.
Je vous invite à relire la documentation de ce genre de fonction pour mieux comprendre ce qu'elle fait exactement. Elle vous évitera qu'une chaîne de caractères du style 'J'ai bu du café ce matin' génère une erreur lors de l'insertion en base. En effet si on échappe pas les apostrophe, php considérera l'apostrophe du J'ai comme un marqueur de fin de chaîne alors qu'il se situe après le mot matin.
Eviter les injections SQL ne relève d'aucune science ni d'une quelconque boule de cristal. C'est à vous donc de faire attention à votre façon de gérer les variables et aux requêtes utilisées passées en base de données notamment pour les éviter. C'est du simple bon sens. Faites en sorte notamment de supprimer de toute chaîne de caractère les symboles pouvant être considérés comme une marque de commentaires pour le moteur de bases de données utilisé dans votre applicatif.
Un petit lien pour commencer à vous familiariser avec l'injection que je viens de trouver pour vous : https://zestedesavoir.com/tutoriels/945 … scription/

Bonne journée,

#9 Re : Forum Général PHP » Table à 2 colonnes - Définir variables selon Id » 28-02-2019 00:55:27

Jc

Bonjour,

Il faut bien comprendre à la base qu'il n'y a pas d'ordre dans une base de données. Il faut assimiler votre table à un sac de billes. Les ids sont des ids techniques et non pas un numéro d'ordre.
Que ferez-vous lorsque vous allez vouloir insérer un mot entre l'id 3 et l'id 4 ? on se le demande bien. Si vous voulez ordonner vos mots, il vous faut rajouter une colonne, appelons-là pour l'exemple "ordre" et il vous suffira de renuméroter l'ordre de vos mots indifféremment de leur id.  Ensuite dans votre requête il suffira d'écrire SELECT id,mot FROM elements ORDER by ordre; et vous obtiendrez directement votre liste ordonnée comme vous le souhaitez.
Cordialement,

#10 Re : Défouloir » Présentation Ju-st1 » 22-07-2016 12:39:46

Jc

Bienvenue sur PHP débutants ju-st1 smile

@ManicoW : merci d'avoir réparé le système de mail, j'ai pu récupérer mon compte smile

#11 Re : Forum Général PHP » Help - affichage des images, trié par date de modification » 23-01-2016 14:08:30

Jc

Bonjour,

Si le nombre de lignes est important, je vous recommande de faire ce tri directement au niveau de votre requête SQL en amont.
Sinon, il faut idéalement que vos date soient chargées telles qu'elles sont stockées sur votre SGBDR c'est à dire au format "YYYY-MM-DD hh:mm:ss" ce qui va vous permettre de reclasser votre tableau de données au niveau de PHP sur cette colonne par un simple classement alphabétique ou alphabétique inverse pour obtenir le résultat désiré.

Bon week-end.

#12 Re : Javascript » ajax pour debutants » 23-01-2016 23:03:04

Jc

Bonjour,

Pour faire cela en Javascript de base, il vous faut déjà un niveau certain en javascript. C'est pourquoi je vous recommande d'utiliser le framework JQuery, et de passer par un module JQuery d'upload Ajax (vous trouverez facilement sur Google).

++

#13 Re : Forum Général PHP » Classe Panier et son manager en php orirnté Objet » 12-04-2016 09:11:51

Jc

Bonjour,

Essayons de répondre à vos questions

comment stocker les informations du panier dans la base de données?

Pour stocker les informations du panier dans la base de données, il faut d'abord créer votre base de données sur un serveur SGBDR (Serveur Général de bases de Données Relationnelles), apprendre à la modéliser, à y structurer vos données correctement et apprendre le SQL afin de pouvoir requêter vos données qui y sont stockées. Voilà dans un premier temps pour vous faire une idée.

la classe PanierManager qui gere la classe panier avec les methodes CRUD à quoi ressemble t elle ?

Avant de rentrer dans le code, sachez que cela dépends de l'architecture de votre application. Il y a plusieurs écoles.. En fait il y en a deux :
1) Applications qui pilotent les données au niveau serveur tiers (PHP,Node,Java,...) qui sont des serveurs de type objet.
2) Applications qui pilotent les données au plus proche des données, c'est à dire au niveau du SGBDR qui est un serveur de type relationnel.

1) Exemples : Tous les CMS du marché : WordPress, Prestashop, Magento, Joomla, etc, etc...
Avantages : La modélisation objet des données, permet de délivrer des applications toutes faites très rapidement (back office, etc...).
Inconvénients : 1) Le SGBDR n'est pas optimisé, et en général les CMS les utilisent pour "y faire de la persistence de classes".
                       2) L'application, du fait d'un SGBDR non optimisé, va perdre en performance au fur et à mesure, que la quantité de donnée augmente et que la charge augmente, et le rapport est loin d'être linéaire...
                       3) Pour vous en convaincre: Rechercher une ligne sur 1 million d'enregistrements peut prendre quelques millisecondes sur un SGBDR, tandis qu'en objet, il faut faire de l'itératif pour la trouver et cela peut prendre environ 20minutes....
                       4) Risques de bugs et de perte d'intégrité des données importante.

2) Aujourd'hui se sont des applications développées par des sociétés, en général en développement sur mesure. Si les solutions logicielles sont déjà faites dans ce contexte, il s'agit d'applications dans lesquelles la préservation, la qualité, la cohérence et l'intégrité des données est la priorité absolue. Je développe de telles applications. Pour ma part, j'estime que tel devrait être la priorité pour toutes les entreprises, et surtout dans la conjoncture actuelle. Or la conjoncture actuelle, fait, à tort, que l'aspect financier à court terme est privilégié et s'orientent plus facilement vers des CMS, et ça leur coûte le plus souvent leur société à terme.

Pour les processus de gestion
1er cas (cf ci-dessus), votre référentiel de données, lorsqu'il est chargé de la bases de données, sont les données de votre classe (vos classes).
Note: il vous faut travailler dans tous les cas de figure sur les identifiants techniques numériques de vos entités de données.
Sur l'ajout d'enregistrement: a) vous vérifiez que le produit à rajouter n'est pas présent dans votre cache de données (classe)
b) Si ce n'est pas le cas vous l'ajoutez à votre cache puis faites un insert en bases de données. Ou alors vous faites une mise à jour globale du cache en bases de données sur demande de sauvegarde de l'utilisateur (pas top).
c) S'il est présent, faut mettre à jour la quantité du produit concerné dans le cache, puis faites un update en bases de données.
Sur la modification d'enregistrement: a) Vérifiez que le produit à modifié est présent dans votre cache de données
b) Si ce n'est pas le cas vous l'ajoutez à votre cache ... (idem que pour l'ajout b)).
c) S'il est présent, faut mettre à jour toutes les informations se rapportant à l'article en cache, puis faire un update en bases de données pour cet article.
etc... pour les autres opérations CRUD

2e cas : pilotage des données en SGBDR
Note: vous avez le cache à jour des données affichées dans votre classe.
a) vérifiez toujours l'existence de vos données avant de faire quoi que ce soit.
b) Que ca soit pour un ajout, une mise à jour multiple, etc.., faites le d'abord en bases de données et uniquement sur les données concernées, et en cas de retour "OK" du SGBDR, mettez à jour votre cache dans votre/vos classes PHP, sinon retournez un message d'erreur et ne modifiez pas vos données sur votre serveur PHP.

Voilà, j'espère vous avoir aidé smile Bon week-end smile

Note: Pour interroger votre bases de données, et y effectuer toute opération CRUD, et d'autres, il vous faut passer par une couche dite "Modèle" à travers un outil tel que PDO (que je vous recommande fortement).

#14 Re : Forum Général PHP » choix multiple et traitement des données » 19-01-2016 12:29:26

Jc

Bonjour,

<input type="hidden" name="fruits" id="input_cache_fruits" value="$param_rech">
Cette ligne est à modifier par


<input type="hidden" name="fruits" id="input_cache_fruits" value="<?php echo $param_rech; ?>">
 

pour le moins. Ensuite pour votre 2e erreur à savoir le prix, la variable $prix n'est pas initialisée. Il est donc difficile de faire une addition avec un chiffre dont on ne connaît pas la valeur.
Il vous faut rechercher le prix du fruit concerné pour en calculer la nouvelle valeur.

++

#15 Re : Forum Général PHP » Classe Panier et son manager en php orirnté Objet » 12-04-2016 09:11:51

Jc

Bonjour,

Votre question couvre quasiment quelques chapîtres d'une bonne formation sur la programmation orientée objet.
En gros voici la structure de base


class monPanier{
   private $panier=array(); // variable qui va stocker ce que vous stockez actuellement en session : tableau multidimensionel
   
   public function add_item(array $item){
     // méthode pour ajouter un item $item à la variable $panier
  }

  // getter global pour votre panier.
  public function get_panier(){
      return $this->panier;
  }
}
 

Ceci n'est qu'un exemple très sommaire. Ensuite il vous faudra sérialiser votre classe en SESSION pour gérer la persistence de votre panier.

++

#16 Re : Forum Général PHP » Besoin d aide » 18-01-2016 21:21:36

Jc

Bonsoir,

Il manque un attribut action à votre balise form.
Ensuite \n est à supprimer et <?php> est à remplacer par <?php

Bonne soirée

#17 Re : MySQL, PostgreSQL, etc... » Requête pour effectuer un classement à partir de résultats » 14-01-2016 14:54:07

Jc

Bonjour,

1) Vous seul connaissez la signification de vos noms de colonnes pour votre table. Tout le monde ici n'en a pas la moindre idée.
2) On est pas des devins, si vous aviez pour le moins un code à nous soumettre, peut être que l'on pourrait vous aider et vous dire ce qui ne va pas dans ce que vous essayez de faire.

Bonne journée et meilleurs vœux.

#18 Re : Forum Général PHP » Impossible de récupérer les post passés par l'URL. » 14-01-2016 14:47:29

Jc

Bonjour,

Votre code initial en POST était bon. La seule chose qui est la cause de votre problème c'est que vous soumettez votre formulaire à une page html (facile.html). Or il faut la soumettre à une page PHP pour que votre code PHP puisse être interprété par le serveur.

Bonne journée et meilleurs vœux.

#19 Re : Forum Général PHP » Php / Ajax gestion des erreurs Try/Catch ou non? » 05-12-2015 01:14:32

Jc

Salut pierrot

Standardiser n'a jamais été synonyme de code au kilomètre.
Exemple : Standardisation controleur Ajax et architecture code.

Mais sinon vas-y fais-toi plaisir et pose ton truc qu'on regarde ça wink

++

#20 Re : Forum Général PHP » Php / Ajax gestion des erreurs Try/Catch ou non? » 05-12-2015 01:14:32

Jc

Bonjour,

Il faut idéalement standardiser le format de vos erreurs applicatives, s'y tenir et centraliser cette gestion d'erreur.
Pour le côté CPU et mémoire : non.

++

#21 Re : Forum Général PHP » Php / Ajax gestion des erreurs Try/Catch ou non? » 05-12-2015 01:14:32

Jc

Bonsoir,

Plutôt la première en uniformisant la gestion de vos erreurs dans votre application. Au niveau de Js, prise en compte des erreurs réseaux+erreurs applicatives.

++

#22 Re : Forum Général PHP » Moteur de recherche sur une table » 24-11-2015 21:19:15

Jc

Bonjour,

Votre problème viens de là :


$query= preg_replace("#[^a-z?0-9]#i","",$_POST['query']);
 

En gros vous envoyez une chaîne vide à votre base de données, d'où le comportement observé.

++

#23 Re : MySQL, PostgreSQL, etc... » Problème de requête » 24-11-2015 20:09:13

Jc

Bonsoir,


$requete="SELECT SUM(fcd) AS somme1 FROM bdd_cotisation WHERE cle_adherent IN ('$chaine')";
 

++

#24 Re : MySQL, PostgreSQL, etc... » [Résolu] Mon POST n'aime pas le DELETE » 24-11-2015 20:04:18

Jc

^^

Il faut toujours contrôler le contenu des variables reçues.
Ici un $myID=intval($_POST['societyIdSuppr']); suffi.

++

PS: Si la variable numérique est supérieure à un entier PHP, il faut passer par un preg_match_all('#[0-9]#',$myID);

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

Jc

Bonsoir MK,

A vue de nez, essaye comme ça :

RewriteCond %{REQUEST_URI} ^/kanto/*.
RewriteRule (.*)  http://www.avcxjo-moko-kantas.fr/reroute.php?chant=$1 [QSA,R=301,L]

Mais faut l'améliorer car il ne faut cibler que les URL sans extension de fichier.
Je reviens vers toi quand j'ai un peu de temps (j'espère pas l'année prochaine lol).

Pied de page des forums

Propulsé par FluxBB