Problème de requete

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 : Problème de requete

par zeus » 27 juin 2008, 17:37

Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP", "Aidez-moi !" n'apportent rien à la compréhension de ton problème.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

J'ai supprimé le [[[HELP]]], mais je t'encourage à corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.

par flippaeti » 27 juin 2008, 15:19

je vais vous présentez le problème autrement :


tout d'abord les codes utiles :

Enregistrement du formulaire :
<?PHP  

if (isset($_POST['button'])){

$num=$_POST['requirednum_devis'];
$id=$_POST['requirednom_societe'];
$nomproj=$_POST['nom_projet'];
$des=$_POST['requireddesignation_devis'];
$mont=$_POST['requiredmontant_devis_HT'];
$com=$_POST['commentaires'];
$datej=$_POST['requireddated'];
$datem=$_POST['requireddatem'];
$datea=$_POST['requireddatey'];

$date=mktime(1,0,0,$datem,$datej,$datea);

mysql_query ("INSERT INTO devis (num_devis,id,designation_devis,date_devis,montant_devis_HT,commentaires) VALUES('$num','$id','$des','$date','$mont','$com')")or die(mysql_error());

$recupid=mysql_query("SELECT id FROM clients_prospects,devis WHERE clients_prospects.id=devis.id AND id.devis='$id'");
$recup=mysql_fetch_array($recupid);

$num = mysql_query("SELECT num_client FROM clients WHERE id='$recup'");
$numcli = mysql_fetch_array($num);

mysql_query ("INSERT INTO projets (nom_projet,num_client) VALUES ('$nomproj','$numcli')")or die(mysql_error());

else {
header('Location:devis_form.php');
}
header("Location:devis.php");

?>

Le formulaire :

Code : Tout sélectionner

<? include("header_ajax.php"); $t= mysql_query("SELECT nom_produit, tarif_produit FROM produits"); $req2 = mysql_query("SELECT nom_societe,id FROM clients_prospects"); //formulaire ajout devis?> <h2 class=form> <form name="Devis" method="post" action="devis_1.php" onSubmit="return checkrequired(this)"> <table border="0" align="center"> <tr><td><u><font size="+1">Veuillez choisir une soci&eacute;t&eacute; : </font></u></td></tr> <tr><td align="center">* Le nom : <select name="requirednom_societe"><option>...</option> <? while ($r2=mysql_fetch_row($req2)){ if (!empty($r2[0]))echo '<option value="'.$r2[1].'">'.$r2[0].'</option>'; } ?> </select></td></tr><br> <tr><td><U><FONT size="+1">Information important </font></u><br></td></tr> <tr><td>* Le num&eacute;ro du devis : <input name="requirednum_devis" type=text size="30"></td> <td>* La date <? echo '<input name="requireddated" type="text" size="2" value="'.date('d').'">&nbsp;/ <input name="requireddatem" type="text" size="2" value="'.date('m').'">&nbsp;/ <input name="requireddatey" type="text" size="2" value="'.date('Y').'">' ?> </td></tr> <tr><td>Le nom du projet <input name="nom_projet" type=text size="30"></td></tr> <tr><td>* La d&eacute;signation principale <input name="requireddesignation_devis" type=text size="50"></td></tr> <br> <tr><td><U><FONT size="+1">Les produits </font></u></td></tr> <tr><th align="center"><b>La désignation</b></th> <th><b>Le prix Hors Taxe</b></th></tr><br> <? $i=0; while ($tr=mysql_fetch_row($t)){ echo "<tr><td align='center'>".$tr[0]."</td><td align='center'>".$tr[1]."</td><td><input name=choixprodt".$i." type=checkbox></td></tr>"; $i=$i+1;} ?> <tr><td>A U T R E S ... <input name="autre" type=text size="35" align="right" value="pr&eacute;cisez"></td> <td align="center"><input name="montantp" type=text size="13" align="right" value="000.00"></td> <td><input name=choixprodt type=checkbox></td></tr><br> <tr><td align="right"><b>* Montant total Hors Taxe : </b><? echo '<input name="requiredmontant_devis_HT" type=text size="15" align="right" value='.$tot.'><br><br>'; ?></td></tr> <tr><td><U><FONT size="+1">Les plus </font></u></td></tr> <tr><td><div><label class="alignTopLeft">Les commentaires : </label><textarea name="commentaires" id="comments4" rows="3" cols="45"></textarea></div></td></tr><br> <tr><td>T&eacute;l&eacute;charger le fichier pdf : <input type="file" name="textfield"></td></tr><br> <tr><td colspan="2" align="center"><input name='button' type='submit' value='V A L I D E R'></td></tr> </table> </form>

Mon premier soucis fut que dans la table projet il ne récupérer pas le num_client. donc il fallait faire une requête pour le récupérer. ensuite le 2 ème soucis qui s'est poser à moi c'est qu'il n'y a un num_cli que s'il y a un client.
j'avoue cela est compliquer je m'y perd moi meme ! pouvais vous m'aider juste a récupérer l num client au moins :d

par mcorgnet » 27 juin 2008, 12:37

mysql_insert_id(), si tu lis sa documentation, récupère une valeur auto incrémentée. Rien d'autre.

Du coup, tu récupères le champ auto incrémenté, et tu fais une requête dessus pour récupérer le numéro de client.

par flippaeti » 27 juin 2008, 12:09

Image

Voila le MLD pour mieux comprendre !
En fait le auto increment de id est dans la table clients_prospects donc je suppose que c'est de la que je le récupère ?

le $_post[nom_societe] est un numéro.


Je n'arrive pas a mettre mon num_cli dans projet :(

par guilt92 » 27 juin 2008, 11:53

Il semble que ton ID soit pour toi le nom de la société.
Pour que la fonction mysql_insert_id() fonctionne il faut que le champ ID soit de type auto increment, ainsi quand tu fais un insert ca n'est pas toi qui défini l'id il est augmenté tout seul par rapport à la valeur actuelle et ca donne une requete du type :

INSERT INTO table(champ1,ID,champ2,champ3) VALUES('val1','','val2','val3');

Comme tu peux le voir on ne met rien pour ID, SQL se charge de l'incrémenter tout seul.

Avec ton système c toi qui gère les id, pas SQL, donc si tu veux le laisser comme ca il faudra une autre solution que celle d'utiliser mysql_insert_id pour avoir le dernier enregistrement. Les fonctions LIMIT de SQL peuvent t aider a obtenir ce resultat.

par mcorgnet » 27 juin 2008, 11:44

Ton champ ID est bien en auto increment ?

Problème de requete

par flippaeti » 27 juin 2008, 11:37

<?PHP  

if (isset($_POST['button'])){

$num=$_POST['requirednum_devis'];
$id=$_POST['requirednom_societe'];
$nomproj=$_POST['requirednom_projet'];
$des=$_POST['requireddesignation_devis'];
$mont=$_POST['requiredmontant_devis_HT'];
$com=$_POST['commentaires'];
$datej=$_POST['requireddated'];
$datem=$_POST['requireddatem'];
$datea=$_POST['requireddatey'];

$date=mktime(1,0,0,$datem,$datej,$datea);

mysql_query ("INSERT INTO devis (num_devis,id,designation_devis,date_devis,montant_devis_HT,commentaires) VALUES('$num','$id','$des','$date','$mont','$com')")or die(mysql_error());

$lastid=mysql_insert_id();
echo $lastid;

$num = mysql_query("SELECT num_client FROM clients WHERE id='$lastid'");
$numcli = mysql_fetch_array($num);

mysql_query ("INSERT INTO projets (nom_projet,num_client) VALUES ('$nomproj','$numcli')")or die(mysql_error());
}
else {
header('Location:devis_form.php');
}
header("Location:devis.php");

?>
la requete devis marche bien, meme si dans l'echo de "$lasti" il me retourne 0 alors que dans la table il y a bien le bonne id !
ensuite il faut que jerecupère le num client mais cela ne marche pas non plus entre autre car dans $lastid il me recupère 0 !
aider moi a trouve les erreurs s'il vous plait je suis perdue