S'abonner :  Newsletters    Magazines
Avis sur les produits Avis sur les logiciels Avis sur les jeux Actualités A propos de 01net
245 utilisateurs connectés

création et utilisation d'une base de données

guilich le 07 aout 2008 à 10h51
Bonjour,

voilà, je créée un site pour mon entreprise, sur lequel je dois créer un bon de commande informatisé sur lequel lorsque l'on entre une référence, la désignation apparait automatiquement.

voilà ce que j'ai donc créé dans ma base de données

CREATE TABLE IF NOT EXISTS `references` (
`id` int(20) unsigned NOT NULL auto_increment,
`reference` varchar(50) NOT NULL,
`designation` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


INSERT INTO `references` (`id` ,`reference` ,`designation`) VALUES (NULL , '900907', 'pochettes');


mon fichier php de commande est lui constitué de ce code

<div align="center">
<form method="post" action="mail.php">
<input type="hidden" name="subject" value="Commande"/>
<table>
<tr>
<td>
Votre société:
</td>
<td width="180">
<input type="text" name="Societe" size="30" />
</td>
</tr>
<tr>
<td>
Votre Email:
</td>
<td>
<input type="text" name="Email" size="30" />
</td>
</tr>
<tr>
<td>
Objet:
</td>
<td>
<input type="text" name="Sujet" size="30" />
</td>
</tr>
<tr>
<td>
Informations complémentaires:
</td>
<td>
<p>
<input type="text" name="Informations" size="30" />
</p>
</td>
</tr>
</table>
<script>
function checkQuantity(obj){
if (isNaN(obj.value)){
alert("La valeur rentrée n'est pas valide comme quantité.");
obj.value = 0;
}
}

function addLigne(){
var new_tr = document.createElement("tr");
<?php
echo 'new_tr.innerHTML = \'<td width="65">Référence</td><input type="text" name ="Reference[] value="" size="10""> ';
$link = @mysql_pconnect("base de données", "utilisateur", "mot de passe");
@mysql_select_db("base de données", $link);
$result = @mysql_query("SELECT * FROM references ORDER BY reference;");
while ($ligne = @mysql_fetch_assoc($result)){
echo '<option value="'.$ligne["reference"].'">('.$ligne["quantite"].') '.$ligne["designation"].'</option>';
}
echo '</select></td><td width="61">Quantité</td><td><input type="text" name="Quantite[]" value="" size="10" onchange="checkQuantity(this);" /></td><td><input type="button" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" value="Enlever" /></td>\';';
?>
document.getElementById("lignes").getElementsByTagName("tbody")[0].appendChild(new_tr);
}
</script>
<input type="button" onclick="addLigne();" value="Ajouter une référence de commande" />
<table id="lignes">
<tbody>
</tbody>
</table>
<input type="submit" value="Envoyer" /> - <input type="reset" value="Annuler" />
</form>
</div>


cela me donne donc le formulaire suivant :

http://www.forfirespirit.com/5.1/commande2.php

en ajoutant une ligne et en insérant la référence, la 'case' désignation n'apparaît pas, je ne sais donc pas si l'automatisation fonctionne. il faut donc que j'arrive à la faire apparaitre...

enfin, ce menu de formulaire ne fonctionne que sous firefox, en clikant sur le bouton 'Ajouter une référence de commande' ne fonctionne pas sous IE.

Auriez-vous une idée de réponse pour toutes ces questions ?

merci d'avance
QuiPhenix le 07 aout 2008 à 11h43
Bonjour,

Pour commencer, il y a quelques erreurs dans votre code.
Ici, une double quote non fermée après le nom de l'input.
[...]
function addLigne(){
var new_tr = document.createElement("tr");
<?php
echo 'new_tr.innerHTML = \'<td width="65">Référence</td><input type="text" name ="Reference[]" value="" size="10""> ';
[...]

Sur ce même point d'ailleurs, pourquoi générer des options de select pour les mettre un <input type="text" ??? Un select conviendrait bien mieux. C'est ce qui fait que vous ne voyez rien dans la case de référence.
[...]
function addLigne(){
var new_tr = document.createElement("tr");
<?php
echo 'new_tr.innerHTML = \'<td width="65">Référence</td><select name ="Reference[]" value="" size="10""> ';
[...]


Déjà, en corrigeant ceci, il est possible que ça fonctionne mieux sur IE. Si ce n'est pas le cas, tentez d'indiquer dans votre balise script qu'il s'agit de JavaScipt.
[...]
<script language="javascript">
[...]
</script>


Et n'oubliez pas d'éditer votre premier post pour indiquer [Résolu] si ça a réglé vos problèmes.
-------
[:QuiPhenix:3]
guilich le 07 aout 2008 à 11h53
non, cela n'a pas provoqué de changement visible.

par ailleurs, il est normal que la case référence soit vierge, il faut que le client la rentre manuellement, en revanche, c'est la case désignation qui est absente.

merci pour votre aide
QuiPhenix le 07 aout 2008 à 12h02
C'est pas clair du tout là :/

Vous cherchez a faire quoi exactement ?
-------
[:QuiPhenix:3]
guilich le 07 aout 2008 à 12h13
http://www.forfirespirit.com/5.1/formulaire2.php

je souhaite avoir une page de ce type, avec une case désignation en plus, à droite de quantité.

et lorsque j'entre une référence, la désignation s'inscrit automatiquement à l'aide de la base de registre.

suite à ça, il ne reste qu'à valider, et le bon de commande me parvient par mail
QuiPhenix le 07 aout 2008 à 12h28
D'accord

Dans ce cas, plusieurs opportunités s'offrent a vous.

Soit vous vous servez de votre boucle pour stocker les désignations des articles dans un tableau javascript (array) avec pour clé la référence du produit. En utilisant l'événement onChange() sur le champ de référence, vous appellerez une fonction qui écrira dans le champ désignation la valeur contenue dans le tableau selon la référence écrite par l'utilisateur.

Autre solution, plus complexe mais plus "propre" puisque vous ne chargez pas toutes les désignations: utiliser de l'AJAX.
Vous créez un cadre de division destiné a afficher le nom du produit sur votre formulaire. Vous créez aussi une page php qui prend une référence en paramètre post ou get, qui fait une recherche dans la base de donnée et qui affiche le résultat. Et là, rebelote, avec un onChange dans le champ de référence, vous utilisez l'AJAX pour appeler la page en lui passant ce que l'utilisateur a tapé dans le champ de référence.
-->Message édité par QuiPhenix le 07/08/2008 12:29:23<--
-------
[:QuiPhenix:3]
guilich le 07 aout 2008 à 14h12
ok,

comment effectuer cette procédure de boucle, c'est à dire référencer ceci dans le code php listé ci-dessus, je suppose que ma base sql est correcte au vu du code que j'ai entré, de ce coté, tout semble etre ok.

merci beaucoup, encore une fois ;)
QuiPhenix le 07 aout 2008 à 16h36
Heu, c'est votre code ? Parce que la boucle PHP est déjà là.

Il suffit de déclarer un tableau dans le javascript:
var truc = new Array();

et de remplir ce tableau a chaque entrée en faisant un echo de
truc[référence] = 'désignation';
-------
[:QuiPhenix:3]
guilich le 07 aout 2008 à 16h56
oui c'est mon code, j'ai été aidé par plusieurs utilisateurs sur diverses forums. Mon employeur me demande ça, mais je n'ai pas réelement les compétences requises !

comme ceci ?

<script language="javascript">
function checkQuantity(obj){
if (isNaN(obj.value)){
alert("La valeur rentrée n'est pas valide comme quantité.");
obj.value = 0;
}
}

var reference = new Array();
reference[900907] = 'pochettes';

function addLigne(){
var new_tr = document.createElement("tr");
<?php
echo 'new_tr.innerHTML = \'<td width="65">Reference</td><input type="text" name ="Reference[] value="" size="10"> ';
$link = @mysql_pconnect("mysql5-2", "forfires", "okowgl8w");
@mysql_select_db("forfires", $link);
$result = @mysql_query("SELECT * FROM references ORDER BY reference;");
while ($ligne = @mysql_fetch_assoc($result)){
echo '<option value="'.$ligne["reference"].'">('.$ligne["quantite"].') '.$ligne["designation"].'</option>';
}
echo '</select></td><td width="61">Quantite;</td><td><input type="text" name="Quantite[]" value="" size="10" onchange="checkQuantity(this);" /></td><td><input type="button" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" value="Enlever" /></td>\';';
?>
document.getElementById("lignes").getElementsByTagName("tbody")[0].appendChild(new_tr);
}
</script>


cependant, la case désignation n'apparaitra tout de même pas dans le formulaire.
QuiPhenix le 07 aout 2008 à 17h18
Bon, je vois. Je vous fait ça, je re dans un moment.
-------
[:QuiPhenix:3]
QuiPhenix le 07 aout 2008 à 17h38
Voila le code remanié. Il a pas été testé alors a voir ...

<div align="center">
<form method="post" action="mail.php">
<input type="hidden" name="subject" value="Commande"/>
<table>
<tr>
<td>
Votre société:
</td>
<td width="180">
<input type="text" name="Societe" size="30" />
</td>
</tr>
<tr>
<td>
Votre Email:
</td>
<td>
<input type="text" name="Email" size="30" />
</td>
</tr>
<tr>
<td>
Objet:
</td>
<td>
<input type="text" name="Sujet" size="30" />
</td>
</tr>
<tr>
<td>
Informations complémentaires:
</td>
<td>
<p>
<input type="text" name="Informations" size="30" />
</p>
</td>
</tr>
</table>
<script language="javascript">
var nombre = 0;
var reference = new Array();
<?php
$link = @mysql_pconnect("base de données", "utilisateur", "mot de passe");
@mysql_select_db("base de données", $link);
$result = @mysql_query("SELECT * FROM references ORDER BY reference;");
while ($ligne = @mysql_fetch_assoc($result)) {
echo 'reference['.$ligne["reference"].'] = \''.$ligne["designation"].'\'';
}
?>
function udpateDesi(obj, nb) {
document.getElementByName('Desi['+nb+']').value = reference[obj.value];
}

function checkQuantity(obj){
if (isNaN(obj.value)){
alert("La valeur rentrée n'est pas valide comme quantité.");
obj.value = 0;
}
}

function addLigne(){
nombre++;
var new_tr = document.createElement("tr");
new_tr.innerHTML = '<td width="65">Référence</td><input type="text" name ="Reference['+nombre+'] value="" size="10" onchange="updateDesi(this, nombre);" /></td>
<td>Désignation</td><td><input type="text" name="Desi['+nombre+']" value="" size="30" /></td>
<td width="61">Quantité</td><td><input type="text" name="Quantite['+nombre+']" value="" size="10" onchange="checkQuantity(this);" /></td>
<td><input type="button" onclick="nombre--;this.parentNode.parentNode.removeChild(this.parentNode);" value="Enlever" /></td>\';';
document.getElementById("lignes").getElementsByTagName("tbody")[0].appendChild(new_tr);
}
</script>
<input type="button" onclick="addLigne();" value="Ajouter une référence de commande" />
<table id="lignes">
<tbody>
</tbody>
</table>
<input type="submit" value="Envoyer" /> - <input type="reset" value="Annuler" />
</form>
</div>
-------
[:QuiPhenix:3]
guilich le 08 aout 2008 à 09h42
Bonjour, et merci pour le temps passé !

Malheureusement, le menu ne s'ouvre plus ni sous IE ni sous firefox, je ne peux donc pas dire si cela fonctionne, ou pas.

Est-ce qu'il va toujours chercher les références dans la base de données sql, ou je dois modifier cela ?

merci encore :)
QuiPhenix le 08 aout 2008 à 10h59
Vous pouvez m'indiquer un lien pour le test ?
-------
[:QuiPhenix:3]
QuiPhenix le 08 aout 2008 à 11h37
Autant pour moi, le saut de ligne qui casse tout ...

Remplacez la fonction addLigne() par celle là:

function addLigne() {
var new_tr = document.createElement("tr");
new_tr.innerHTML = '<td width="65">Référence</td><input type="text" name ="Reference['+nombre+'] value="" size="10" onchange="updateDesi(this, nombre);" /></td> <td>Désignation</td><td><input type="text" name="Desi['+nombre+']" value="" size="30" /></td><td width="61">Quantité</td><td><input type="text" name="Quantite['+nombre+']" value="" size="10" onchange="checkQuantity(this);" /></td><td><input type="button" onclick="nombre--;this.parentNode.parentNode.removeChild(this.parentNode);" value="Enlever" /></td>';
document.getElementById("lignes").getElementsByTagName("tbody")[0].appendChild(new_tr);
nombre++;
}



-->Message édité par QuiPhenix le 08/08/2008 12:00:06<--
-------
[:QuiPhenix:3]
guilich le 08 aout 2008 à 11h52
alors effectivement la case désignation apparait à présent, en revanche, son affichage n'est pas automatique
QuiPhenix le 08 aout 2008 à 11h56
C'est parce que les infos de la base ne se chargent pas ...

Vous avez bien entrés vos identifiants/mdp pour se connecter à la base du serveur ? Les enregistrement existent bien sur la base de votre serveur ?
Si oui, enlevez les 3 @ qui trainent

Edit: Re-remplacer la fonction addLigne() par celle d'au dessus, je viens de me rendre compte de quelque chose
-->Message édité par QuiPhenix le 08/08/2008 11:58:56<--
-------
[:QuiPhenix:3]
guilich le 11 aout 2008 à 14h42
Bonjour, et désolé de ma réponse si tardive (week end oblige)

il faut que je remette la fonction addLigne() prédédente ?

cela ne fonctionnait pas. concernant les @

vous parlez de ceux-ci ?

"$link = @mysql_pconnect("base de données", "utilisateur", "mot de passe"); "

"@mysql_select_db("base de données", $link);"

"while ($ligne = @mysql_fetch_assoc($result)) {"

Enfin, les données de ma base sont effectivement bien entrées dans le code.

Aurai-je fait une erreur dans l'ajout des données ?

CREATE TABLE IF NOT EXISTS `references` (
`id` int(20) unsigned NOT NULL auto_increment,
`reference` varchar(50) NOT NULL,
`designation` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


INSERT INTO `references` (`id` ,`reference` ,`designation`) VALUES (NULL , '900907', 'pochettes');


merci :)
QuiPhenix le 11 aout 2008 à 17h17
Bonjour, j'ai corrigé la fonction, prenez la dernière où celle ci:
function addLigne() {
var new_tr = document.createElement("tr");
new_tr.innerHTML = '<td width="65">Référence</td><input type="text" name ="Reference['+nombre+'] value="" size="10" onchange="updateDesi(this, nombre);" /></td> <td>Désignation</td><td><input type="text" name="Desi['+nombre+']" value="" size="30" /></td><td width="61">Quantité</td><td><input type="text" name="Quantite['+nombre+']" value="" size="10" onchange="checkQuantity(this);" /></td><td><input type="button" onclick="nombre--;this.parentNode.parentNode.removeChild(this.parentNode);" value="Enlever" /></td>';
document.getElementById("lignes").getElementsByTagName("tbody")[0].appendChild(new_tr);
nombre++;
}

Ensuite, oui, il s'agit de ses arobases qui empêchent l'affichage des messages d'erreurs :/ Pas très pratique pour debugger ...
-------
[:QuiPhenix:3]
guilich le 25 aout 2008 à 11h00
Bonjour,

ce que je ne comprends pas, c'est que le bouton d'ajout de ligne ne fonctionne plus ni sous IE ni sous Firefox...

je ne peux donc pas voir si cela fonctionne.

merci pour ta réponse :)
QuiPhenix le 25 aout 2008 à 20h05
Bonjour,

Normal, la petite partie PHP retournant une erreur, ca fait foirer le JavaScript.

<?php
$link = mysql_connect("base de données", "utilisateur", "mot de passe");
mysql_select_db("base de données", $link);
$result = mysql_query("SELECT * FROM references ORDER BY reference;");
while ($ligne = mysql_fetch_array($result)) {
echo 'reference['.$ligne["reference"].'] = \''.$ligne["designation"].'\'';
}
?>


Essayez avec ça.
-------
[:QuiPhenix:3]
QuiPhenix le 28 aout 2008 à 10h32
Bonjour,

Avant d'uploader la page, vous modifiez bien les identifiants et mot de passe de la connexion a la base de donnée pour utiliser la base hébergée ?
-------
[:QuiPhenix:3]
guilich le 28 aout 2008 à 12h30
oui biensur, je ne les mets pas ici pour la sécurité, mais ils y sont, et je les ai bien vérifiés

je viens de regarder le code source du cadre sur la page web, et j'ai vu ceci :

mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>/homez.14/forfires/www/5.1/commande2.php</b> on line <b>47</b><br />
-->Message édité par guilich le 28/08/2008 12:34:20<--
QuiPhenix le 28 aout 2008 à 13h54
Étrange :sweat:

Et avec :
$result = mysql_query("SELECT * FROM references ORDER BY reference;", $link);
-------
[:QuiPhenix:3]
guilich le 28 aout 2008 à 14h10
non, toujours pas, je ne comprends pas :s
QuiPhenix le 28 aout 2008 à 14h37
Moi non plus :/

