[php] Afficher un résumé après insert into

Résolu/Fermé
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 5 mars 2007 à 14:22
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 8 mars 2007 à 11:19
Salut a tous !

Bon ! j'avance un peu. lentement mais j'avance. Le code ci-dessous fonctionne (il ajoute un enregistrement dans ma table test à partir d'un formulaire qu'on renseigne).
Le Pb c'est qu'on a un message disant "Votre fiche a bien été ajoutée" mais la personne qui sera sensée faire cet ajout n'a pas un tableau qui s'afficherait sous forme de fiche détaillée comme ici. http://txiki.free.fr/fiche_detail.php?id=99
J'aurais bien voulu avoir ce tableau au moment du clic sur le formulaire. Comment est-ce possible d'afficher ce tableau ?

<?
$groupe = $_POST['groupe'];
$categorie = $_POST['categorie'];
$source = $_POST['source'];
$editeur = $_POST['editeur'];
$nom = $_POST['nom'];
$ligne_produit = $_POST['ligne_produit'];
$socle = $_POST['socle'];
$reference_DSI = $_POST['reference_DSI'];
$standard_DSI = $_POST['standard_DSI'];
$type_licence = $_POST['type_licence'];
$version_standard = $_POST['version_standard'];
$compatibilite_XP = $_POST['compatibilite_XP'];
$versions_exploitation = $_POST['versions_exploitation'];
$type_deploiement = $_POST['type_deploiement'];
$type_installation = $_POST['type_installation'];
$domaine = $_POST['domaine'];
$fonctionnalite = $_POST['fonctionnalite'];
$description = $_POST['description'];
$instructions = $_POST['instructions'];
$pre_requis = $_POST['pre_requis'];
$referent_metier = $_POST['referent_metier'];
$commentaires = $_POST['commentaires'];
// =================================================
// On se connecte et on choisi la base de données
// =================================================

mysql_pconnect("localhost","root","") or die ("Impossible de se connecter à MySQL");
mysql_select_db("test") or die("Impossible de sélectionner la base de données");

// ======================================
// insertion des valeurs dans la base
// ======================================
$requete = "insert into test values('', '$groupe', '$categorie', '$source', '$editeur', '$nom', '$ligne_produit', '$socle', '$reference_DSI', '$standard_DSI', '$type_licence', '$version_standard', '$compatibilite_XP', '$versions_exploitation', '$type_deploiement', '$type_installation', '$domaine', '$fonctionnalite', '$description', '$instructions', '$pre_requis', '$referent_metier','$commentaires')";
mysql_query($requete);

if ($requete) {
  echo "<p class=\"reussie\"> Votre fiche a bien été ajoutée </p>";
} else {
  echo "<p class=\"echec\"> Il y a eu un problème avec votre requête </p>";
  echo "<p>" . mysql_error() . "</p>";
}
mysql_close();
?>

Merci d'avance pour votre aide très précieuse. Je suis vraiment débutant en PHP mais je commence a me débrouiller.
A voir également:

9 réponses

nauno Messages postés 342 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 14 mai 2009 60
5 mars 2007 à 14:48
c'est pas très compliqué!
// ======================================
// insertion des valeurs dans la base
// ======================================
$requete = "insert into test values('', '$groupe', '$categorie', '$source', '$editeur', '$nom', '$ligne_produit', '$socle', '$reference_DSI', '$standard_DSI', '$type_licence', '$version_standard', '$compatibilite_XP', '$versions_exploitation', '$type_deploiement', '$type_installation', '$domaine', '$fonctionnalite', '$description', '$instructions', '$pre_requis', '$referent_metier','$commentaires')";
mysql_query($requete);

if ($requete) {
  echo "<p class=\"reussie\"> Votre fiche a bien été ajoutée </p>
<!--créé ici un tableau contenant les données du formulaire que tu viens d'insérer dans ta base-->";
} else {
  echo "<p class=\"echec\"> Il y a eu un problème avec votre requête </p>";
  echo "<p>" . mysql_error() . "</p>";
}
mysql_close();
?>

0
benkeeper Messages postés 81 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 26 janvier 2008 45
5 mars 2007 à 14:53
A mon avis, il suffit de se servir des variables utilisées pour l'insertion dans la base ($groupe, $categorie ...) et de les insérer dans un tableau HTML classique à la place ou à la suite de echo "<p class=\"reussie\"> Votre fiche a bien été ajoutée </p>";

ex :

echo "<table>";
echo "<tr><td>$groupe</td><td>$categorie</td></tr>";
....
echo "</table>";

Si les infos à afficher ne sont pas trop nombreuses, c'est une solution simple.

Sinon il faudra rappeler le dernier enregistrement dans la base à l'aide d'une requête de type

$requete = "SELECT noms_champ1, nom_champ2 [...] FROM test WHERE id = " . mysql_insert_id() . ";
(en supposant que id est le nom du champ identifiant de l'enregistrement, sinon mettre le nom correspondant)

La ligne sera récupérée par un $tab = mysql_fetch_array($resultat_requete)

Et les valeurs affichées ainsi : $tab['nom_champ1'], $tab['nom_champ1'] ... à utiliser toujours dans un tableau HTML classique.

Petite astuce, si vous souhaitez utiliser les variables d'un tableau dans une chaine de caractère, il faut utiliser les accolades { et } de cette manière :

echo "<td>{$tab['nom_champ1']}</td>"


Ben :)

PS : mysql_insert_id() renvoie la dernière valeur attribuée par l'autoincrement de mysql
0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
5 mars 2007 à 16:21
Merci beaucoup les gars !
Mais j'ai trouvé un truc. Quand on est sur cette page http://txiki.free.fr/liste.php (le site déconne depuis hier soir alors faire F5) . En cliquant sur Supprimer de l'un des logiciels j'arrive a afficher ce tableau.

Mais le bouton de confirmation n'apparait pas dans la dernière ligne du tableau (???) donc j'ai fait un lien en dessous mais il ne fonctionne pas non plus.
Chez free on voit pas mais voici ce que j'ai en local: Confirmez l'Ajout ?

Notice: Undefined index: id in g:\sites web\txiki\confirm.php on line 15
et voici ma ligne 15:
$id=$_GET["id"]; // La manipulation de $id est plus simple que celle de $_POST["id"]

Il y a ausi un petit 1 qui s'affiche à gauche de la page.
le code de la page delete.php:
<?
// ==================================================
// On recupere la variable "id" correspondant au logiciel choisi
// ==================================================
$id=$_GET["id"]; // La manipulation de $id est plus simple que celle de $_POST["id"]

// ==================================================
// On se connecte et on choisi la base de données
// ==================================================
mysql_pconnect("localhost","root","") or die ("Impossible de se connecter à MySQL");
mysql_select_db("test") or die("Impossible de sélectionner la base de données");

//=====================================================================================
// requête SQL qui affiche les infos de la fiche correspondante au lien cliqué 
//=====================================================================================
$link = '$link';
$select = "select * FROM test where id='$id'"; // On selectionne seulement la ligne qui correspond au logiciel choisi 
$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );
$row= mysql_fetch_row($result);  // mysql_fetch_row genere un tableau correspondant a la ligne selectionnée de la BDD
// Les informations sont accessibles par $row["id"], $row["nom"], $row["source"]...

// ===================================================
// Affichage de la fiche dans un tablea&u dynamique 
// ===================================================
  echo "<table width='80%' bgcolor='#FFFFFF' border='1' border-color='#FF0000' cellspacing='0' cellpadding='8' align='center'>\n";
