Vous n'êtes pas identifié(e).
Bonjour,
Concernant ton formulaire, je te conseille tout d'abord d'utiliser PDO, c'est la couche d'abstraction d'accès aux données de PHP standard, qui te permets de communiquer avec MySQL, postgreSQL, SQLServer 2008+, et bien d'autres, en tout transparence sans devoir changer ton code PHP.
Ensuite je ne comprends pas bien ce que tu veux faire, car tu mélanges la vue et ton modèle dans ton code... Donnes nous le contexte stp.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
- sur mon serveur (linux 64 bits/ 8go ram) j'ai 2 DD dont un en miroir et dd externe pour les sauvegardes, je sais bien que c'est pas suffisant pour éviter un crash.. j'ai encore du travail sur ce problème qui cette fois est incompressible, j'essaie de faire des priorités, mon objectif à très très CT est d'avoir un site de commercialisation suffisamment protégé puis de rebasculer sur l'appli/serveur ensuite.
- j'ai été sur OVH regarder le VPS Classic, je vais m'y pencher, la maintenance se fait toujours en lignes de commandes ?
- Pour l'appli en SAAS, je ne l'ai pas dit, mais l'appli sera distribuée gratuitement, elle ne sert uniquement, me concernant, qu'a générer et récupérer des agrégats analytiques qui seront eux commercialisés ultérieurement ( je ne peux t'en dire plus ici), c'est pour cela que toutes les applis doivent travailler en temps réel avec la même bd, pour agréger toujours en temps réel toutes les données des utilisateurs finaux.
Postgresql contient environ 140 tables...tout est récupéré.. mais tu me comprendras, je ne peux m'étendre plus sur ce forum.
A la limite, l'implantation des applis sur des serveurs physiques différents n'empêcherait pas de les connecter à la même base postgresql, je pense que cela est à ma portée (???), je l'ai bien fait sur une.. mais je ne sais pas si c'est la bonne méthode, ou alors peut être en traitement différé via les triggers ? mais je ne serai plus en temps réel.
Pour les distributeurs, ils la distribueront également gratuitement à leurs clients, la valeur ajoutée pour eux est ailleurs ( idem .. je ne peux en parler ici), j'ai une petite idée sur le temps de souscription qui est entre C et MT.
- Sur le SSL, j'ai pas encore tout compris, mais à quoi sert alors le https ? je devrais ré-aborder cet aspect plus tard. Même si je ne peux réaliser tout ce que tu m'indiques dés maintenant, est ce que actuellement le site privé et son formulaire te paraissent correctement protégé (en l'état) ?
je ne veux surtout pas devenir "redondant", tu m'apportes déjà beaucoup, mais quand tu le pourras, si tu as le temps de regarder mon problème d'entrées de données formulaires dans ma bd, je butte la dessus, pourtant je pense avoir compris le process mais ou est mon erreur, méthode, codage ou les deux ?
je vais encore essayer.. le métier rentre pas facilement..
Pierrot
Hors ligne
Re,
- Le certificat SSL c'est justement ce qui te permet de sécuriser tes connexions internet en https.
- Pour les VPS oui c'est toujours en ligne de commande, sinon si tu installes phpPgAdmin cela te permets de faire une interface externe graphique pour le moins au niveau du SGBDR, même si cela ne t'empêchera pas de mettre les mains sous le capot.
- Je ne connais pas l'impact niveau charge de ton application java (et en général niveau java), mais si elle reste "normale" et en partant du principe que ta marque blanche n'interdise pas des url de type : https://monappli1.mondomaine.com ; https://monappli2.mondomaine.com, tu devrais pouvoir monter 5 applis sur 5 sous-domaines différents par VPS 3, à vu de nez. Mais bon OVH ne fait pas de distri tomcat, et je n'ai pas d'expérience sur la charge d'un tel environnement au niveau ressources..
- Il te faudra un certificat de type wildcard par VPS pour sécuriser tous les sous-domaines.
- Tu peux en effet prendre un VPS dédié au SGBDR. Il faudra juste lui donner un accès externe au niveau du fichier de configuration de postgreSQL. qu'il faudra aussi sécuriser par certificat (et donc accéder au SGBDR en mode https uniquement). Le seul petit inconvénient c'est que cela va te générer un peu de latence entre les serveurs, car les requêtes devront sortir au niveau du routeur pour re-rentrer dans le LAN d'OVH (communication applis <=> SGBDR).
Voilà
Dernière modification par Jc (24-09-2014 15:59:24)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
$sql = "INSERT INTO matable(id, nomprenom) VALUES('','$nomtobd')";// requête sql
Lorsque l'id est en auto-incrément, soit tu ne l'exprime pas :
soit tu dois le définir à NULL
Je te conseille de l'omettre (plus c'est court mieux c'est ).
Voilà
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Je te conseille de l'omettre (plus c'est court mieux c'est ).
Voilà
C'est exactement l'inverse de ce que me recommande Dame 4in;
Ok, je sors.
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 JC,
J'essaie de ne pas trop "t'embêter" mais je cale encore..
J'ai appliqué le code correctif mais j'ai les mêmes difficultés;
Je le re-formalise pour ne pas se disperser, mais avec de nouvelles annotations en gris
<input type="text" class="cfg-type-text cfg-form-value " name="nomtobd" id="cfg-element-35-7" /> // changement de name ==> j'ai changé le name d'origine (cfg-element-35-7) par nomtobd puisque j'avais de problèmes de syntaxe dans les codes avec le name d'origine notamment ( les tirets !!!)
<?php
echo var_dump($data); // me renvoie NULL dans mon IHm
if(isset($_POST['nomtobd'])) $filename=$_POST['nomtobd'];//recup champs <input type="text" name="nomtobd" />
else $nomtobd='variable non chargée'; // "Variable non chargée" ==> c'est ce qui s'enregistre dans ma table en écrasant la variable par défaut qui est neant
echo $nomtobd; // vérif ok, me renvoie la variable du "else... == > variable non chargée."
//echo var_dump($data); // me renvoie encore NULL
$db=mysql_connect("truc.eu.mysql", "*********", "*********");// CA C'EST OK
mysql_select_db("truc_eu.mysql", $db);//CA AUSSI
$sql="INSERT INTO matable (nomprenom) VALUES ('$nomtobd')"; // VALUES ('$nomtobd') ==> la variable reste rn orange ==> pas de donnée ?
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());// insertion table
mysql_close();//fermeture base
?>
</div>
Ma table ==> sauf id et login, toutes les champs sont en varchar, avec "neant" par defaut
Je me demandais si la variable ne serait pas enregistrée temporairement puisque qu'elle change à chaque activation du formulaire, pour cela je suis allé dans le dossier cfg-contactform qui contient d'autres dossiers et une dizaine de fichiers php, mais sans rien trouver, ne sachant pas par ailleurs trop ce que je cherchais ( j'ai pas trouvé de nom de fichier correspondant à cfg-element-35-7) ? mais un ensemble dédié spécifiquement au formulaire :
(cfg-contactform ==> dossiers class > class-contactrform, dossier inc > contactform.config.php + form-validation.php + upload.php, js > + ..... ..) , je ne vais pas tous le énumérer sauf si besoin..
Je ne suis pas certain que le problème soit là.
Sans vouloir abuser de ton temps, peux tu me guider, je suis sûr que je ne suis pas loin , mais en informatique chez moi "pas loin et jamais" ..
Merci, j'essaie pourtant de ne pas trop "t'embêter".
pierrot
Dernière modification par pierrot35 (26-09-2014 11:21:50)
Hors ligne
Bonsoir,
Vous ne m'embêtez pas^^
1) d'où sort cette variable $data? (pour moi normal ici qu'elle soit égale à NULL n'ayant pas le code en amont)
2) Vu que vous utilisez la variable $nomtodb dans la requête, pourquoi écrire : $filename=$_POST['nomtobd']; ??? il faut écrire $nomtodb=$_POST['nomtobd'];
3) Evitez de communiquer vos login/mot de passe sur un forum public et changez-les de suite
bonne soirée
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour Jc,
j'ai fait ne nécessaire concernant la modification de l’accès à la bd ainsi que mon post précédent.
J'ai fait une grosse boulette.. coller des codes "non préparés" de surcroît faux.
Les codes réels étaient :
<div class="cfg-element-set" id="cfg-element-35-7-set" >
<div class="cfg-element-content">
<input type="text" class="cfg-type-text cfg-form-value " name="cfg-element-35-7" id="cfg-element-35-7" />
<?php
//$cfg-element-35-7=$nomtobd; // ?????????
//session_start(); //test ????????????
//rename($_POST['cfg-element-35-7'], $_POST['nomtobd']); // ?????????
//$_POST['nomtobd'] = $_POST['cfg-element-35-7']); //test ?????????
rename($cfg-element-35-7, $nomtobd);
if(isset($_POST['nomtobd'])) $_POST['nomtobd'];//recup champs <input type="text" name="nomtobd" />
else $nomtobd='variable inconnue';
$db=mysql_connect("mondomaine.eu.mysql", "mondomained_eu", "**********"); // ok
mysql_select_db("mondomaine_eu.mysql", $db);// ok
$sql="INSERT INTO matable (nomprenom) VALUES ('$nomtobd')"; // pourquoi VALUES ('$nomtobd') reste orange ==> pas de donnée captée ou syntaxe ?
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); // insertion table
echo var_dump($nomtobd);
echo $nomtobd;
mysql_close(); //fermeture base
?>
</div>
</div>
Toujours rien dans ma base sauf l'éternel "variable inconnue" qui vient du else..
J'essaie de renommer le name de l'input pour ne plus être ennuyer par la syntaxe du cfg-element-35-7, qui ne passe pas avec un $ devant..
merci de ton alerte
pierrot
Hors ligne
Bonjour,
Comme je l'ai dit précédemment il faut remplacer
if(isset($_POST['nomtobd'])) $_POST['nomtobd'];//recup champs <input type="text" name="nomtobd" />
else $nomtobd='variable inconnue';
par
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
bonjour Jc,
je suis désolé, ça na marche pas, je reste toujours bloqué sur cette difficulté, je pense que ce n'est plus un problème de codage, sinon j'aurai une alerte et ma bd n’enregistrerai pas irrémédiablement " variable inconnue" issu de echo $sql
Existe t'il un code pour afficher les liens d'enregistrement des "input" ? array() ?
J'ai mis cela,
echo '<pre>', print_r($GLOBALS), '</pre>'; mais ça ne me dit rien que je ne comprenne
Je pense que ça vient du name de l'input du formulaire d'origine "cfg-element-35-7" qui doit stocker que temporairement ma variable name?
le code original du formulaire étant
<div class="cfg-element-set" id="cfg-element-35-7-set" >
<div class="cfg-element-content">
<input type="text" class="cfg-type-text cfg-form-value " name="cfg-element-35-7" id="cfg-element-35-7" />
<?php....
Je cherche maintenant ou est ce "fout.." fichier pour l'uploader avant de lancer ma bd, Il ne peut être que dans le dossier formulaire cfg-contactform-35,
J'ai changé name="cfg-element-35-7" par name="nomtobd puisque sinon j'avais des problèmes de syntaxe avec "$cfg-element-35-7", mais rien n'y fait.
Juste une petite modification de ton dernier code auquel cas ou quelqu'un souhaiterait l'utiliser tel quel >>> else {$nomtobd='variable inconnue'};
il faut juste déplacer le ";" après "}", une petite erreur de frappe, ce qui donne :
if (isset($_POST['nomtobd']))
{
$nomtobd = $_POST['nomtobd'];
}
else
{
$nomtobd= "variable inconnue"; // de Jc aprés modif du ";"
}
..
Tu as déjà passé du temps avec mes difficultés et je comprendrai que tu puisse être maintenant dans l'impossibilité de poursuivre, dans tout les cas je te remercie et ne peux que conseiller aux autres demandeurs dans ce forum de te solliciter., sinon je reste à l'écoute.
Auquel cas je n'y arriverai pas, j'abandonnerai tout simplement et inscrirai les contacts manuellement dans ma bd.
Merci beaucoup
Pierrot
Hors ligne
Bonjour,
Evite alors le rename en faisant : if (isset($_POST['cfg-element-35-7'])){$nomtodb=$_POST['cfg-element-35-7'];}else{$nomtodb='n/a';}
assure toi bien que le formulaire est posté en POST et non en GET.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Merci de ta présence,
j'ai appliqué le code, cela revient au même.
Par contre j'ai ajouté un préalable qui m'indique que la variable cfg-element-35-7 est vide, ce qui me parait normal puisque le formulaire n'est pas encore rempli, c'est peut être là le problème..
Lorsque je neutralise le if(empty.., je trouve bien dans mon echo $nomtobd le "n/a", c'est obligé puisque cfg-element-35-7 est vide.
Ne s'agirait il pas simplement l'emplacement du code php qui produirait cela, il charge une variable input qui n'existe encore pas puisque étant créée après le submit?
Qu'en penses tu ? est ce que je raisonne mal ?
Voila le code partiel
<?php
if(empty($_POST['cfg-element-35-7']))
{
echo '<font color="red"> champs cfg-element-35-7 vide </font>';
}
// si pas vide, >>> direction enregistrement dans table
else
if (isset($_POST['cfg-element-35-7']))
{$nomtobd=$_POST['cfg-element-35-7'];}
else
{$nomtobd='n/a';}
echo $nomtobd;// vérif ok, me renvoie la variable du "else... == > n/a."
$db=mysql_connect("mabase.eu.mysql", "mabase_eu", "************");// ok
................. etc ..
merci encore
pierrot
Hors ligne
Oui le problème vient en effet de là, ce code PHP doit être parsé une fois le submit effectué, pas avant.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
lorsque je fais
echo '<pre>', print_r($GLOBALS), '</pre>'
cela m'indique à chaque fois [REQUEST_METHOD] => GET
Array
(
[GLOBALS] => Array
*RECURSION*
[_ENV] => Array ...REQUEST_METHOD] => GET
[HTTP_ENV_VARS] => Array...REQUEST_METHOD] => GET
[_SERVER] => Array ....REQUEST_METHOD] => GET
[HTTP_ENV_VARS] => Array...REQUEST_METHOD] => GET.
cela veut il aussi dire que le formulaire est posté en GET ?
Hors ligne
Dans votre code <form> vous avez method="post" ou method="get"? Passez en mode post!
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonsoir,
Je m'étais déjà posé la question,et avais déjà cherché, et pensais que c'était une autre méthode.
J'ai tout recommencé ce soir avec bluefish... sans jamais en avoir trouver un seul <form action ..dans l'ensemble de mes dossiers/fichiers du formulaire, je les tous ouvert un à un, je ne comprends plus ... je ne suis pourtant pas complètement novice, des <form action j'en ai utilisé des quantités dans l'appli, ou alors je suis f.. j'arrête pour ce soir,
Merci Jc
bonne soirée à toi
pierrot
Hors ligne
Si tu ne le vois pas, c'est que l'appel doit se faire en ajax. Contrôle bien côté js.
Bonne soirée
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour Jc,
Merci de ne pas désespérer
J'ai pris bonne note de ton conseil, j'ai commencé à y travailler.
Puis je me suis dit que si je pouvais 'intégrer $nomtobd dans le tableau qui contient "cfg-cfg-element-35-7 ( j'ai transformé $nomtobd en $nomtobase faute d'erreur entre bd et db..) et que je disais qu'elles étaient égales, ça pourrait peut être marcher ?
J'ai donc ajouté 2 lignes de code et ça me donne cela :
<?php
$_POST["cfg-element-35-7"] = array("cfg-element-35-7, nomtobase");
$nomtobase = $_POST["cfg-element-35-7"];
// mes tests echo
// echo $_POST['nomtobase']; //==> n'affiche rien
echo var_dump($nomtobase); // array(1) { [0]=> string(27) "cfg-element-35-7, nomtobase" }
//echo $nomtobase ; // affiche ===> array
//echo print_r($_POST['$nomtobase']); // affiche ==> 1
// echo print_r($nomtobase); // affich Array ( [0] => cfg-element-35-7, nomtobase ) 1
....
Est elle est passée ? ma base enregistre "Array" ?
Est que cette méthode peut être valide ?
Je n'affiche plus de "champ" vide" ( if(empty($_POST['cfg-element-35-7'])){echo '<font color="red"> champs cfg-element-35-7 vide </font>';}, donc il y a une variable qui passe, ? non ?
je vais maintenant "entreprendre" l'Ajax.
Pierrot
Hors ligne
Bonjour,
Bon je pense qu'il est important de ne pas tout mélanger et de faire attention à ce que l'on fait.
Je vous conseille très fortement de :
1) Définir le REGISTER_GLOBAL de PHP à Off (php.ini) pour éviter les problèmes de sécurité liés à ($_POST['abc']===$abc)
2) Ne jamais affecter une valeur en manuel à $_POST et à $_GET (les considérer en lecture seule quand on travaille avec).
A partir de là, votre code actuel est à refaire complètement.
Voilà pas besoin de plus ni de moins.
Dernière modification par Jc (30-09-2014 17:29:29)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Ma version php est 5.3, je peux la passer en 5.4, 5.5 ou 5.6
D’après ce que je crois savoir, en version 4.2, le php.ini est passé sur Off par défaut, mais je vais le vérifier ce soir.
Dans le code : {print "champ 'cfg-element-35-7' non soumis via formulaire";exit;}
Je peux continuer sur l'enregistrement en bd ? parce que soit j'affiche "print.." soit je sors "exit", et là j'arrête le déploiement de mon formulaire.
Faut pas que j'enlève "exit" et engage le processus en base à la place de "exit" ? sinon je ne pourrai jamais entré mes variables dans le formulaire ?
Bonne soirée et merci,
je vais bien finir par y arriver..
pierrot
Hors ligne
Je peux continuer sur l'enregistrement en bd ? parce que soit j'affiche "print.." soit je sors "exit", et là j'arrête le déploiement de mon formulaire.
Non vous n'avez pas compris. Si $nomtodb est égal à 'empty' alors le print ET le exit sont exécutés.
Vous devez mettre le code de traitement à la bd après le commentaire : // traitement base de données de $nomtodb.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
bonsoir Jc,
je confirme , ma version php est 4.3, le php.ini est sur Off, je peux passer en version 5, ou 6
D'autre part j'ai découvert, en lançant le formulaire sans le contactform, que j'avais le message ci dessous, j'ai alors changé 755 par 777 via filezilla, mais ça n'a rien fait :
<The upload directory is not writable: uploads won't work in your form.
Use your FTP software to set the permission to "755" on the "cfg-contactform-35/upload" directory to solve this problem.
Set the permission to "777" if it does not work otherwise.
If there is no "upload" directory inside the "contactform" folder, use your FTP software to create it and set it with the directory permissions mentionned above (755 or 777).>
Concernant le code :
Lorsque j'ai appliqué le dernier code (ci dessous) j'avais en retour toujours : champ 'cfg-element-35-7' non soumis via formulaire
Ça bloque au même endroit, cfg-element-35-7 est vide donc $nomtobd est vide aussi
Pour simplifier
J'ai "tronqué" le code pour y voir plus clair, je remettrai les conditions ultérieurement.
Resultat en bd : champ de la bd = empty et echo var_dump($.. = NULL
Le transfert entre $_POST["cfg-element-35-7 et $nomtobd ne se fait toujours pas
Concernantt le php variables à la fin du doc et Mysql
Voici un lien avec (peut être) de l'info utile ? http://www.one-docs.com/php5/
Ce ne serait pas un problème de Path ?
Tu m'avais parlé du PDO, apparemment il est déjà installé
Je ne te note pas tout les codes que j'ai mis, entr'autres, pour explorer les fichiers et dossiers du répertoire, ce serait trop long,
je vais tenter de contacter le concepteur du formulaire
Je retourne dans le JS ce soir
pierrot
Hors ligne
J'ai "tronqué" le code pour y voir plus clair, je remettrai les conditions ultérieurement.
Le code que je t'ai fourni vérifie déjà toutes les variables. Tu as remplacé un code de test par un autre plus long..
De changer le code de test ne va pas résoudre le problème de transmission de données du formulaire que tu as.
Concernant PHP, il vaut mieux passer/rester en 5.4 pour le moment, la 5.5 et la 5.6 étant "trop jeunes" encore pour les passer en production à mon humble avis mais cela n'engage que moi.
Il vous faut vérifier votre code HTML et votre code Js pour la soumission d'une manière méthodique.
Bonne fin de journée.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Tu as raison, je refais un tour demain,
Mon html est Ok, je viens de le vérifier.
Pourras tu, dés que tu le pourras bien sûr, voir mon interrogation ci-dessous ?
Pourquoi lorsque j'applique la ligne 1 ci dessous je trouve mon echo var_dump() à NULL avec empty dans mon champ bd ?
$sql="INSERT INTO confid (nomprenom) VALUES('".$nomtobase."')";
Et
Si j'applique la ligne2 ci dessous je bloque le formulaire sur l'entrée du nom, et à l'écran j'ai "champ 'cfg-element-35-7' non soumis via formulaire"
$sql="INSERT INTO confid (nomprenom) VALUES ('$nomtobase')";
Merci encore pour tout,
bonne soirée
pierrot
Hors ligne
Si j'applique la ligne2 ci dessous je bloque le formulaire sur l'entrée du nom, et à l'écran j'ai "champ 'cfg-element-35-7' non soumis via formulaire"
Ahhh je comprends mieux. Cela signifie que la page d'affichage du formulaire et la page de traitement des réponses sont les mêmes!! ce qui aurait été sympa de préciser...
voici les modifications à faire:
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne