[RESOLU] pas de reponse au formulaire

Eléphanteau du PHP | 36 Messages

06 janv. 2013, 22:41

Bonjour a tous,

j ai fait ce formulaire :

<title>bienvenue</title>

</head>
<body>

<form method="post" action="modificationbis1.php">

Entrez un mot cle:<br>

<input type="text" name="no_commande" size="15">

<input type="submit" value="Rechercher" alt="Lancer la recherche!">

</form>

</body>
</html>

et voici mon fichier cible :

<?php
//connection au serveur:
$cnx = mysql_connect( "127.0.0.1", "root", "" ) ;

//sélection de la base de données:
$db = mysql_select_db( "verre" ) ;

//requête SQL:
$sql = 'SELECT no_commande FROM imports WHERE no_commande = "'.$_POST['no_commande'].'"';

//exécution de la requête:
$requete = mysql_query( $sql, $cnx ) ;

//affichage des données:
while( $result = mysql_fetch_object( $requete ) )
{
echo(
"<div align=\"center\">"
.$result->no_commande." <a href=\"modification2.php?idno_commande=".$result->id."\">modifier</a></div>\n"
) ;
}
?>

... mais rien ne s affiche, si quelqu'un peu m'aiguiller ?

Merci a tous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 janv. 2013, 23:09

salut,

as tu affiché la requête SQL pour l'essayer dans un client SQL (phpmyadmin par exemple) ?

tu ne devrais pas utiliser ainsi une valeur issue d'un formulaire, car ainsi tu créer une faille SQL (injection sql).
Pour éviter ce type de chose utilise la fonction mysql_real_escape_string.

L'extension mysql_est vouée à disparaître, tu devrais utiliser mysqli à la place. globalement c'est la même chose (le i en plus ;) ) il te faut ajouter en second paramètre des fonctions la connexion sgbd (ce que tu fait déjà sur le mysql_query :) ).

tu peux aussi utiliser la fonction var_dump sur $result pour voir ce qu'elle contient. (et pareil sur les autre variables pour voir comme se comporte ton sript.

pour aller plus loin tu peux regarder comment utiliser un debugger (xdebug ou zend debugger).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 36 Messages

07 janv. 2013, 15:27

Merci Moogli pour ta réponse...

... mais maleuresement c est du chinois pour moi.

Deja que je galère avec php et mysql et tu me dis qu il faut que je change pour mysqli. Je réalise simplement un acces au commande (client) afin d'ajouter une information (n° de plaque) a la fin de la production.

J ai trouvé ces 3 scripts que j ai adapté et ils fonctionnent :

modification1.php
<?php
    //connection au serveur:
    $cnx = mysql_connect( "127.0.0.1", "root", "" ) ;
 
    //sélection de la base de données:
    $db = mysql_select_db( "verre" ) ;
 
    //requête SQL:
    $sql = "SELECT *
	      FROM imports
	      ORDER BY no_commande" ;
 
    //exécution de la requête:
    $requete = mysql_query( $sql, $cnx ) ;
	
	mysql_real_escape_string($no_commande);
 
    //affichage des données:
    while( $result = mysql_fetch_object( $requete ) )
    {
       echo(
           "<div align=\"center\">"
           .$result->no_commande." ".$result->code_client." ".$result->largeur."  x  ".$result->hauteur
           ." <a href=\"modification2.php?idimports=".$result->id."\">modifier</a></div>\n"
       ) ;
    }
  ?>


modification2.php
<?php
  //connection au serveur:
  $cnx = mysql_connect( "127.0.0.1", "root", "" ) ;
 
  //sélection de la base de données:
  $db = mysql_select_db( "verre" ) ;
 
  //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement modifier
  $id  = $_GET["idimports"] ;
 
  //requête SQL:
  $sql = "SELECT *
            FROM imports
	    WHERE id = ".$id ;
 
  //exécution de la requête:
  $requete = mysql_query( $sql, $cnx ) ;
 
  //affichage des données:
  if( $result = mysql_fetch_object( $requete ) )
  {
  ?>
<form name="insertion" action="modification3.php" method="POST">
  <input type="hidden" name="id" value="<?php echo($id) ;?>">
  <table border="0" align="center" cellspacing="2" cellpadding="2">
    <tr align="center">
      <td>no plaque</td>
      <td><input type="text" name="no_plaque" value="<?php echo($result->no_plaque) ;?>"></td>
    </tr>
    <tr align="center">
      <td colspan="2"><input type="submit" value="modifier"></td>
    </tr>
  </table>
</form>
  <?php
  }//fin if 
  ?>