// première ligne on affiche le titre "Fiche logicielle" dans 2 colonnes fusionnées
        echo "<tr text-align='center' padding='3px'>";
        echo "<td colspan='2' bgcolor='#FF9900'><h2> Fiche logicielle </h2></td>";
        echo "</tr>\n";
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par lot de 3 lignes.    
  echo "<tr bgcolor='#FFFFFF' text-align='center'>";
  echo "<td width='50%' colspan='2'><strong class='echec'> N° d'enregistrement: </strong><strong>" .$row['0']."</strong></td>"; // le n° d'enregistrement 
  echo "<tr>";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Groupe: </strong>" .$row['1']."</td>"; // affiche le groupe du logiciel 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Catégorie: </strong>" .$row['2']."</td>"; // affiche la catégorie du logiciel 
  echo "</tr>\n";
  echo "<tr>";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Source: </strong>" .$row['3']."</td>"; // affiche la source du logiciel 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Editeur: </strong>" .$row['4']."</td>"; // affiche l'éditeur du logiciel 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Nom: </strong><strong class='echec'>" .$row['5']."</strong></td>"; // affiche le nom du logiciel 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Ligne du produit: </strong>" .$row['6']."</td>"; // affiche le nom (interne) de la ligne produit
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Socle: </strong>" .$row['7']."</td>"; // affiche le socle nécessaire pour son installation
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Référence DSI: </strong>" .$row['8']."</td>"; // affiche la référence DSI (cat, ref etc...) 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Standard DSI: </strong>" .$row['9']."</td>"; // affiche le standard de la DSI
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Type de licence: </strong>" .$row['10']."</td>"; // affiche le type de licence (flottante, etc...) 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Version standard: </strong>" .$row['11']."</td>"; // affiche la version utilisée en standard à TM
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Compatibilité XP: </strong>" .$row['12']."</td>"; // affiche la compatibilité avec XP ou pas 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Versions en exploitation: </strong>" .$row['13']."</td>"; // affiche le nombre de versions en exploitation
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Type de déploiement: </strong>" .$row['14']."</td>"; // affiche le type de déploiement 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Type d'installation: </strong>" .$row['15']."</td>"; // affiche le type d'installation 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Domaine: </strong>" .$row['16']."</td>"; // affiche le domaine d'application
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Fonctionnalité: </strong>" .$row['17']."</td>"; // affiche une courte description de sa fonctionnalité 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Description: </strong>" .$row['18']."</td>"; // affiche une description plus détaillée 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Instructions: </strong>" .$row['19']."</td>"; // affiche les instructions particulières s'il y en a
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Pré-requis: </strong>" .$row['20']."</td>"; // affiche les pré-requis nécessaires a son installation
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Référent métier: </strong>" .$row['21']."</td>"; // affiche le référent métier de l'application 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Commentaires: </strong>" .$row['22']."</td>"; // affiche des commentaires s'il y en a 
  echo "</tr>\n";
    echo "<tr padding='3px'>"; // bouton pour confirmation de suppression
    echo "<td colspan='2' bgcolor='#F0F0F0'><input type='text' value='Voulez-vous réellement Supprimer cette fiche ?' onClick='confirm.php'">"</td>";
    echo "</tr>\n";
  echo "</table>\n";
    // fin du tableau.
mysql_close();
?>


Excusez moi pour ce retard mais j'étais en train de faire plusieurs tests....
0
benkeeper Messages postés 81 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 26 janvier 2008 45
5 mars 2007 à 18:22
Je vois, enfin je pense, il faut tester au préalable si la variable url 'id' existe bien.

Pour ça :

$id = "";
if(isset($_GET['id'])){
$id=$_GET["id"];
}


C'est peut être la solution pour le message d'erreur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
7 mars 2007 à 22:29
Salut a tous,
Grace a la méthode de benkeeper j'ai refait un tablea mais qui me donne un résultat bizarre (voyez plutôt). http://txiki.free.fr/tableau_mal_fini.gif
Toute la colonne de gauche n'a pas de fond gris et possède des "balises" html. (???)
Voici le début du tableau html gégéré par le php:
// ===========================================================
// tableau du résumé de l'ajout de la fiche dans la base
// ===========================================================
  echo "<p></p>";  
  echo "<table width='80%' bgcolor='#FFFFFF' border='1' cellspacing='0' cellpadding='8' align='center'>\n";
        echo "<tr text-align='center' padding='3px' class='blanc'>"; // première ligne on affiche le titre "Fiche logicielle" 
        echo "<td colspan='2' bgcolor='#669999'><h2> Fiche logicielle </h2></td>"; // On affiche le titre sur les 2 colonnes fusionnées
        echo "</tr>\n"; // fin de l'entête du tableau
  echo "<tr>"; //début de la première ligne
  echo "<td> width='50%' bgcolor='#F0F0F0'><strong>Groupe: </strong>$groupe</td>"; // affiche le contenu du groupe 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Catégorie: </strong>$categorie</td>"; // affiche le contenu de la catégorie
  echo "</tr>\n"; // fin de la première ligne  
  echo "<tr>";  // début de la seconde ligne
  echo "<td> width='50%' bgcolor='#F0F0F0'><strong>Source: </strong>$source</td>"; // affiche le contenu de la  source 
  echo "<td width='50%' bgcolor='#F0F0F0'><strong>Editeur: </strong>$editeur</td>"; // affiche le contenu de l'éditeur
  echo "</tr>\n"; // fin de la seconde ligne
etc....

Bien sur j'ai commenté l'incommentable ;-)) mais j'essaie d'en prends l'habitude.

Un petit inconvénient tout de même à cette méthode: le responsable qui alimentera cette table n'a pas de possibilité de retour en arrière. Je veux dire par là qu'une fois atteint cette page, l'enregistrement est déjà créé dans la table. Or moi, je voulais pouvoir y mettre un bouton de confirmation (le tableau n'étant là que pour vérif AVANT validation.
Si quelqu'un vois une boulette, je suis preneur. Hélà ! je débute en php et... je ne vois pas forcément comme vous.
Merci d'avance aux bénévoles.
0
benkeeper Messages postés 81 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 26 janvier 2008 45
8 mars 2007 à 09:25
Salut,

