Aller au menu - Aller au contenu

Connaitre champs modifiés dans requete php/mysql

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Offre d'emploi : Développeur Web PHP/Drupal (H/F)

Page 1 
Auteur Message
2 visiteurs sur ce sujet (2 anonymes)
Page 1 
Hors ligne Ruca # Posté le 08/02/2012 à 11:44:12
Avatar

Bonjour,
Je suis un débutant PHP ( et autres ;) ) et j'aimerais savoir si vous avez une idée pour connaitre les champs modifiées d'un formulaire.
Je vais essayer de m'expliquer, j'ai un formulaire de recherche qui fait appel à un fichier PHP qui exécute les requêtes pour afficher dans un autre formulaire les données qui correspondent à la recherche (ce qui fonctionne parfaitement).
Mes données s'affichent en tableau (lignes) où tous les champs sont modifiables par l'utilisateur sauf l'id de l'enregistrement qui est caché, quand je fait enregistrer les modifications avec un UPDATE MYSQL tous mes enregistrements sont mis à jour (modifiés ou pas) et j'aimerais savoir si c'est possible d'enregistrer que les champs modifiés différents de ceux enregistrés sur la BDD MySQL.
J’arrête pas de tourner et je trouve pas, je vous mets ci dessous mon idée de code qui ne marche pas

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
include("dossier/config.php");

mysql_connect("$host","$username","$password");
mysql_select_db("$db_name");

$verif = mysql_query("SELECT invit1,invit2,invit3,invit4,invit5 FROM ma_table");
while($row = mysql_fetch_array($verif)) {
$ida 	= $row["id"];
$invit1a= $row["invit1"];
$invit2a= $row["invit2"];
$invit3a= $row["invit3"];
$invit4a= $row["invit4"];
$invit5a= $row["invit5"];
} else {}

$size = count($_POST["id"]);

$i = 0;
while ($i < $size) {
$id 	= $_POST["id"][$i];
$invit1	= $_POST["invit1"] [$i];
$invit2	= $_POST["invit2"] [$i];
$invit3	= $_POST["invit3"] [$i];
$invit4	= $_POST["invit4"] [$i];
$invit5	= $_POST["invit5"] [$i];


$query = "UPDATE ma_table SET 
			`invit1` = '".$invit1."',
			`invit2` = '".$invit2."',
			`invit3` = '".$invit3."',
			`invit4` = '".$invit4."',
			`invit5` = '".$invit5."'
		WHERE 
                        `invit1` != '".$invit1a."' AND
			`invit2` != '".$invit2a."' AND
			`invit3` != '".$invit3a."' AND
			`invit4` != '".$invit4a."' AND
			`invit5` != '".$invit5a."' AND
                        `id` = '$id' LIMIT 1";
			
mysql_query($query) or die ("Error in query: $query");
$i++;

// Ecriture sur fichier log 
$filename = date('d-m-Y') . '.txt';
$folder = date('M-Y');
$path = $phpbb_root_path . 'logs/' . $folder . '/';
!is_dir($path) ? @mkdir($path) : '';
$fp = fopen($path . $filename, 'a');
fseek($fp, 0);
$date_str = 'D d M Y H:i:s';
$username_str = (isset($_SESSION['myusername']) ? $_SESSION['myusername'] : '-');
$export = sprintf('[%20s] %15s %10s %20s %25s %10s'."\n",
               date($date_str),
               $_SERVER['REMOTE_ADDR'],
               $username_str,
               $_SERVER['PHP_SELF'],
			   INVITATION_CLIENT,
			   $id);
fputs($fp, $export);
fclose($fp);
// Fin fichier log

 }
...


Mille mercis pour votre précieuse aide.
A tantôt
Édité le 08/02/2012 à 12:00:19 par Ruca
Publicité # Posté le 08/02/2012 à 11:44:12

Hors ligne philodick # Posté le 08/02/2012 à 12:07:17
Avatar

