Gros problème php/sql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Gros problème php/sql

par jardins » 04 déc. 2007, 21:27

Truc, je te remercie beaucoup de t'être penché sur mon cas - Quant à Gadgino, bah si je peux continuer à rentrer mes fiches maintenant, c'est grâce à lui - Pour un membre inscrit d'aujourd'hui, bah bonjour :D
Je clôture donc et vous remercie tous. Mais je pense... à de prochaines aventures - Lol

par gadgino » 04 déc. 2007, 21:16

le probleme à été repéré:
Requête : INSERT INTO especes (id_espece, nom, id_plante, photo, description) VALUES ('', 'Rondeletia amoena', '1[/image]2', 'rondeletia.amoena.jpg', 'Rondeletia amoena porte des feuilles velues. Ses fleurs blanc rosé présentent des poils jaunes sur la gorge et sont disposées en gros corymbes.')
Il me dit :
un 102 serait le bien venu.
on remplace:

Code : Tout sélectionner

$id_plante = remplace(protec($_POST['id_plante']));
par:
//DEBUG DEBUT
//mis en doute: $id_plante = remplace(protec($_POST['id_plante']));

//on se recupaire quelque resultat de fonction d'ou pourrait venir l'erreur.
$test0db = $_POST['id_plante'];                               
$test1db = protec($_POST['id_plante']);
$test2db = remplace(protec($_POST['id_plante']));

//on les affiches
echo "<br />test0 = ".$test0db."<br />";       //on affiche test0 la chaine de caractaire poster
echo "test1 = ".$test1db."<br />";     //on affiche test1 la chaine retourner par la fonction protec()
echo "test2 = ".$test2db."<br />";     //on affiche test2 la chaine retourner par la fonction remplace()

//on teste une roue de secour le code ne peut rester ainsi. probleme d'injection de code.
$id_plante = $_POST['id_plante'];   //on test sans les fonction mise en doute

//FIN DEBUG 
sa affiche
test0 = 102
test1 = 102
test2 = 1[/image]2
le probleme est cerné sa vient de la fonction remplace() que voici:
function remplace($texte){
    $trans = array("[gras]" => "<span class=\"gras\">", "[/gras]" => "</span>",
                    "[italic]" => "<span class=\"italic\">", "[/italic]" => "</span>",
                    "[souligne]" => "<span class=\"souligne\">", "[/souligne]" => "</span>",
                    "[lien]" => "<a href=\"\">", "[/lien]" => "</a>",
               "[image]" => "<img src=\"\">", "[/image]" );
               
    return strtr($texte,$trans);
} 
on voit que la balise "[/image]" n'a pas reçut de valeur: ce qui equivaut à NULL=>"[/image]".
on remarque que strtr() interprete le '0' comme NULL et donc a fait l'echange (enfin conclusion attive à verifier).

pour resoudre le probleme on affecte rien à "[/image]" : "[/image]"=>"".
Voila le bug est coriger. reste plus qu'as nettoyer la base du virus "[/image]":
exemple sur le site:
Chaque tige se couronne d'une inflorescence de 1[/image] à 15 cm composée de bractées cordiformes jaune d'or à pointes vertes, d'où émergent des fleurs blanches de 5 cm.
ce qui promet d'autres aventures. vous comprendrait que ce site n'est pas 0 mais tout en [/image] plus que moqueur c'est plutot vrais.
ps: vous l'aurrais compris on c'est occuper du probleme en priver ce qui a eviter quelque 10 de poste

par jardins » 04 déc. 2007, 18:25

