Vous n'êtes pas identifié(e).
Te donner un coup de main oui, te donner un script tout fait non ^^
Essaie de faire quelque chose et repost ici lorsque tu auras des problèmes.
Et pour t'aider a commencer :
http://www.phpdebutant.org/article67.php
Bonjour,
C'est "amusant" (autant que peut l'être un problème de prog ^^) car malgré ta modif le formulaire se conduit toujours de la même manière (passage d'infos dans l'url).
J'ai regardé la source de la page que tu donnes en lien et tu as deux balises form imbriquées avec le même nom...
Le problème sembles donc venir du code qui se trouve autour de celui que tu modifies(et donc rien ne change, logique ^^).
Et si le problème persiste après avoir viré ce form en trop, met donc qqs echo de $_POST['ord'], de $choix voire même un
dans ton code et regarde ce que ça renvoie.
Edit : arf finalement mon post complète celui de pierrot, le form qu'il indique est celui en trop, quelques lignes en dessous se trouve le form correct.
Bonjour,
Attention dis comme ça on dirais que tu nous demande de faire le travail à ta place et ça pourrait être mal pris. Dis nous ce que tu veux exactement.
Dans tous les cas avec le peu de détails que tu donnes on ne va pas pouvoir faire grand chose pour toi, à par te conseiller de lire les tutos de phpdebutant.
Pour ton premier post c'était simplement
Pour celui que tu viens de mettre et bien... qu'est-ce que tu veux que je te dise ? Si c'est "est-ce que c'est un code correct" je dirais que je ne vois pas d'erreur apparente sur ce bout de code, juste que
ne sert plus à rien, que
serait plus simple ainsi
et que tu peux rendre ta requete SQL plus correcte comme ça (je suppose que ton id est en autoincrement) :
Après si c'est "pourquoi ça ne marche pas" et bien je ne vois pas où tu as défini tes variables $jour,$mois,$annee et je ne vois pas non plus ta connection à la bdd (mysql_connect et mysql_select_db). Mais si c'est ça je te conseille d'aller lire quelques tutos supplémentaires sur php, les variables et les interactions avec la base de donnée (si c'est pas ça je m'en excuse par avance).
Moi non plus, mais en php il existe les fonctions strpos(), strrev() et substr() qui devraient permettre de faire exactement la même chose que le SQL ^^
Ceci dit je suis d'accord sur le fait qu'une seule regex serait plus efficace que cet imbroglio de fonctions.
En fait ton premier code était bon, il y avait juste une ptite erreur au niveau des variables $id et $tadid que tu devrais maintenant pouvoir trouver.
Mais c'est une bonne idée d'utiliser isset, pour que le code qui est juste au-dessus fonctionne il n'y a qu'à retirer ce qui sert à rien et rajouter la connexion à la bdd et l'envoi de requête.
Bonjour,
Tout globaliser serait effectivement une solution et effectivement aberrant (surtout avec une appli de cette taille), ton système de rangement est bien pensé mais représente un travail certain et sur l'ensemble du code (qui n'est à la base pas spécialement prévu pour du OO).
Sinon je suis très intéressé par ton squelette de fonctions, si tu pouvais m'en dire un peu plus pour que je vois comment fonctionne le concept je t'en serais reconnaissant.
Et bien c'est déjà le cas : tu sélectionne plusieurs lignes, toutes les valeurs sont stockés sous la forme d'un array (les tableaux php) et envoyées dans le $_POST. Simplement au lieu d'envoyer les infos directement comme tu dois le faire il faut les récupérer dans le script php.
Voilà qui devrais te mettre sur la voie : http://www.phpdebutant.org/article11.php
Tout le plaisir est pour moi ^^
Oki, merci pour ta réponse, je vais essayer de perdre cette manie.
Bonjour,
Effectivement c'est bien ce "choix[]" le problème. Le "[]" indique un tableau (array), donc soit tu le retires simplement (mais en ce cas transformer ta checkbox en bouton radio serait peut-être une bonne idée), soit tu le laisses (si par exemple tu veux que l'on puisse sélectionner plusieurs lignes à la fois) mais il faut rajouter un traitement php de $_POST['choix'] pour récupérer chaque valeur du tableau.
Justement là est la question, là est le problème ^^
Normalement avec le double include() de la page fichier_main.php le transfert se fait sans problème.
Actuellement avec la double fonction mon_include() il ne se fait pas, ce qui est le comportement logique et normal (les variables restent dans leurs fonctions), mais pas le comportement voulu.
Bonjour,
Bon c'est très fouilli, très brouillon, ça ne marchera sans doute que sous MySQL et je pense qu'il y avait plus simple... mais ça marche ^^
La logique est simple, pour aller chercher le point après le mot-clef on fait
c'est-à-dire qu'on cherche le mot clef puis le point qui se trouve après.
Donc pour aller chercher celui qui se trouve avant c'est
c'est-à-dire qu'on se contente de tout inverser.
Bon c'est très bien mais on a notre position à partir de la fin... bah SUBSTR peux prendre des valeurs négatives comme deuxième argument (il les compte à partir de la fin, ça tombe bien c'est juste ce qu'il nous faut), il nous suffit donc de mettre notre valeur précédente en négatif (et on rajoute 1 pour pas prendre le point).
Impec, y'a plus qu'à indiquer en troisième argument de SUBSTR le nombre de caractère qu'il doit prendre, donc le nombre de caractère jusqu'au prochain point... donc le premier point de la chaine qu'on vient de récupérer (argh !)
Ca fait bien long tout ça, mais bon, on rajoute ça en argument au premier SUBSTR et paf ça marche !
Voilà bon courage (et si d'autres membres ont un code moins long qu'ils n'hésitent pas).
Bonjour,
Merci pour cette réponse pour le moins structurée, la preuve est faite, je ne suis pas doué pour expliquer mes problèmes ^^
Mais c'est en forgeant... donc me revoilà tout gonflé d'énergie pour un nouvel essai.
Tout d'abord non je ne connaissait pas le passage de variable par référence (qu'on lui coupe la tête !) mais il ne résoud pas mon problème (ou alors je ne l'ai pas utilisé correctement).
Pour clarifier la situation l'objectif est la réécriture du code à l'occasion de la migration du site vers un autre SGBD, et en profiter pour rendre l'interface plus ergonomique et le code plus clair en fonction d'un nouveau cahier des charges.
Dans mon post précédent j'ai effectivement fait une erreur (que je vais mettre sur le compte de la fatigue) en disant vouloir séparer chaque fichier en trois, il s'agissait en fait de chaque interface (constituée effectivement de plusieursss fichiersss). C'est en testant cette séparation sur une sous-partie du code que je suis tombé sur l'os.
En effet un autre point du cahier des charges demande la création d'une fonction qui prendra en charge tous les appels de fichiers, c'est ce point qui est problèmatique.
De manière "simple" et purement technique :
//fichier_echo.php
<?php
echo $var;
?>
//fonction.php
<?php
function mon_include($page_mere,$page_fille) //très très simplifiée hein ^^
{
//... traitement ...
include($page_fille);
}?>
//fichier_main.php
<?php
//1 :ça ne marche pas, $var est défini dans la première fonction mon_include et n'est pas accessible ailleurs
include(fonction.php);
mon_include('fichier_main.php','fichier_data.php');
mon_include('fichier_main.php','fichier_echo.php');
//2 :ça marche mais il va falloir ajouter le traitement d'une manière ou d'une autre
//include('fichier_data.php');
//include('fichier_echo.php');
?>
Je cherche donc un moyen de faire marcher la solution 1 (qui puisse marcher avec un fichier contenant n'importe quel nombre de variable) et s'il n'y en a pas je me rabattrai sur la solution 2 (avec les solutions déjà évoquée plus haut si je n'en trouve pas de meilleure).
Voilà j'ai essayé d'être plus clair concernant l'énoncé du problème.
Sinon tu parles des structures bdd des logiciels de généalogie, mais dans quelle optique dois-je y jeter un oeil ?
Encore merci d'avoir pris le temps de me répondre.
Bonjour,
J'ai une très mauvaise vu donc je m'excuse si j'ai loupé une partie du code mais je ne vois pas la connection à la base de donnée dans ton code.
// on sélectionne la base
mysql_select_db('nom_de_la_base',$db);
Je ne peux que te renvoyer aux excellents tutos du site comme celui là http://www.phpdebutant.org/article66.php.
Au risque de faire un peu tête de mule (mais c'est toute ma conception des requêtes sql que tu remet en cause là ^^) tu pourrais expliciter un peu en quoi ce ";" qui est parfaitement placé entre ses doubles quotes rend l'encapsulation de ma requête incorrecte ?
Encore une fois c'est pas pour être de mauvaise foi mais pour le coup j'ai besoin de comprendre.
Bonjour,
Quand tu dis :
la table "mot" qui comprend 9 lignes et 4 colonnes donc 36 mots.
je suppose que tu as mis un nom différent à chaque colonne non ? Donc lors de ton while tu devrais faire comme ça :
Si ça ne marche pas fait un
dans ta boucle while et copie colle le résultat ici, ce sera plus simple.
Pour une ligne de code je considérait qu'on perdait plus de place qu'on ne gagnait en visibilité mais c'est vrai qu'en faisant la comparaison je vais faire un effort.
Et pour le premier ; c'est juste mon habitude (il me semblait que c'en était une bonne) de finir mes requêtes SQL par un ; ce qui est fait automatiquement par (tous ?) les SGBD. Donc certes ta solution est correct mais la mienne :
l'est tout autant non ?
Non.
$sql = "SELECT Email,login,password FROM utilisateurs '".addslashes($login)."';";
Oui ^^
Attention aux quotes simples/doubles, utilise un éditeur qui fait de la coloration syntaxique pour éviter ça.
Bonjour,
J'ai une problématiques assez simple à résoudre mais soit ce n'est pas optimisés, soit je ne sait pas faire.
Le but est de "trier" les scripts php d'un site web (plusieurs centaines de pages tout de même, mais on va se concentrer sur les interfaces) de manière à en faciliter la maintenance (parce que les précédents développeurs ont rajoutés/modifiés au fur et à mesure et donc le résultat...).
Techniquement ça se traduit par la décomposition de chaque fichier en trois script : fichier_data.php (celui qui contient les requêtes sql et les transformations de données), fichier_echo.php (celui qui contient tout l'affichage) et fichier_main.php (celui qui rassemble les deux autres).
Donc en théorie un fichier_main.php contiendrait :
Ca marche c'est tout beau. Mais, contrainte : pour des raisons une nouvelle fois d'entretien il faudrait pouvoir, à chaque include, aller écrire dans la bdd le fichier appelant et le fichier appelé pour générer automatiquement l'arborescence du site. Bien entendu l'écriture dans la base ne dois pas s'effectuer à chaque fois mais par exemple lorsqu'on passe dans un mode spécifique (une variable de session).
D'où première solution trouvée : une fonction intermédiaire "mon_include" (incomplète au niveau du sql certes mais ce n'est pas le sujet ici).
function mon_include($page_mere,$page_fille)
{
global $ordre_appel;
$ordre_appel+=1;
$sql="INSERT into plan_scripts('".$page_mere."','".$page_fille."','".$ordre_appel."','inclusion')";
include($page_fille);
}
Ce qui nous donnerait donc un fichier_main contenant (en plus d'un lien vers la fonction ci-dessus :
Problème majeur : la portée des variables. En effet l'affichage marche sans problème mais ne peut pas récupérer les variables que devrait lui passer fichier_data.php puisque celui-ci est appelé dans une fonction et donc ses variables sont considérées comme locale à cette fonction.
Il y a encore la solution de laisser les includes et de créer une fonction post_include qui se chargerait uniquement d'écrire dans la base ou de tricher en utilisant eval(), mais ça ne me satisfait pas.
C'est pour cela que je sollicite humblement votre avis pour savoir :
1/ si notre stratégie vous parait pertinente.
2/ si mon problème a une meilleure solution que celles que j'évoque.
3/ si on peut modifier/copier les fonctions natives de php (ou où trouver de la documentation là-dessus, je n'ai rien trouvé et je ne sais pas comment elles sont faites donc je ne sais pas si c'est possible).
Merci d'avoir lu jusqu'au bout. J'espère avoir réussit à exposer mon problème assez clairement.
Boulet que je suis :
$sql="INSERT INTO `utilisateurs`(id,login,password,) VALUES('' ,'".$login."' ,'".$pass."' );";
donc sans la virgule :
$sql="INSERT INTO `utilisateurs`(id,login,password) VALUES('' ,'".$login."' ,'".$pass."' );";
et pis pour être bien sûr :
$sql="INSERT INTO `utilisateurs`(`login`,`password`) VALUES ('".$login."' ,'".$pass."' );";
Si tu ne veux pas mettre de valeur à id autant ne pas le déclarer, sql mettra automatiquement la valeur par défaut.
Voilà.
Bonjour,
$sql="INSERT INTO `utilisateurs`(id,login,password,) VALUES('' ,'".$login."' ,'".$pass."' );";
$sql n'est jamais qu'une chaine de caractère comme une autre, php ne peux donc la comprendre correctement qu'avec des quotes autour.
Vi c'est le ptit problème du code que je t'ai passé, tu peux l'adapter facilement en mettant un id à ta "zone éditable" (ton conteneur : div, table ou autre) et en remplaçant les "document" par "document.getElementById('id_zone_editable')" dans le code. Ca devrait marcher pour les onmouse et autre onclick mais par contre mieux vaut laisser les onkeypress comme ça, je pense pas qu'on puisse les appliquer qu'à une zone.
Tout dépend si tu veux que la modification du texte se fasse de manière dynamique (sans rechargement de page) et là -> ajax (vu ce que tu dis de ton niveau je pense que c'est pas conseillé).
Et sinon beaucoup plus simple, la manière "statique" tu renommes index.html en index.php et tu fait ta div comme ça :
Et au niveau des liens dans tes onglets ce seras :
qui envoie sur l'affichage test1 et
qui envoie sur l'affichage de test2
Pour expliquer vite fait : ta page attend un argument 'page' dans l'URL (l'adresse dans la barre d'adresse, plus d'info ici). Si elle le reçoit elle ouvre la page test2, sinon elle ouvre la page par défaut test1.
Voilà j'espère que ça résoud ton problème (sinon y'avait ptêt moyen avec les templates mais j'y connais rien).
Et bien c'est plus complet que ce que j'avais trouvé de mon côté.
Malheureusement "inline" ne donne pas non plus le résultat attendu et table-row & co sont inutilisable s'ils ne sont implémentés qu'à partir de IE8 (enfin dans quelques années pourquoi pas).