Il suffirait que tu ajoutes une condition pour vérifier si $invit1=$invit1a etc...
Mais ça complique le code, tu es sûr que ça a un intérêt ?
Hors ligne Ruca # Posté le 08/02/2012 à 12:13:08
Avatar

Bonjour philodick et merci de ton post,
En fait l’intérêt est que je crée un log pour savoir quel enregistrement à été mis à jour, si je ne sais pas lequel j'aurais dans le log tous ceux qui on été affichés (même s'il en a qu'un qui à été mis à jour) et mis à jour.
Des fois ça peut atteindre 300 enregistrements voir plus, donc je cherche quelque "chose" alléger la tache et à moi et à MYSQL.

Merci de ta réponse
Hors ligne philodick # Posté le 08/02/2012 à 13:38:19
Avatar

Tu pourrais créer ta requête comme ça :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
$query = "UPDATE ma_table SET";
for($i=0;$i<6;$i++)
{ 
if(${'invit'.$i}!=${'invit'.$i.'a'}) { $query .= "`invit".$i."` = '".${'invit'.$i."'," };
}
$query = substr($query,0,-1) /*pour enlever la dernière virgule) */
$query .= "WHERE ";
for($i=0;$i<6;$i++)
{
$query .= "`invit".$i."` != '".${'invit'.$i.'a'}."' AND" ;
}
$query .="`id` = '$id' LIMIT 1";

A tester, je n'ai pas vérifié la syntaxe.
Hors ligne Ruca # Posté le 08/02/2012 à 14:30:52
Avatar

Merci pour ce code,
mais mes invit1,invit2,invit3,invit4,invit5 sont des champs individuels au même titre que nom, prénom, tel, etc..., ou je mets des OUI/NON.
Chaque "invit" corresponds à un événement distinct

Donc j'ai essayé de faire ceci à partir de ton code:
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$query = "UPDATE matable SET";
for($i=0;$i<$size;$i++)
{ 
if(${'invit1'.$i}!=${'invit1a'.$i} AND 
    ${'invit2'.$i}!=${'invit2a'.$i} AND 
    ${'invit3'.$i}!=${'invit3a'.$i} AND 
    ${'invit4'.$i}!=${'invit4a'.$i} AND 
    ${'invit5'.$i}!=${'invit5a'.$i}
{ $query .= 
    "`invit1".$i."` = '".${'invit1'.$i."',"
    "`invit2".$i."` = '".${'invit2'.$i."',"
    "`invit3".$i."` = '".${'invit3'.$i."',"
    "`invit4".$i."` = '".${'invit4'.$i."',"
    "`invit5".$i."` = '".${'invit5'.$i."',"};
}
$query = substr($query,0,-1) /*pour enlever la dernière virgule) */
$query .= "WHERE ";
for($i=0;$i<$size;$i++)
{
$query .= "`invit1".$i."` != '".${'invit1a'.$i}."' AND"
          "`invit2".$i."` != '".${'invit2a'.$i}."' AND"
          "`invit3".$i."` != '".${'invit3a'.$i}."' AND"
          "`invit4".$i."` != '".${'invit4a'.$i}."' AND"
	  "`invit5".$i."` != '".${'invit5a'.$i}."' AND";
}
$query .="`id` = '$id' LIMIT 1";
?>

Mais j'obtiens une page blanche sans rien d'autre, les echos ne donnent rien bref je suis perdu ;)
Je poste mon php complet pour cette fonction histoire de voir si cela t'aide.
Code : PHP
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
@session_start();
if(($_SESSION['moi'] != 'toi')){
header("location: mapage.php");
}
?>

<?php
include("dossier/config.php");

mysql_connect("$host","$username","$password");
mysql_select_db("$db_name");

$verif = mysql_query("SELECT invit1,invit2,invit3,invit4,invit5 FROM ma_table");
	while($row = mysql_fetch_array($verif)) {
	$ida 	 = $row["id"];
	$invit1a = $row["invit1"];
	$invit2a = $row["invit2"];
	$invit3a = $row["invit3"];
	$invit4a = $row["invit4"];
	$invit5a = $row["invit5"];
	} else {}
	
$size = count($_POST["id"]);

$i = 0;
while ($i < $size) {
$id 	= $_POST["id"][$i];
$invit1	= $_POST["invit1"] [$i];
$invit2	= $_POST["invit2"] [$i];
$invit3	= $_POST["invit3"] [$i];
$invit4	= $_POST["invit4"] [$i];
$invit5	= $_POST["invit5"] [$i];

/* ANCIENNE REQUETE
$query = "UPDATE ma_table SET 
			`invit1` = '".$invit1."',
			`invit2` = '".$invit2."',
			`invit3` = '".$invit3."',
			`invit4` = '".$invit4."',
			`invit5` = '".$invit5."'
		WHERE 
			`".$id."` 	   = '".$ida."' 		AND
			`".$invit1."` != '".$invit1a."' AND
			`".$invit2."` != '".$invit2a."' AND
			`".$invit3."` != '".$invit3a."' AND
			`".$invit4."` != '".$invit4a."' AND
			`".$invit5."` != '".$invit5a."' AND
            `id` = '$id' LIMIT 1";
mysql_query($query) or die ("Error in query: $query");
$i++;			
*/ // ANCIENNE REQUETE

echo $query = "UPDATE ma_table SET";
for($i=0;$i<$size;$i++)
{ 
if(${'invit1'.$i}!=${'invit1a'.$i} AND 
   ${'invit2'.$i}!=${'invit2a'.$i} AND 
   ${'invit3'.$i}!=${'invit3a'.$i} AND 
   ${'invit4'.$i}!=${'invit4a'.$i} AND
   ${'invit5'.$i}!=${'invit5a'.$i}
{ $query .= 
   "`invit1".$i."` = '".${'invit1'.$i."',"
   "`invit2".$i."` = '".${'invit2'.$i."',"
   "`invit3".$i."` = '".${'invit3'.$i."',"
   "`invit4".$i."` = '".${'invit4'.$i."',"
   "`invit5".$i."` = '".${'invit5'.$i."',"};
}
$query = substr($query,0,-1) /*pour enlever la dernière virgule) */
$query .= "WHERE ";
for($i=0;$i<$size;$i++)
{
$query .= "`invit1".$i."` != '".${'invit1a'.$i}."' AND"
	  "`invit2".$i."` != '".${'invit2a'.$i}."' AND"
          "`invit3".$i."` != '".${'invit3a'.$i}."' AND"
          "`invit4".$i."` != '".${'invit4a'.$i}."' AND"
	  "`invit5".$i."` != '".${'invit5a'.$i}."' AND";
}
$query .="`id` = '$id' LIMIT 1";
		
// Ecriture sur fichier log 
$filename = date('d-m-Y') . '.txt';
$folder = date('M-Y');
$path = $phpbb_root_path . 'logs/' . $folder . '/';
!is_dir($path) ? @mkdir($path) : '';
$fp = fopen($path . $filename, 'a');
fseek($fp, 0);
$date_str = 'D d M Y H:i:s';
$username_str = (isset($_SESSION['meagain']) ? $_SESSION['meagain'] : '-');
$export = sprintf('[%20s] %15s %10s %20s %25s %10s'."\n",
               date($date_str),
               $_SERVER['REMOTE_ADDR'],
               $username_str,
               $_SERVER['PHP_SELF'],
			   INVITATION_CLIENT,
			   $id);
fputs($fp, $export);
fclose($fp);
// Fin fichier log

 }
 if (isset($_POST["enregistrer"])) {
?>			
			<script type="text/javascript" language="javascript">
			alert('Les enregistrements ont été mis à jour !')
			document.location.href="func_recheven.php";
			</script>
<?php			
}
else {
?>			
			<script type="text/javascript" language="javascript">
			alert('Les enregistrements ont été mis à jour !')
			document.location.href="func_rechevengd.php";
			</script>
<?php			
}
 mysql_close();
 ?>

Et encore merci pour ton aide
++
Édité le 08/02/2012 à 14:33:53 par Ruca
Hors ligne philodick # Posté le 08/02/2012 à 15:44:17
Avatar

As-tu essayé mon code quand même ?
Sinon, je voulais simplifier avec le for mais tu peux faire en dur (mais sans boucle alors):

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php $query = "UPDATE ma_table SET ";
if($invit1!=$invit1a) { $query.="`invit1` = '".$invit1."'," };
if($invit2!=$invit2a) { $query.="`invit2` = '".$invit2."'," };
if($invit3!=$invit3a) { $query.="`invit3` = '".$invit3."'," };
if($invit4!=$invit4a) { $query.="`invit4` = '".$invit4."'," };
if($invit5!=$invit5a) { $query.="`invit5` = '".$invit5."'" };
$query.=" WHERE                   
`invit1` != '".$invit1a."' AND
`invit2` != '".$invit2a."' AND
`invit3` != '".$invit3a."' AND
`invit4` != '".$invit4a."' AND
`invit5` != '".$invit5a."' AND
`id` = '$id' LIMIT 1";
Hors ligne Ruca # Posté le 08/02/2012 à 16:42:18
Avatar

Re-coucou,
oui j'avais essayé ton code mais j'avais une page blanche.
Avec ton nouveau code j'ai la même chose, page blanche.
Je vais quand même me baser sur ton code pour essayer d'avancer en attendant.
Mille mercis et si t'as d'autres idées...n’hésite pas ;)
Hors ligne philodick # Posté le 08/02/2012 à 16:49:37
Avatar

Si tu as une page blanche c'est qu'il y a un autre problème, dans tous les cas tu devrais au moins avoir l'alertbox.
Hors ligne Ruca # Posté le 08/02/2012 à 17:29:47
Avatar

Re philodick,

effectivement cela viens de ma requête:
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
$sql="SELECT invit1,invit2,invit3,invit4,invit5 FROM ma_table";
$result=mysql_query($sql);
$row = mysql_fetch_assoc($result);
$count=mysql_num_rows($result);
if ($count > 1)){
	$invit1a = $row['invit1'];
	$invit2a = $row['invit2'];
	$invit3a = $row['invit3'];
	$invit4a = $row['invit4'];
	$invit5a = $row['invit5'];
} else {?><script ="text/javascript"> alert('Marche PAS'); </script><?php}


La je l'ai changée mais je vois toujours pas ou elle est l'erreur.
ça me prends la tête, je suis sûr que c'est une connerie.

Merci quand même et à plouche :)
Édité le 08/02/2012 à 17:30:09 par Ruca
Hors ligne philodick # Posté le 08/02/2012 à 18:41:53
Avatar

A part que tu devrais avoir 'if ($count > 0)', je ne vois pas de problème a priori.
Hors ligne Ruca # Posté le 09/02/2012 à 10:38:34
Avatar

Bonjour philodick,
Je comprends pas non plus pourquoi ça marche pas, mais moi c'est normal :)

La mon ancienne requête fonctionne avec cette modification...
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
$sql = mysql_query("SELECT invit1,invit2,invit3,invit4,invit5 FROM matable");
while( $result = mysql_fetch_array($sql))
{
$invit1a = $result["invit1"];
$invit2a = $result["invit2"];
$invit3a = $result["invit3"];
$invit4a = $result["invit4"];
$invit5a = $result["invit5"];
}


...mais sans ton code, donc je reviens au début de mon problème sauf que la ma requête MYSQL fonctionne.
Je vais continuer à essayer de trouver.
Merci beaucoup d'avoir essayé de m'aider.
Bonne journée.
Hors ligne philodick # Posté le 09/02/2012 à 11:25:58
Avatar

Dans cette requête, ta table s'appelle 'matable' et non 'ma_table'...
Hors ligne Ruca # Posté le 09/02/2012 à 15:24:31
Avatar

Hello,
t’inquiète matable ou ma_table c'est juste pour pas donner mon vrai nom de table, j'ai bien fait attention a ce que ce soit la même dans la requête.

A plus tard

++

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx