[php_my_sql] problème d'update

Fermé
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 14 mars 2008 à 11:08
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 - 19 mars 2008 à 10:35
Bonjour,

J'ai réalisé un formulaire qui permet d'afficher un formulaire avec plusieurs champs.

Type : <input type="text" name="type_$i" id="type_$i" value= "$R[struct_type_stream]" ><br />
Nom : <input type="text" name="nom_$i" id="nom_$i" value= "$R[struct_nom]"><br />
Libelle : <input type="text" name="libelle_$i" id="libelle_$i" value= "$R[struct_libelle]" ><br />
Type des données : <input type="text" name="datatype_$i" id="datatype_$i" value="$R[struct_datatype]" >
<input type=hidden name="sturct_id_$i" id="sturct_id_$i" value="$sturct_id">
<form name="formulaire" method=post action='$_SERVER[PHP_SELF]'>
<input type=hidden name=Action value='$_REQUEST[Action]'>
<input type=hidden name=Etape value='valider'>
<input type=submit>
</form>

et voici ma fonction qui permet l'update des champs dans ma base :

$sturct_id = $_POST['sturct_id'];
$struct_type = $_POST['type'];
$struct_nom = $_POST['nom'];
$struct_libelle = $_POST['libelle'];
$struct_datatype = $_POST['datatype'];

// boucle pour parcourir le tableau contenant les enregistrements



foreach($_REQUEST as $k => $v)
{

$k = split ("_", $sturct_id, 7);


$sql = 'update stream_structure_2
set struct_type_stream="'.$struct_type.'", struct_nom="'.$struct_nom.'", struct_libelle="'.$struct_nlibelle.'" struct_datatype="'.$struct_datatype.'"
where sturct_id=\''.$sturct_id.'\';' ;




Le problème c'est que ma base ne s'update pas. Je ne comprends pas trop pourquoi.
Merci d'avances pour vos réponses.
A voir également:

4 réponses

Bonjour

As-tu fait un echo $sql; pour voir quelle requête est effectivement générée par ton code ?
Je suppose que dans ton code, il y a bien le mysql_query($sql) que tu ne montres pas.
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 9
14 mars 2008 à 11:43
Bonjour,

ben oui oui, y a bien mysql_query enfin un dbiquery mais c'est la meme chose. Et le echo $sql m'affiche ma requete update.

Merci encore.
0
y a bien mysql_query enfin un dbiquery mais c'est la meme chose
sauf que je ne trouve pas de dbiquery dans la doc PHP et que le sujet de ton post parle de my_sql ...

Testes-tu les valeurs de retour de ta connexion à ta base et celle de la requête ?
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 9
14 mars 2008 à 12:19
Testes-tu les valeurs de retour de ta connexion à ta base et celle de la requête ?

Que veux tu dire par la?

Sinon pour le dbi c'est une commande perl équivalent à mysql_query. C'est la boite ou je suis en stage qui m'a expliqué cela.

Je me demande si je dois pas utiliser le $v.
0
1 -
Testes-tu les valeurs de retour de ta connexion à ta base et celle de la requête ?
Que veux tu dire par la?


classiquement, avant d'utiliser la base de données mysql dans un script php, tu dois faire deux choses :
a- te connecter à la base en appelant une fonction mysql_connect à laquelle tu dois indiquer le nom du serveur, le login et le mot de passe de connexion.Cette fonction rend FALSE s'il y a un problème et un ressource si tout est ok.

b- choisir la base de données sur laquelle tu veux travailler avec la fonction mysql_select_db. Cette fonction rend TRUE si ça c'est bien passé et FALSE s'il y a un problème.

Fais-tu un appel à ces deux fonctions ? Vérifies-tu si elles te rendent FALSE ou non ?


dbi c'est une commande perl équivalent à mysql_query
une commande Perl en php ? ça me semble absurde, mais supposons qu'il y a une bibliothèque qui permette d'appeler mysql de cette manière. Cette fonction dbiquery doit bien elle aussi avoir une valeur de retour (true ou false ou ressource) : est-ce qu'elle te retourne quelque chose de correct ? Et là je ne peux pas te dire ce qui est correct, puisque ça n'est pas dans la doc du php

Toute la durée de ta mise au point, je te conseille de mettre error_reporting(E_ALL); au début de ton script, il te montrera toutes tes erreurs alors que la plupart des serveurs sont configurés pour cacher de nombreuses erreurs.
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 9
14 mars 2008 à 15:07
Bon

la connection fonctionne bien, pis j'ai essayé une autre requète qui elle fonctionnait.

Pour la différence entre dbiquery et mysql_query, j'ai adopté leur manière de faire mais je ne sais absolument pas pourquoi ils font comme cela. Je demanderai à mon maître de stage.

Encore et toujours merci.
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 9
17 mars 2008 à 10:59
Bonjour,

je renvoie un message car mon problème a quelque peu augmenté. Je dois toujours réalisé un update mais à partir d'un draganddrop réalisé en javascript avec YUI.

Je bouge les div contenant les enregistrements dans l'ordre que je veux et mon update doit prendre en compte cet ordre.
Voilà. Merci encore.
0
kifouillou Messages postés 170 Date d'inscription mardi 27 septembre 2005 Statut Membre Dernière intervention 28 janvier 2011 9
19 mars 2008 à 10:35
bonjour à tous,

sa y es j'ai résolu mon problème. J'ai appris un truc très utile en php, c'est les regex. Et encore je trouve que celle que j'ai utilisé est pas compliqué. Je vous donne donc ma solution commentée, si quelqu'un à l'avenir à le même souci.

Le formulaire :


<div class=ddentry id="bb$R[sturct_id]">
Type : <input type="text" name="type_$R[sturct_id]" id="type_$R[sturct_id]" value= "$R[struct_type_stream]" ><br />
Nom : <input type="text" name="nom_$R[sturct_id]" id="nom_$R[sturct_id]" value= "$R[struct_nom]"><br />
Libelle : <input type="text" name="libelle_$R[sturct_id]" id="libelle_$R[sturct_id]" value= "$R[struct_libelle]" ><br />
Type des données : <input type="text" name="datatype_$R[sturct_id]" id="datatype_$R[sturct_id]" value="$R[struct_datatype]" >
<input name="lst_sturct_id$R[sturct_id]" id="lst_sturct_id$R[sturct_id]" type="hidden" value="$R[sturct_id]"/>

</div>


$struct_type = $R['struct_type_stream'];
$struct_nom = $R['struct_nom'];
$struct_libelle = $R['struct_libelle'];
$struct_datatype = $R['struct_datatype'];
$sturct_id = $R['sturct_id'];
}