Voilà le code source de la plante id 102 sur laquelle l'espèce id 282 aurait du se lier

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>plante: Rondeletia</title> <meta name="keywords" content="Rondeletia," /> <meta name="description" content="Le rondeletia est un bel arbuste à croissance lente. Ses feuilles sont opposées, coriaces, luisantes et vert foncé. De forme elliptique, elles sont pointues à leur extrémité et mesurent de 5 à 1[/image] cm de longueur. Cette plante est cultivée pour sa belle floraison qui a lieu toute l'année, blanc rosé et jaune, en corymbes odorants.<br /> <br /> L'espèce peut vivre longtemps si les conditions de culture lui conviennent." /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> <link rel="stylesheet" type="text/css" href="design.css" media="screen" /> <script language="javascript"> function popup(url,height,width) { window.open(url,"popup","toolbar=0, location=0, directories=0, status=0, menubar=0, scrollbars=yes, resizable=yes, width="+width+", height="+height+", top=80, left=150"); } </script> </head> <body> <div id="global"> <div id="en_tete"> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="750" height="70"> <param name="movie" value="../boutons-objets/banniere.site.4.swf" /> <param name="quality" value="high" /> <embed src="../boutons-objets/banniere.site.4.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="750" height="70"></embed> </object> </div> <div align="center"> Le site Jardins-interieurs - version 3.0 - et son menu <br> <a href="../index.php"><img src="../menu/site.gif" width="62" height="29" border="0"></a> <a href="http://jardins-interieurs.forumactif.com/index.htm"><img src="../menu/forum.gif" width="90" height="29" border="0"></a> <a href="../annuaire/index.php"><img src="../menu/annuaire.gif" width="103" height="29" border="0"></a> <a href="../plantes.vertes.php"><img src="../menu/plantes.vertes.gif" width="265" height="29" border="0"></a> <a href="../liste-fougeres.html"><img src="../menu/fougeres.gif" width="119" height="29" border="0"></a> <a href="../liste-palmiers.html"><img src="../menu/palmiers.gif" width="120" height="29" border="0"></a> <a href="http://jardins-interieurs.forumactif.com/forum-consacre-aux-cactees-et-succulentes-f4/"><img src="../menu/cactees.gif" alt ="Pas de rubrique cactees sur le site - ce lien conduit à notre forum consacre aux succulentes et plantes grasses" width="104" height="29" border="0"></a> <a href="../liste-orchidees.html"><img src="../menu/orchidees.gif" width="128" height="29" border="0"></a> <a href="../liste.plantes.ombre.html"><img src="../menu/plantes.ombre.gif" width="189" height="29" border="0"></a> <a href="../index.fiches.pratiques.html"><img src="../menu/fiches.pratiques.gif" width="186" height="29" border="0"></a> <a href="../lexique/frame.lexique.html"><img src="../menu/lexique.gif" width="98" height="29" border="0"></a> <a href="../index.jeux.html"><img src="../menu/jeux.gif" width="78" height="29" border="0"></a> <a href="../index.liens.html"><img src="../menu/liens.gif" width="82" height="29" border="0"></a> <a href="../contact/contact.php"><img src="../menu/me.contacter.gif" width="122" height="29" border="0"></a></div> <p class="chemin">&nbsp; accueil <img src="images/design/fleche.png" alt="->" class="fleche" /> plantes vertes <img src="images/design/fleche.png" alt="->" class="fleche" /> Rondeletia &nbsp; <img src="images/design/fleche.png" alt="->" class="fleche" />&nbsp; <span><font color="#FF0000"> Les photos et esp&egrave;ces manquantes ne demandent qu'&agrave; &ecirc;tre compl&eacute;t&eacute;es par vos soins - </font></span> </p> <div id="zone_droite"> <h2>Espèces - 0</h2> <p>de: AF | GM | NZ</p> <br /> <b>Warning</b>: mysql_data_seek() [<a href='function.mysql-data-seek'>function.mysql-data-seek</a>]: Offset 0 is invalid for MySQL result index 6 (or the query data is unbuffered) in <b>/home/jardins/www/v3/plante.php</b> on line <b>65</b><br /> </div> <div id="conseils"> <br /> L'avis du jardinier <br /> <br> <p class="bulle">Difficile à cultiver en intérieur (besoin de beaucoup de chaleur, de lumière et d'humidité).</p> <img src="images/design/bulle.jardinier.gif" /> <img src="images/design/jardinier.png" /> <br /> <script type="text/javascript"><!-- google_ad_client = "pub-8896816659633897"; //120x600, 14/11/07-2 google_ad_slot = "2993301712"; google_ad_width = 120; google_ad_height = 600; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><br /><br /><br /> <script type="text/javascript"><!-- google_ad_client = "pub-8896816659633897"; //160x90, date de création 02/12/07 google_ad_slot = "6904789549"; google_ad_width = 160; google_ad_height = 90; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> <div id="corps"> <h1>Rondeletia</h1> <img src="images/plantes/" class="img_principale" /> <h2>carte d'identité</h2> <h3>Nom commun: </h3> <p class="premier"></p> <h3 class="attribut">famille: </h3> <p class="second">Rubiacées</p> <h3 class="attribut">Origine: </h3> <p class="premier">Le rondeletia est originaire des Antilles et d'Amérique tropicale et subtropicale.</p> <h2 class="attribut">Description: </h2> <p>Le rondeletia est un bel arbuste à croissance lente. Ses feuilles sont opposées, coriaces, luisantes et vert foncé. De forme elliptique, elles sont pointues à leur extrémité et mesurent de 5 à 1[/image] cm de longueur. Cette plante est cultivée pour sa belle floraison qui a lieu toute l'année, blanc rosé et jaune, en corymbes odorants.<br /> <br /> L'espèce peut vivre longtemps si les conditions de culture lui conviennent.</p> <h3>floraison</h3> <div class="conteneur"> <img src="images/design/floraison.gif" class="img_conseil" /> <p class="premier">La floraison a lieu presque toute l'année si les conditions de culture sont bonnes. Pour cela, cultivez la plante au-dessus d'un récipient d'eau garni de galets ou de billes d'agile. Bassinez fréquemment la plante quand il fait chaud. Plus votre rondeletia bénéficiera de chaleur et d'humidité et de lumière, plus sa floraison sera abondante.<br /> Les petites fleurs sont regroupées en gros bouquets au-dessus du feuillage. Dans les tons blancs, blanc-rosé, jaunes, orangé ou rouges, elles dégagent souvent un très agréable parfum.</p> <div class="separation"></div> </div> <h3>Croissance</h3> <div class="conteneur"> <img src="images/design/croissance.gif" class="img_conseil" /> <p class="second">Dans son milieu naturel, le rondeletia atteint de 1 à 2,5[/image] m selon l'espèce. En pot ou en bac, il atteindra lentement 5[/image] cm sur un long laps de temps.</p> <div class="separation"></div> </div> <h3>utilisation</h3> <div class="conteneur"> <img src="images/design/utilisation.gif" class="img_conseil" /> <p class="premier">D'origine tropicale voire subtropicale, le rondeletia a besoin de chaleur et d'humidité. C'est évidemment en serre qu'il sera le plus facile de réunir tout ce dont il a besoin. En appartement, ce sera beaucoup plus difficile. Cultivez-le en isolé devant une fenêtre exposée au sud et procurez-lui le plus d'humidité possible.</p> <div class="separation"></div> </div> <h2>Soins</h2> <div class="conteneur"> <img src="images/design/emplacement.gif" class="img_conseil" alt="emplacement" title="emplacement" /> <p class="premier">Le rondeletia a besoin d'une situation lumineuse et la plus ensoleillée possible toute l'année.</p> <div class="separation"></div> </div> <div class="conteneur"> <img src="images/design/entretien.gif" class="img_conseil" alt="entretien" title="entretien"/> <p class="second">Cultivez cette plante au-dessus d'un récipient d'eau garni de galets ou de billes d'agile. Bassinez-la le plus souvent possible avec une eau non calcaire. Durant la belle saison, sortez la à un emplacement très ensoleillé. En hiver, si possible, conservez la plante aux alentours de 15° en la forçant à prendre un repos hivernal. Elle sera moins sensible aux mauvaises conditions d'un appartement chauffé au chauffage central en hiver et dont l'air serait trop sec.<br /> Supprimez les fleurs fanées au fur et à mesure.</p> <div class="separation"></div> </div> <div class="conteneur"> <img src="images/design/temperature.gif" class="img_conseil" alt="temperature" title="temperature" /> <p class="premier">Le rondeletia apprécie les fortes chaleurs estivales et le plus d'ensoleillement possible. En hiver, si vous n'avez pas la possibilité d'offrir à la plante à la fois de la chaleur et une humidité atmosphérique très importante, mettez-la au repos dans un endroit assez frais sans descendre en dessous de 15°. Une véranda ou un jardin d'hiver conviendront.</p> <div class="separation"></div> </div> <div class="conteneur"> <img src="images/design/arrosoir.gif" class="img_conseil" alt="arrosage" title="arrosage" /> <p class="second">En été, arrosez copieusement de manière à ce que le mélange soit toujours maintenu humide. Réduisez les arrosages en hiver et laissez sécher le mélange terreux sur près de sa moitié entre chaque apport en eau. .Réduisez d'autant plus que la plante sera à la fraîcheur. Un rondeletia conservé à 15°C ne sera arrosé que pour empêcher la motte de se dessécher complètement.</p> <div class="separation"></div> </div> <div class="conteneur"> <img src="images/design/engrais.gif" class="img_conseil" alt="engrais" title="engrais" /> <p class="premier">En été, apportez une dose d'engrais ordinaire liquide tous les quinze jours. Cessez tout apport durant la floraison et pendant les mois d'hiver.</p> <div class="separation"></div> </div> <div class="conteneur"> <img src="images/design/rempotage.gif" class="img_conseil" alt="rempotage" title="rempotage" /> <p class="second">Rempotez les jeunes plants tous les ans au printemps dans un mélange de terreau et de terre de bruyère dans un pot plus grand d'une taille. Les sujets adultes ou qui auront atteint de belles dimensions au bout de nombreuses années seront simplement surfacés.</p> <div class="separation"></div> </div> <h2>Problèmes</h2> <h3>Maladies et erreurs de culture</h3> <p>Des taches brunes sur les feuilles indiquent une trop grande sécheresse de l'air ou du mélange terreux. Bassinez à l'eau non calcaire et maintenez le mélange bien humide en été.<br /> <br /> Les feuilles se dessèchent et tombent si l'air est trop sec. Bassinez et cultivez cette plante au-dessus d'un récipient d'eau garni de galets ou de billes d'agile.<br /> <br /> Les feuilles brunissent et noircissent en hiver. Trop froid et trop humide. Laissez la motte se dessécher presque complètement entre chaque arrosage. Maintenez la plante à 15°C minimum.</p> <h3>Parasites</h3> <p>Les cochenilles farineuses forment de petites masses cotonneuses et blanchâtres sur les tiges et sous les feuilles. Éliminez-les à l'aide d'un coton-tige imbibé d'alcool à brûler ou d'alcool dénaturé. En cas d'attaque sévère, utilisez un insecticide systémique.</p> <h2>Multiplication</h2> <p>Le rondeletia se multiplie par boutures terminales semi-ligneuses. Au printemps, prélevez des boutures de 1[/image] cm, juste au-dessous d'un nœud. Enlevez les feuilles inférieures et plongez les tiges dans de la poudre d'hormones de bouturage. Plantez dans un pot de 8 cm rempli d'un mélange humide de tourbe et de sable. Enfermez dans un sachet de plastique transparent ou dans une caissette de multiplication. Conservez à une lumière moyenne et à 2[/image]°. Lorsque la croissance reprend, ôtez le sachet de plastique et rempotez dans le mélange préconisé. Pincez les jeunes pousses pour favoriser la ramification.</p> </div> <br /> <div id="pied"> <a href="http://www.copyrightdepot.com/rep79/00039177.htm" target="_blank"><img src="../boutons-objets/copyright.gif" width="130" height="37" border="0"></a> </div> </div> </body> </html>
Et merci pour le tri alphabétique
Mais attends un peu Truc car Gadgino est en train de m'aider en faisant des tests sur le code.