Déjà pour ce qui est de l'affichage bizzare, c'est un problème de balise. Je prends par exemple la ligne suivante :

echo "<td > width='50%' bgcolor='#F0F0F0'><strong>Groupe: </strong>$groupe</td>";

Il y a un problème, la balise td est fermée avant la description de ses propriétés, donc il considère ce qui suit comme du texte normal et l'affiche en conséquence.

Après pour ce qui est de pouvoir modifier et revenir en arrière , le mieux est d'utiliser les variables session, ce sont des variables qui sont accessible d'une page à l'autre car conservées côté serveur.

Pour les utiliser, tous les scripts doivent débuter par la fonction session_start(). Celle ci ne doit être précédée d'aucun caractère affichable, y compris un retour à la ligne.
Une fois cette fonction appelée, il est possible de définir et d'accéder aux variables session en utilisant le tableau global $_SESSION de cette manière : $_SESSION['nom_de_ma_variable'].

Je procèderai de la manière suivante :

- dans une première page (page1.php par exemple) on met le formulaire à garnir par l'utilisateur.
- la validation envoie les info à un script (page_confirm.php par exemple) qui affiche le tableau temporaire avant validation et sauve les infos dans les variables sessions de cette manière :
$_SESSION['infos']['groupe'] = $_POST['groupe']
$_SESSION['infos']['categorie'] = $_POST['categorie']
...
On aurait pu sauver directement dans $_SESSION['groupe'], $_SESSION['categorie'] sans créer le tableau 'infos' mais ça sera plus pratique pour la suite on verra pourquoi.

- donc là il faut 2 boutons, un qui valide le formulaire et appelle un script (valide.php par exemple) qui sauve dans la base en récupérant les infos contenue dans $_SESSION['infos'] puis affiche le tableau final, et un autre bouton qui rappelle page1.php pour modification.

- dans page1.php il faut qu'il soit placé dans les propriétés value des champs texte les variables sessions correspondante de cette manière :
<input type="text" name="groupe" value="<?=$_SESSION['infos']['groupe']?>">

De cette manière, si l'utilisateur arrive sur la page la première fois, les variables session sont vides donc ça n'affiche rien, mais s'il y revient après avoir validé une fois, c'est qu'il s'agit d'une demande de modification et les variables sessions contiennent donc les infos entrées préalablement et les affiche, épargant ainsi à l'utilisateur de les saisir à nouveau.

- le script de validation (valide.php) va insérer les données dans la base en utilisant le contenu des var session, puis afficher le tableau récapitulatif et en dernière ligne effacer les variables sessions de cette manière :

unset($_SESSION['infos']);

D'ou l'utilité d'avoir crée un tableau commun 'infos', ainsi on efface tout le contenu en une seule ligne là ou il aurait fallu écrire une ligne par variable si on avait utilisé directement des $_SESSION['groupe'], $_SESSION['categorie'] ...


C'est un peu abrupt peut être comme explication, n'hésite pas à demander si y a des truc que tu piges pas (la pédagogie n'est pas forcément une qualité chez moi ;) )


Ben :)
0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
8 mars 2007 à 10:48
Salut benkeeper ! et merci pour ta réponse.
echo "<td > width='50%' bgcolor='#F0F0F0'><strong>Groupe: </strong>$groupe</td>"; 


Il y a un problème, la balise td est fermée avant la description de ses propriétés, donc il considère ce qui suit comme du texte normal et l'affiche en conséquence.

<td> c'est bien la cellule ? Le tableau est composé de 11 lignes et 2 colonnes.
La seconde colonne, elle, est correcte ! Elle n'a pas les balises et pourtant les 2 sont contruites de la même manière. ? ? ?
Quand tu dis que td est fermé avant la description des propriétés, je ne comprends pas: la seconde l'est aussi, de la même façon et pourtant....

Pour le reste, je regarderai ce soir.
Merci encore pour tes précieux conseils !
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
8 mars 2007 à 11:05
Non elles ne sont pas construites de la même manière ! Regarde mieux :)
0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
8 mars 2007 à 11:19
Quel blaireau je fais ! ! !
Pourtant, avant d'écrire, j'avais bien regardé (ou plutôt, je croyais avoir bien regardé).
C'est le " > " c'est ça ? hi hi hi hi;
0