<style type=text/css>
div.ddentry { border:1px solid #999; border-left:20px solid #999;margin-bottom:4px; padding:4px; }
</style>
<h1>Gestion des documents de type $type</h1>
<form name="form" id="form" method=post action='$_SERVER[PHP_SELF]'>
<input type=hidden name=Action value='$_REQUEST[Action]'>
<input type=hidden name=Etape value='valider'>
$html
<input type=submit >
</form>


et le code permettant de valider avec la regex :


function pimpValiderStructureDocument($html)
{





// Parcours des champs du formulaire pour enregister chaque ligne
$struct_ordre=1;
foreach ($_POST as $k => $v)
{
if (! ereg("^lst_sturct_id([0-9]+)$",$k,$o)) continue; // On ne recherche que les champs hidden embarquant l'id de la bdd

$ligne = $o[1]; // numéro de la ligne en cours de traitement
$id = $v; // L'id de l'enregistrement est la valeur de ce champs

$Data = array(); // Créer un tableau vide pour stoker les valeurs à enregistrer
$Data['struct_type_stream'] = $_POST['type_'.$ligne];
$Data['struct_nom'] = $_POST['nom_'.$ligne];
$Data['struct_libelle'] = $_POST['libelle_'.$ligne];
$Data['struct_datatype'] = $_POST['datatype_'.$ligne];
$Data['struct_ordre'] = $ordre;

if ($id){ // Si un id est dispo => enregistrement existant à modifier, sinon enregistrement à créer
dbiUpdateBDArray('stream_structure_2', 'sturct_id', $id, $Data);
$struct_ordre++;
}
else
dbiInsertBDArray('stream_structure_2', $Data);
}


}
0