Requête : INSERT INTO especes (id_espece, nom, id_plante, photo, description) VALUES ('', 'Rondeletia amoena', '1[/image]2', 'rondeletia.amoena.jpg', 'Rondeletia amoena porte des feuilles velues. Ses fleurs blanc rosé présentent des poils jaunes sur la gorge et sont disposées en gros corymbes.')
Il me dit :
tu vois en gras le '1[/image]2' c'est la qu'il te faut '102' pour que sa marche. Peut etre que le probleme vient des verifications qui evite l'injection de code
Il est donc en train de me faire faire des tests à ce niveau là -
Je vous tiens au courant - Merci

par Truc » 04 déc. 2007, 17:29

Tu as un souci ici
... VALUES ('', 'Rondeletia amoena', '1[/image]2', ...
un numérique est attendu mais tu fournis "1[/image]2" ... un problème lié à la fonction javascript (pour l'ajout d'une image :-k) ou peut être lors de la construction de la liste (select).
Montre nous le code source généré... sur la page (internet) tu fais un clic droit > code source.

Pour l'ordre alphabétique sur la liste il faut ajouter un tri avec ORDER BY
$req_plantes = mysql_query("SELECT nom,id_plante FROM plantes ORDER BY nom");

par jardins » 04 déc. 2007, 14:20

ALors je fais la manip suivante :
J'ajoute une espèce à la plante rondeletia - Je la sélectionne dans la liste déroulante (qui s'affiche malheureusement par ordre de rentrée des plantes et non par leur ordre alphabétique) j'entre le nom de l'espèce, la photo et la description -
Je valide et ça m'affiche ça :
Requête : INSERT INTO especes (id_espece, nom, id_plante, photo, description) VALUES ('', 'Rondeletia amoena', '1[/image]2', 'rondeletia.amoena.jpg', 'Rondeletia amoena porte des feuilles velues. Ses fleurs blanc rosé présentent des poils jaunes sur la gorge et sont disposées en gros corymbes.')