Si vous tapez l'instruction SQL directement dans votre PHPMyAdmin ou votre systeme de gestion de base, elle fonctionne bien ?
-------
[:QuiPhenix:3]
guilich le 01 septembre 2008 à 15h17
Bonjour,

je reviens vers vous après de nombreuses modifications.

en effet, j'ai tenté l'ajax, et j'ai à peu près réussi mon opération.

il mem anque quelques petits points à éclaircir avant d'avoir complété le travail.

je vous donne les codes avant de m'expliquer



<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Document sans nom</title>
<script src="js.js" language="javascript"> </script>
</head>

<body>
<div align="center">
<form method="post" action="mail.php">
<div align="center">
<table>
<input type="hidden" name="subject" value="Commande"/>
<tr>
<td> Votre société: </td>
<td width="180"><input type="text" name="Societe" size="30" />
</td>
</tr>
<tr>
<td> Votre Email: </td>
<td><input type="text" name="Email" size="30" />
</td>
</tr>
<tr>
<td> Objet: </td>
<td><input type="text" name="Sujet" size="30" />
</td>
</tr>
<tr>
<td> Informations complémentaires: </td>
<td><p>
<textarea name="Informations" cols="30" rows="3">


PRODUITS

TÉLÉCHARGER - LOGICIELS

JEUX VIDÉOS

LOISIRS

01NET PRO

AVIS ET COMMENTAIRES

A PROPOS DE 01NET

publicité
> 01netPro :
Rubrique Emplois
Consultez les actualités et les dernières offres.

Service 01net
Newsletters 01net
abonnez vous gratuitement !
  
01Informatique
01 INFORMATIQUE
L'hebdo de référence des décideurs informatiques.
Micro Hebdo
MICRO HEBDO
L'hebdo qui vous simplifie la micro
et Internet.
L'Ordinateur Individuel
L'ORDINATEUR INDIVIDUEL
Le mensuel informatique qui vous informe et vous conseille.
Tous droits réservés © 1999 - 2009 Internext - 01net.