modification3.php
<?php
  //connection au serveur
  $cnx = mysql_connect( "127.0.0.1", "root", "" ) ;
 
  //sélection de la base de données:
  $db  = mysql_select_db( "verre" ) ;
 
  //prenom:
  $no_plaque = $_POST["no_plaque"] ;
  //récupération de l'identifiant de la personne:
  $id         = $_POST["id"] ;
 
  //création de la requête SQL:
  $sql = "UPDATE imports
            SET  no_plaque     = '$no_plaque'

           WHERE id = '$id' " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
 
  //affichage des résultats, pour savoir si la modification a marchée:
  if($requete)
  {
    echo("La modification à été correctement effectuée") ;
  }
  else
  {
    echo("La modification à échouée") ;
  }
?>
mais dans modification1.php tout la base s affiche alors que je voudrais pouvoir selectionner 1 seul n°de commande (qui peux avoir 1,2,3 voir plus d'entrer dans la bd "imports".

Est ce que c est clair ??? :oops:

Peux tu me dire pourquoi rien ne s affiche avec mon formualire ?
Modifié en dernier par coqenpatte le 07 janv. 2013, 18:42, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2013, 15:33

Pour ton premier script il faut plus d'information.
En l'état je dirai que ça fonctionne mais... Tu nous annonces que ce n'est pas le cas. :P

Pour debuguer tu peux modifier ton exécution de requête comme suit :
$requete = mysql_query( $sql, $cnx ) or die(mysql_error()) ;
A noter que cela n'est pas à laisser lors de la mise en production de l'application.
Car ce genre d'information est du pain béni pour les méchants garçons. :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 janv. 2013, 15:43

Modération :
@coqenpatte : afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 36 Messages

07 janv. 2013, 15:57

Merci de ton aide,

voici le déroulement,

modification1.php,
affiche toute ma base de donnees,suivi du bouton(lien) modifier, exemple :

121078 METALLERIE 1167 x 1311 modifier
121495 BONNA SA 1184 x 1704 modifier
121495 BONNA SA 1184 x 2164 modifier
121495 BONNA SA 1184 x 1749 modifier
121495 BONNA SA 1184 x 1749 modifier
12101495 BONNA SA 1184 x 2329 modifier
121001 EI 690 x 2205 modifier

modification2.php


no plaque +zone de saisie de texte ( le numero de la plaque) et un bouton 'mofifier'

Et modification3.php

le message "La modification à été correctement effectuée" (et la base est bien remplie)

Comme ca pas de probleme !

Maintenant ce que moi j ai essayé:

formulaire.php
<title>bienvenue</title>

</head>
<body>

<form method="post" action="modificationbis1.php">

Entrez un mot cle:<br>

<input type="text" name="no_commande" size="15">

<input type="submit" value="Rechercher" alt="Lancer la recherche!">

</form>

</body>
</html>
saisie normale !,

modificationbis1.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
  <head>
    <title>modification de données en PHP :: partie 1</title>
  </head>
<body>
  <?php
    //connection au serveur:
    $cnx = mysql_connect( "127.0.0.1", "root", "" ) ;
 
    //sélection de la base de données:
    $db = mysql_select_db( "verre" ) ;
 
    //requête SQL:
    $sql = 'SELECT no_commande FROM imports WHERE no_commande = "'.$_POST['no_commande'].'"';
 
    //exécution de la requête:
    $requete = mysql_query( $sql, $cnx ) ;
 
    //affichage des données:
    while( $result = mysql_fetch_object( $requete ) )
    {
       echo(
           "<div align=\"center\">"
           .$result->no_commande." <a href=\"modification2.php?idno_commande=".$result->id."\">modifier</a></div>\n"
       ) ;
    }
  ?>
</body>
</html>
et la page vide ! et quand je regarde la source, il n y a rien !!!
Modifié en dernier par coqenpatte le 07 janv. 2013, 18:44, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2013, 16:06

Si je comprends bien.. Tu réponds à mon message...
Mais sans l'avoir lu ? :-k

Eléphanteau du PHP | 36 Messages

07 janv. 2013, 16:26

xTG

tu veux que je mette la requette sur quel scripts ?

le formulaire ?

désolé pour les balises, je ferais attention.

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2013, 16:43

C'était à destination de ton script modificationbis1.php.
Mais à te relire... Tu n'as absolument rien dans la source HTML ? Même pas ceci :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<title>modification de données en PHP :: partie 1</title>
</head>
<body>
:shock:

Eléphanteau du PHP | 36 Messages

07 janv. 2013, 18:04

oui , j'ai ce message mais rien d'autre.

Eléphanteau du PHP | 36 Messages

07 janv. 2013, 18:16

Voila l'erreur que cela me retourne :
Notice: Undefined property: stdClass::$id in C:\monsite\etiquettes\modificationbis1.php on line 25
12101495 modifier

Eléphanteau du PHP | 36 Messages

07 janv. 2013, 18:24

merci, grace a l affichage de l'erreur j ai pu corriger, maintenant ma commande s'affiche, c est pas encore ca mais ca progresse !

@+ tard (ou pas :D )