update choix table

Petit nouveau ! | 9 Messages

27 sept. 2011, 11:19

Aperçu: update choix d'une table
Bonjour,

Je souhaite mise à jours selon le choix de table. J'ai crée une variable pour choisir le nom de table, et modifier la table. La modification s'effectue en écrivant le nom de table , mais avec la variable pour choisir une table, il y a un problème. j'ai besoin de votre aide merci.


<form method="post" name="formul" action="">
Nom table : <input type="text" id="texte1" name="texte1" value=" "/>

<input type="submit" id="ok" name="ok" value="Selectionner"/>
</form>

<?php
//error_reporting(0);
$c= mysql_connect('localhost','root','') or die ("connection impossible");
mysql_select_db('test', $c) or die ("connection impossible a la base");

$tab="";
if(isset ($_POST['ok']))
{

if(isset ($_POST['texte1']))
{
$tab = $_POST['texte1'];
$sql="select id, nom, prenom from ".$tab."";
$rs=mysql_query($sql,$c);

?><table align="center">
<tr>
<td>Nom </td>
<td>Prenom </td>
</tr>
<tr><td>Nom Table</td><td><input type="text" id="texte1" name="texte1" value="<?php if(isset($_POST['texte1'])) { echo $_POST['texte1'];} ?> "/></td></tr>
<form action="" method="post" name="formul">
<input type="hidden" name="modife" value="ok" />
<?php
$i=1;
while($data=mysql_fetch_array($rs)){ $nom=$data['nom']; $prenom=$data['prenom']; $id=$data['id']; $array[]=$id; //on peut remplacer $array par $_session...
?>

<tr><td><input type="text" name="<?php echo 'nom'.$id;?>" value="<?php echo $nom;?>" /></td>
<td><input type="text" name="<?php echo 'prenom'.$id;?>" value="<?php echo $prenom; ?>" /></td>

<?php $i=$i+1;
}

//echo $array[3];
?>
</tr>
<tr><td align="center"><input type="submit" name="modif" value="modif" /></td></tr></form>
</table>
<?php
for($t=0;$t<count($array);$t++){
if(isset ($_POST['modif'] )&& $_POST['modif']){

$id=$array[$t];// $_POST['id'.$array[$t]];
$nom=$_POST['nom'.$array[$t]];
$prenom=$_POST['prenom'.$array[$t]];
$update="UPDATE ".$tab." SET nom ='".$nom."',prenom='".$prenom."'WHERE id=".$array[$t];



$result=mysql_query($update,$c) or die( mysql_error() );

if(mysql_query($update)){

header("Location:updatetotal.php");
}else{
echo "pas de modification ";

}
}
}
}}

?>

ViPHP
ViPHP | 2577 Messages

27 sept. 2011, 13:52

Bonjour,

"avec la variable pour choisir une table, il y a un problème"

Quel problème ?

Petit nouveau ! | 9 Messages

27 sept. 2011, 14:01

le problème: la mise à jour ne s'effectue pas quand on choisi la nom de table. il y a un problème avec "$tab".

UPDATE ".$tab. //erreur empty

ViPHP
ViPHP | 2577 Messages

27 sept. 2011, 17:12

la variable $tab n'est pas alimenté
donc vérifie la variable $_POST['texte1']

Si cette variable n'est pas renseignée, regardes du coté du formulaire dans le code html pour voir ce qui ne va pas comme par exemple un input hors de la balise form.

Autrement décommente la ligne error_reporting(0) en mettant E_ALL comme paramètre

Petit nouveau ! | 9 Messages

27 sept. 2011, 18:20

En effet la variable $tab inconnu,
for($t=0;$t<count($array);$t++){
if(isset ($_POST['modif'] )&& $_POST['modif']){
$tab = $_POST['texte1']; ...

je ne sais pas comment alimenter la variable, je ne trouve pas la solution..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 sept. 2011, 00:56

salut,

fait un var_dump($_POST); en haut de la page cible du formulaire tu pourra ainsi voir ce qu'il y a de transmis par le formulaire.

après besoin d'utiliser une autre variable pourquoi ne pas utiliser $_POST['texte1'] directement ?

Après coté sécurité c'est un peu la foire ton truc, tu ne peux être certain que l'on n’essaiera pas d'utiliser une table "sensible".

dans ton deuxième formulaire (dans le isset $_POST['texte1'] tumet un champ de formulaire en dehors du formulaire
tr><td>Nom Table</td><td><input type="text" id="texte1" name="texte1" value="<?php if(isset($_POST['texte1'])) { echo $_POST['texte1'];} ?> "/></td></tr>
<form action="" method="post" name="formul">

c'est, bien sur, a proscrire :)

tu peux aussi afficher $update avant utilisation (avec var_dump ;) ).

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 9 Messages

28 sept. 2011, 11:35

Merci pour votre réponse,

le changement s'affiche bien
de test à test1 et à test2
array
'nom1' => string 'test1' (length=5)
'prenom1' => string 'test1' (length=5)
'nom2' => string 'test2' (length=5)
'prenom2' => string 'test2' (length=5)
'modif' => string 'modif' (length=5)

et aussi le nom de table s’affiche bien var_dump($tab);
mais pas de changement dans le base de donnée.

Petit nouveau ! | 9 Messages

28 sept. 2011, 21:25

merci de m'aider car, toujours pas de solution, je n'arrive pas à effecteur la mise à jours dans la base

ViPHP
ViPHP | 2577 Messages

29 sept. 2011, 09:12

merci de m'aider car, toujours pas de solution, je n'arrive pas à effecteur la mise à jours dans la base
Il faudrait savoir si le code SQL correspond à ce que tu veux faire et s'il est correct.

Dans le code suivant, pourquoi faire 2 mysql_query() ?
Rajouter un blanc devant le WHERE à mon avis.
$update="UPDATE ".$tab." SET nom ='".$nom."',prenom='".$prenom."'WHERE id=".$array[$t];
$result=mysql_query($update,$c) or die( mysql_error() );
if(mysql_query($update)){
header("Location:updatetotal.php");
}else{
echo "pas de modification ";
}

Petit nouveau ! | 9 Messages

29 sept. 2011, 20:26

je crois le problème dans la update

for($t=0;$t<count($array);$t++){
if(isset ($_POST['modif'] )&& $_POST['modif']){

......
$update="UPDATE ".$tab." SET nom ='".$nom."',prenom='".$prenom."' WHERE id=".$array[$t]; il faut changer cette ligne mais comment


//$result1=mysql_query($insert);
$result=mysql_query($update,$c) or die( mysql_error() );