* index administration |
* modifier

valeurs enregistrées

Maintenant, quand je vais dans phpMyAdmin, je constate que la plante Rondeletia porte le n° d'id 102 -
L'espèce que je viens de rentrer : Rondeletia amoena porte l'id 282 mais s'est liée à l'id_plante 1 qui est Abutilon et non à l'id_plante 102

par Truc » 03 déc. 2007, 23:18

la page d'ajout d'espèce avait une drôle de tronche quand j'ai validé :?
Hmm oui puisque tu as normalement affiché la requête qui insert en base de donnée.
Donc tu dois voir un truc du style :

"Requête : INSERT INTO ...."

Poste nous ça.

par jardins » 03 déc. 2007, 20:26

L'inverse Truc, c'est quand j'essaye de rajouter des espèces à une plante.
J'ai modifié mon code comme suit par rapport à tes indications, mais ça n'a pas l'air de marcher. :
<?
require("../includes/conf.php");
require("../includes/connexion.php");
require("../includes/fonctions.php");

if(isset($_POST['ajout']))
{
    if($_POST['ajout']== 'plante')
    {
        $id_categorie= remplace(protec($_POST['id_categorie']));
        $nom = remplace(protec($_POST['nom']));
        $nc = remplace(protec($_POST['nc']));
        $famille = remplace(protec($_POST['famille']));
        $origine = remplace(protec($_POST['origine']));
        $description = remplace(protec($_POST['description']));
        $floraison = remplace(protec($_POST['floraison']));
        $croissance = remplace(protec($_POST['croissance']));
        $utilisation = remplace(protec($_POST['utilisation']));
        $emplacement  = remplace(protec($_POST['emplacement']));
        $entretien = remplace(protec($_POST['entretien']));
        $temperature = remplace(protec($_POST['temperature']));
        $arrosage = remplace(protec($_POST['arrosage']));
        $engrais = remplace(protec($_POST['engrais']));
        $rempotage = remplace(protec($_POST['rempotage']));
        $maladies = remplace(protec($_POST['maladies']));
        $parasites = remplace(protec($_POST['parasites']));
        $multiplication = remplace(protec($_POST['multiplication']));
		$conseils = remplace(protec($_POST['conseils']));

        $req_up_plante = mysql_query("INSERT INTO plantes (id_plante, nom, id_categorie, nc, famille, origine, description, floraison, croissance, utilisation, emplacement, entretien, temperature, arrosage, engrais,rempotage, maladies, parasites, multiplication, conseils) VALUES ('','".$nom."', '".$id_categorie."', '".$nc."','".$famille."','".$origine."','".$description."','".$floraison."','".$croissance."','".$utilisation."','".$emplacement."','".$entretien."','".$temperature."','".$arrosage."','".$engrais."','".$rempotage."','".$maladies."','".$parasites."','".$multiplication."','".$conseils."' )  ");
        if($req_up_plante)
            $mess = "valeurs enregistrées";

    }
    elseif($_POST['ajout']== 'espece')
    {
        $id_plante = remplace(protec($_POST['id_plante']));
        $nom = remplace(protec($_POST['nom']));
        $photo = remplace(protec($_POST['photo']));
        $description = remplace(protec($_POST['description']));

        $sql = "INSERT INTO especes  (id_espece, nom, id_plante, photo, description) VALUES ('', '".$nom."', '".$id_plante."', '".$photo."', '".$description."') "; 

echo "<p>Requête : ".$sql."</p>"; 

$req_up_espece = mysql_query($sql);
            $mess = "valeurs enregistrées";
    }
}



