[php_my_sql] problème d'update
kifouillou
Messages postés
172
Statut
Membre
-
kifouillou Messages postés 172 Statut Membre -
kifouillou Messages postés 172 Statut Membre -
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.
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:
- [php_my_sql] problème d'update
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Nettoyage windows update - Guide
- Wsus offline update - Télécharger - Systèmes d'exploitation
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.
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.
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 ?
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 ?
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.
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.
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.
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.
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);
}
}
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);
}
}
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.