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 : Forum Général PHP » [Résolu] Besoin d'un script svp » 22-05-2010 08:02:36

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

#2 Re : Forum Général PHP » [Résolu] Probleme affichage dans page html resultat requete php/mysql » 21-05-2010 08:32:22

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

var_dump($_REQUEST);

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.

#3 Re : Forum Général PHP » application » 20-05-2010 20:16:03

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.

#4 Re : Forum Général PHP » Checkbox avec tableau :( » 19-05-2010 10:36:01

Pour ton premier post c'était simplement

$tadid=$_POST['choix'];

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

$id=$_POST['choix'];

ne sert plus à rien, que

foreach($_POST['choix'] as $index => $val)

serait plus simple ainsi

foreach($_POST['choix'] as $val)

et que tu peux rendre ta requete SQL plus correcte comme ça (je suppose que ton id est en autoincrement) :

INSERT INTO platsdujour(jour, mois, annee, id_site) VALUES('$jour','$mois','$annee','$val')

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).

#5 Re : MySQL, PostgreSQL, etc... » Extraire d'un champ texte seulement la phrase contenant le mot clé » 18-05-2010 15:43:01

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.

#6 Re : Forum Général PHP » Checkbox avec tableau :( » 19-05-2010 10:36:01

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.

#7 Re : Forum Général PHP » double fonctions d'include » 18-05-2010 21:37:29

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.

#8 Re : Forum Général PHP » Checkbox avec tableau :( » 19-05-2010 10:36:01

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

#10 Re : MySQL, PostgreSQL, etc... » [Résolu] Une petite aide pour un novice^^ » 18-05-2010 14:40:45

Oki, merci pour ta réponse, je vais essayer de perdre cette manie.

#11 Re : Forum Général PHP » Checkbox avec tableau :( » 19-05-2010 10:36:01

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.

#12 Re : Forum Général PHP » double fonctions d'include » 18-05-2010 21:37:29

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.

#13 Re : MySQL, PostgreSQL, etc... » Extraire d'un champ texte seulement la phrase contenant le mot clé » 18-05-2010 15:43:01

Bonjour,

SELECT
SUBSTR (`fr`,
-(LOCATE('.',REVERSE(`fr`),LOCATE(REVERSE('$box_mot_cle'),REVERSE(`fr`))))+1,
LOCATE('.',
SUBSTR(`fr`,
-(LOCATE('.',REVERSE(`fr`),LOCATE(REVERSE('$box_mot_cle'),REVERSE(`fr`))))+1)))
FROM `wp_contenus`
WHERE `fr` LIKE '%$box_mot_cle%'

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

LOCATE('.',`fr`,LOCATE('$box_mot_cle',`fr`))

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

LOCATE('.',REVERSE(`fr`),LOCATE(REVERSE('$box_mot_cle'),REVERSE(`fr`)))

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).

SUBSTR (`fr`,-(LOCATE('.',REVERSE(`fr`),LOCATE(REVERSE('$box_mot_cle'),REVERSE(`fr`))))+1)

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 !)

LOCATE('.',SUBSTR(`fr`,-(LOCATE('.',REVERSE(`fr`),LOCATE(REVERSE('$box_mot_cle'),REVERSE(`fr`))))+1))

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).

#14 Re : Forum Général PHP » double fonctions d'include » 18-05-2010 21:37:29

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_data.php
<?php
$var="val";
?>

//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.

#15 Re : Forum Général PHP » Un message d'erreur » 17-05-2010 09:06:50

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 se connecte à MySQL
$db = mysql_connect('localhost', 'login', 'password');

// 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.

#16 Re : MySQL, PostgreSQL, etc... » [Résolu] Une petite aide pour un novice^^ » 18-05-2010 14:40:45

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.

#17 Re : Forum Général PHP » Afficher un tableau avec une boucle while » 17-05-2010 08:41:14

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 :

while($var=mysql_fetch_array($result)){
echo '<tr>';
        echo '<td bgcolor=\"#CCCCCC\">'.$var['nomcolonne1'].'</td>';
        echo '<td bgcolor=\"#CCCCCC\">'.$var['nomcolonne2'].'</td>';
        echo '<td bgcolor=\"#CCCCCC\">'.$var['nomcolonne3'].'</td>';
        echo '<td bgcolor=\"#CCCCCC\">'.$var['nomcolonne4'].'</td>';
echo '</tr>'."\n";
   }
 

Si ça ne marche pas fait un

var_dump($var);

dans ta boucle while et copie colle le résultat ici, ce sera plus simple.

#18 Re : MySQL, PostgreSQL, etc... » [Résolu] Une petite aide pour un novice^^ » 18-05-2010 14:40:45

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 :

$sql = "SELECT Email,login,password FROM utilisateurs '".addslashes($login)."';";
 

l'est tout autant non ?

#19 Re : MySQL, PostgreSQL, etc... » [Résolu] Une petite aide pour un novice^^ » 18-05-2010 14:40:45

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.

#20 Forum Général PHP » double fonctions d'include » 18-05-2010 21:37:29

Sergnal
Réponses : 12

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 :

include('fichier_data.php');
include('fichier_echo.php');

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).

$ordre_appel=0;

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 :

mon_include('fichier_main.php','fichier_data.php');
mon_include('fichier_main.php','fichier_echo.php');

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.

#21 Re : MySQL, PostgreSQL, etc... » [Résolu] Un petit problème de rien du tout » 12-05-2010 15:52:40

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à.

#22 Re : MySQL, PostgreSQL, etc... » [Résolu] Un petit problème de rien du tout » 12-05-2010 15:52:40

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.

#23 Re : Forum Général PHP » Afficher des données dans des images pour en limiter les copier/coller » 13-05-2010 11:36:26

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.

#24 Re : Forum Général PHP » [Résolu] création article dans balise <div> » 13-05-2010 18:15:17

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 :

<div><?php if($_GET['page']=='test2')include('test2.php');
else include('test1.php'); ?></div>

Et au niveau des liens dans tes onglets ce seras :

href=index.php

qui envoie sur l'affichage test1 et

href=index.php?page=test2

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).

#25 Re : HTML, xHTML CSS » bordure et colspan firefox » 12-05-2010 10:18:28

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).

Pied de page des forums

Propulsé par FluxBB