if(isset($_GET['plante']))
{
    $req_categories = mysql_query("SELECT * FROM familles ");
}
elseif(isset($_GET['espece']))
{
    $req_plantes = mysql_query("SELECT nom,id_plante FROM plantes ");
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>page index</title>
	<meta name="keywords" content="mots clefs" />
	<meta name="description" content="description" />
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
	<link rel="stylesheet" type="text/css" href="design_prive.css" media="screen" />
    <script type="text/javascript">
<!--
function insertion(repdeb, repfin, textarea) {
  var input = document.forms['formulaire'].elements[textarea];
  input.focus();
  /* pour l'Explorer Internet  */
  if(typeof document.selection != 'undefined') {
    /* Insertion du code de formatage */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = repdeb + insText + repfin;
    /* Ajustement de la position du curseur  */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -repfin.length);
    } else {
      range.moveStart('character', repdeb.length + insText.length + repfin.length);
    }
    range.select();
  }
  /* pour navigateurs plus récents basés sur Gecko */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Insertion du code de formatage  */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
    /* Ajustement de la position du curseur  */
    var pos;
    if (insText.length == 0) {
      pos = start + repdeb.length;
    } else {
      pos = start + repdeb.length + insText.length + repfin.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* pour les autres navigateurs  */
  else
  {
    /* requête de la position d'insertion  */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Insertion du code de formatage  */
    var insText = prompt("Veuillez entrer le texte à formater:");
    input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
  }
}
//-->
</script>
</head>

<body>
<div id="menu">
    <ul>
        <li><a href="index.php">index administration</a> |</li>
        <li><a href="modifier.php">modifier</a></li>
    </ul>
</div>
<?
if (isset($mess))
    echo "<p>".$mess."</p>";
elseif(isset($_GET['plante']))
{
?>
<div id="form_modif">
<h1>ajout d'une plante -- complétez le formulaire puis validez</h1>
    <p class="boutons"><a href="#" name="replace" onClick="insertion('[gras]', '[/gras]', getVar); return false;" ><img src="../images/design/bouton_g.jpg"  alt="gras" title="gras" /></a><br /><a href="#" onClick="insertion('[italic]', '[/italic]', getVar); return false;"><img src="../images/design/bouton_i.jpg" alt="italic" title="italic" /></a><br /><a href="#" onClick="insertion('[souligne]', '[/souligne]', getVar); return false;"><img src="../images/design/bouton_s.jpg" alt="souligné" title="souligné" /></a><br /><a href="#" onClick="insertion('[lien]', '[/lien]', getVar); return false;"><img src="../images/design/bouton_a.jpg" alt="lien" title="lien" /></a>
	<br /><a href="#" onClick="insertion('[image]', '[/image]', getVar); return false;"><img src="../images/design/bouton_img.jpg" alt="image" title="image" /></a>
	</p>
<form name="formulaire" method="post" action="ajouter.php" >
<div id="partie_gauche">
    <p>selectionner une catégorie:</p>
    <select name="id_categorie">
    <?
        while($categories = mysql_fetch_assoc($req_categories))
        {
            echo '<option value="'.$categories['id'].'">'.$categories['nom'].'</option>';
        }
    ?>
    </select>
    <p>nom:</p>
    <input type="texte" name="nom" value="" />
    <p>nom commun:</p>
    <input type="texte" name="nc" value="" />
    <p>famille:</p>
    <input type="texte" name="famille" value="" />
    <p>origine:</p>
    <textarea name="origine"  onfocus="getVar='origine';"></textarea>

    <p>description:</p>
    <textarea name="description" onfocus="getVar='description';"></textarea>

    <p>floraison</p>
    <textarea name="floraison" onfocus="getVar='floraison';"></textarea>
    <p>croissance</p>
    <textarea name="croissance" onfocus="getVar='croissance';"></textarea>
    <p>utilisation</p>
    <textarea name="utilisation" onfocus="getVar='utilisation';"></textarea>
    <p>emplacement</p>
    <textarea name="emplacement" onfocus="getVar='emplacement';"></textarea>
    <p>entretien</p>
    <textarea name="entretien" onfocus="getVar='entretien';"></textarea>
</div>
<div id="partie_droite">
    <input type="submit" value="valider" />
    <p>temperature</p>
    <textarea name="temperature" onfocus="getVar='temperature';"></textarea>
    <p>arrosage</p>
    <textarea name="arrosage" onfocus="getVar='arrosage';"></textarea>
    <p>engrais</p>
    <textarea name="engrais" onfocus="getVar='engrais';"></textarea>
    <p>rempotage</p>
    <textarea name="rempotage" onfocus="getVar='rempotage';"></textarea>
    <p>maladies et erreurs de culture</p>
    <textarea name="maladies" onfocus="getVar='maladies';"></textarea>
    <p>parasites</p>
    <textarea name="parasites" onfocus="getVar='parasites';"></textarea>
    <p>multiplication</p>
    <textarea name="multiplication" onfocus="getVar='multiplication';"></textarea>
	<p>conseils</p>
    <textarea name="conseils" onfocus="getVar='conseils';"></textarea>

    <input type="hidden" name="ajout" value="plante" />
    <input type="submit" value="valider" />
</div>
</form>
</div>
<?
}
elseif(isset($_GET['espece']))
{
?>
<div id="form_modif">
<h1>ajouter les infos puis valider</h1>
<form method="post" action="ajouter.php" name="formulaire">
    <p>selectionner une plante:</p>
    <p class="boutons"><a href="#" name="replace" onClick="insertion('[gras]', '[/gras]', getVar); return false;" ><img src="../images/design/bouton_g.jpg"  alt="gras" title="gras" /></a><br /><a href="#" onClick="insertion('[italic]', '[/italic]', getVar); return false;"><img src="../images/design/bouton_i.jpg" alt="italic" title="italic" /></a><br /><a href="#" onClick="insertion('[souligne]', '[/souligne]', getVar); return false;"><img src="../images/design/bouton_s.jpg" alt="souligné" title="souligné" /></a><br /><a href="#" onClick="insertion('[lien]', '[/lien]', getVar); return false;"><img src="../images/design/bouton_a.jpg" alt="lien" title="lien" /></a><br /><a href="#" onClick="insertion('[image]', '[/image]', getVar); return false;"><img src="../images/design/bouton_img.jpg" alt="image" title="image" /></a></p>
    <select name="id_plante">
    <?
        while($plante = mysql_fetch_assoc($req_plantes))
        {
            echo '<option value="'.$plante['id_plante'].'">'.$plante['nom'].'</option>';
        }
    ?>
    </select>
    <p>nom:</p>
    <input type="texte" name="nom" value="" />
    <p>nom photo:</p>
    <input type="texte" name="photo" value="" />
    <p>description:</p>
    <textarea name="description" onfocus="getVar='description';"></textarea>

    <input type="hidden" name="ajout" value="espece" /><br />
    <input type="submit" value="valider" />
</form>
<?
}
?>

</body>
</html>
L'espèce que je viens de rentrer s'est collée sur la plante 1 (toujours) au lieude se rattacher à la plante 101 + que la page d'ajout d'espèce avait une drôle de tronche quand j'ai validé :?

par Truc » 03 déc. 2007, 19:30

Maintenant qu'on sait que tu utilises des int pour clés...

Le souci se présente lorsque tu essaies d'ajouter des plantes à une espèce ?
modifie le code :
$sql = "INSERT INTO especes  (id_espece, nom, id_plante, photo, description) VALUES ('', '".$nom."', '".$id_plante."', '".$photo."', '".$description."') ";

echo "<p>Requête : ".$sql."</p>";

$req_up_espece = mysql_query($sql);
et poste nous le résultat avec plusieur données ($id_plante différentes)

par jardins » 03 déc. 2007, 17:36

Ok merci - Voilà les données :

Code : Tout sélectionner

Version du serveur: 4.1.21 Structure de la table 'especes' CREATE TABLE especes ( id_espece int(11) NOT NULL auto_increment, nom text NOT NULL, id_plante int(11) NOT NULL default '0', photo varchar(200) NOT NULL default '', description text NOT NULL, KEY id (id_espece) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- Structure de la table 'plantes' CREATE TABLE plantes ( id_plante int(11) NOT NULL auto_increment, nom text NOT NULL, id_categorie smallint(6) NOT NULL default '0', nc text NOT NULL, famille text NOT NULL, origine text NOT NULL, description text NOT NULL, especes text NOT NULL, floraison text NOT NULL, croissance text NOT NULL, utilisation text NOT NULL, emplacement text NOT NULL, entretien text NOT NULL, temperature text NOT NULL, arrosage text NOT NULL, engrais text NOT NULL, rempotage text NOT NULL, maladies text NOT NULL, parasites text NOT NULL, multiplication text NOT NULL, conseils text NOT NULL, KEY id (id_plante) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

par Truc » 03 déc. 2007, 15:37

Modération :
jardins, afin d'obtenir une réponse sur ce forum, il est indispensable de :

- Préciser quel est le SGBD utilisé ainsi que sa Version
- Poster la Structure des Tables utilisées dans la requête sous la forme d'un "CREATE TABLE ..." :!:
(Vous pouvez exporter la structure d'une table via phpMyAdmin. Retirez les colonnes inutiles)

Gros problème php/sql

par jardins » 03 déc. 2007, 15:09

Voilà, j’ai fait un site de plantes en 2000, uniquement en html. Le code et la conception étant devenus obsolètes, un programmeur a commencé à refaire mon site en php/sql puis m’a laissé en plan.
Je me heurte maintenant à une série de bugs que je n’arrive pas à résoudre seul.
J’ai lancé un appel général sur ce post :
http://www.phpfrance.com/forums/voir_sujet-34548.php
– Mais peut-être qu’on peut m’aider sur un problème particulier que je rencontre là.
Dans un premier temps, je rentre les plantes dans un formulaire. Puis ensuite, je rentre les espèces qui doivent être liées aux plantes.
Premier bug que j’ai rencontré, l’espère allant avec la plante 10 se mettait sur la plante 1 – Pareil pour 20, 30 etc.. sur les plantes 2, 3 etc…
J’ai réussi à forcer le 0 dans la base de données directement et encore, ça n’a pas été facile car le 0 du pavé numérique du clavier ne passait pas.
Maintenant j’arrive à l’espèce qui doit se lier à la plante 101 et là rien à faire – Ca se colle sur la plante 1 et je ne peux rien y faire.
Codes :
Page fonctions.php :
<?
function protec($donnees) {
	return (get_magic_quotes_gpc())?strip_tags(trim($donnees), "<span>, <a>"):addslashes(strip_tags(trim($donnees), "<span>, <a>"));
}

function de_form($valeur){
    return (get_magic_quotes_gpc())?stripslahes(trim($valeur)):trim($valeur);
}
?>
Page ajouter plante.php
<?
require("../includes/conf.php");
require("../includes/connexion.php");
require("../includes/fonctions.php");

if(isset($_POST['ajout']))
{
    if($_POST['ajout']== 'plante')
    {
        $id_categorie= remplace(protec($_POST['id_categorie']));
        $nom = remplace(protec($_POST['nom']));
        $nc = remplace(protec($_POST['nc']));
        $famille = remplace(protec($_POST['famille']));
        $origine = remplace(protec($_POST['origine']));
        $description = remplace(protec($_POST['description']));
        $floraison = remplace(protec($_POST['floraison']));
        $croissance = remplace(protec($_POST['croissance']));
        $utilisation = remplace(protec($_POST['utilisation']));
        $emplacement  = remplace(protec($_POST['emplacement']));
        $entretien = remplace(protec($_POST['entretien']));
        $temperature = remplace(protec($_POST['temperature']));
        $arrosage = remplace(protec($_POST['arrosage']));
        $engrais = remplace(protec($_POST['engrais']));
        $rempotage = remplace(protec($_POST['rempotage']));
        $maladies = remplace(protec($_POST['maladies']));
        $parasites = remplace(protec($_POST['parasites']));
        $multiplication = remplace(protec($_POST['multiplication']));
		$conseils = remplace(protec($_POST['conseils']));

        $req_up_plante = mysql_query("INSERT INTO plantes (id_plante, nom, id_categorie, nc, famille, origine, description, floraison, croissance, utilisation, emplacement, entretien, temperature, arrosage, engrais,rempotage, maladies, parasites, multiplication, conseils) VALUES ('','".$nom."', '".$id_categorie."', '".$nc."','".$famille."','".$origine."','".$description."','".$floraison."','".$croissance."','".$utilisation."','".$emplacement."','".$entretien."','".$temperature."','".$arrosage."','".$engrais."','".$rempotage."','".$maladies."','".$parasites."','".$multiplication."','".$conseils."' )  ");
        if($req_up_plante)
            $mess = "valeurs enregistrées";

    }
    elseif($_POST['ajout']== 'espece')
    {
        $id_plante = remplace(protec($_POST['id_plante']));
        $nom = remplace(protec($_POST['nom']));
        $photo = remplace(protec($_POST['photo']));
        $description = remplace(protec($_POST['description']));

        $req_up_espece = mysql_query("INSERT INTO especes  (id_espece, nom, id_plante, photo, description) VALUES ('', '".$nom."', '".$id_plante."', '".$photo."', '".$description."') ");
        if($req_up_espece)
            $mess = "valeurs enregistrées";
    }
}



if(isset($_GET['plante']))
{
    $req_categories = mysql_query("SELECT * FROM familles ");
}
elseif(isset($_GET['espece']))
{
    $req_plantes = mysql_query("SELECT nom,id_plante FROM plantes ");
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>page index</title>
	<meta name="keywords" content="mots clefs" />
	<meta name="description" content="description" />
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
	<link rel="stylesheet" type="text/css" href="design_prive.css" media="screen" />
    <script type="text/javascript">
<!--
function insertion(repdeb, repfin, textarea) {
  var input = document.forms['formulaire'].elements[textarea];
  input.focus();
  /* pour l'Explorer Internet  */
  if(typeof document.selection != 'undefined') {
    /* Insertion du code de formatage */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = repdeb + insText + repfin;
    /* Ajustement de la position du curseur  */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -repfin.length);
    } else {
      range.moveStart('character', repdeb.length + insText.length + repfin.length);
    }
    range.select();
  }
  /* pour navigateurs plus récents basés sur Gecko */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Insertion du code de formatage  */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
    /* Ajustement de la position du curseur  */
    var pos;
    if (insText.length == 0) {
      pos = start + repdeb.length;
    } else {
      pos = start + repdeb.length + insText.length + repfin.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* pour les autres navigateurs  */
  else
  {
    /* requête de la position d'insertion  */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Insertion du code de formatage  */
    var insText = prompt("Veuillez entrer le texte à formater:");
    input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
  }
}
//-->
</script>
</head>

<body>
<div id="menu">
    <ul>
        <li><a href="index.php">index administration</a> |</li>
        <li><a href="modifier.php">modifier</a></li>
    </ul>
</div>
<?
if (isset($mess))
    echo "<p>".$mess."</p>";
elseif(isset($_GET['plante']))
{
?>
<div id="form_modif">
<h1>ajout d'une plante -- complétez le formulaire puis validez</h1>
    <p class="boutons"><a href="#" name="replace" onClick="insertion('[gras]', '[/gras]', getVar); return false;" ><img src="../images/design/bouton_g.jpg"  alt="gras" title="gras" /></a><br /><a href="#" onClick="insertion('[italic]', '[/italic]', getVar); return false;"><img src="../images/design/bouton_i.jpg" alt="italic" title="italic" /></a><br /><a href="#" onClick="insertion('[souligne]', '[/souligne]', getVar); return false;"><img src="../images/design/bouton_s.jpg" alt="souligné" title="souligné" /></a><br /><a href="#" onClick="insertion('[lien]', '[/lien]', getVar); return false;"><img src="../images/design/bouton_a.jpg" alt="lien" title="lien" /></a>
	<br /><a href="#" onClick="insertion('[image]', '[/image]', getVar); return false;"><img src="../images/design/bouton_img.jpg" alt="image" title="image" /></a>
	</p>
<form name="formulaire" method="post" action="ajouter.php" >
<div id="partie_gauche">
    <p>selectionner une catégorie:</p>
    <select name="id_categorie">
    <?
        while($categories = mysql_fetch_assoc($req_categories))
        {
            echo '<option value="'.$categories['id'].'">'.$categories['nom'].'</option>';
        }
    ?>
    </select>
    <p>nom:</p>
    <input type="texte" name="nom" value="" />
    <p>nom commun:</p>
    <input type="texte" name="nc" value="" />
    <p>famille:</p>
    <input type="texte" name="famille" value="" />
    <p>origine:</p>
    <textarea name="origine"  onfocus="getVar='origine';"></textarea>

    <p>description:</p>
    <textarea name="description" onfocus="getVar='description';"></textarea>

    <p>floraison</p>
    <textarea name="floraison" onfocus="getVar='floraison';"></textarea>
    <p>croissance</p>
    <textarea name="croissance" onfocus="getVar='croissance';"></textarea>
    <p>utilisation</p>
    <textarea name="utilisation" onfocus="getVar='utilisation';"></textarea>
    <p>emplacement</p>
    <textarea name="emplacement" onfocus="getVar='emplacement';"></textarea>
    <p>entretien</p>
    <textarea name="entretien" onfocus="getVar='entretien';"></textarea>
</div>
<div id="partie_droite">
    <input type="submit" value="valider" />
    <p>temperature</p>
    <textarea name="temperature" onfocus="getVar='temperature';"></textarea>
    <p>arrosage</p>
    <textarea name="arrosage" onfocus="getVar='arrosage';"></textarea>
    <p>engrais</p>
    <textarea name="engrais" onfocus="getVar='engrais';"></textarea>
    <p>rempotage</p>
    <textarea name="rempotage" onfocus="getVar='rempotage';"></textarea>
    <p>maladies et erreurs de culture</p>
    <textarea name="maladies" onfocus="getVar='maladies';"></textarea>
    <p>parasites</p>
    <textarea name="parasites" onfocus="getVar='parasites';"></textarea>
    <p>multiplication</p>
    <textarea name="multiplication" onfocus="getVar='multiplication';"></textarea>
	<p>conseils</p>
    <textarea name="conseils" onfocus="getVar='conseils';"></textarea>

    <input type="hidden" name="ajout" value="plante" />
    <input type="submit" value="valider" />
</div>
</form>
</div>
<?
}
elseif(isset($_GET['espece']))
{
?>
<div id="form_modif">
<h1>ajouter les infos puis valider</h1>
<form method="post" action="ajouter.php" name="formulaire">
    <p>selectionner une plante:</p>
    <p class="boutons"><a href="#" name="replace" onClick="insertion('[gras]', '[/gras]', getVar); return false;" ><img src="../images/design/bouton_g.jpg"  alt="gras" title="gras" /></a><br /><a href="#" onClick="insertion('[italic]', '[/italic]', getVar); return false;"><img src="../images/design/bouton_i.jpg" alt="italic" title="italic" /></a><br /><a href="#" onClick="insertion('[souligne]', '[/souligne]', getVar); return false;"><img src="../images/design/bouton_s.jpg" alt="souligné" title="souligné" /></a><br /><a href="#" onClick="insertion('[lien]', '[/lien]', getVar); return false;"><img src="../images/design/bouton_a.jpg" alt="lien" title="lien" /></a><br /><a href="#" onClick="insertion('[image]', '[/image]', getVar); return false;"><img src="../images/design/bouton_img.jpg" alt="image" title="image" /></a></p>
    <select name="id_plante">
    <?
        while($plante = mysql_fetch_assoc($req_plantes))
        {
            echo '<option value="'.$plante['id_plante'].'">'.$plante['nom'].'</option>';
        }
    ?>
    </select>
    <p>nom:</p>
    <input type="texte" name="nom" value="" />
    <p>nom photo:</p>
    <input type="texte" name="photo" value="" />
    <p>description:</p>
    <textarea name="description" onfocus="getVar='description';"></textarea>

    <input type="hidden" name="ajout" value="espece" /><br />
    <input type="submit" value="valider" />
</form>
<?
}
?>
Est-ce que dans ce code, quelque chose pourrait expliquer mon problème ? Merci