Skip to content
Extraits de code Groupes Projets
Valider c5b9ec24 rédigé par Fil's avatar Fil
Parcourir les fichiers

faux conflits d'edition: sur certains serveurs SELECT MD5(texte) ne donne pas...

faux conflits d'edition: sur certains serveurs SELECT MD5(texte) ne donne pas pareil que md5(SELECT texte) ; on resoud en se limitant au md5 de php
parent 48d9ba65
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -301,16 +301,14 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctrl_') ...@@ -301,16 +301,14 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctrl_')
} }
if (!$champs) return; if (!$champs) return;
// On veut savoir si notre modif va avoir un impact ; en mysql // On veut savoir si notre modif va avoir un impact
// on pourrait employer mysql_affected_rows() mais pas en multi-base // par rapport aux donnees contenues dans la base
// donc on fait autrement, avec verification prealable // (qui peuvent etre differentes de celles ayant servi a calculer le ctr)
// On utilise md5 pour eviter la casse (en SQL: 'SPIP'='spip') $s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur);
$verifier = array(); $intact = true;
foreach ($champs as $ch => $val) foreach ($champs as $ch => $val)
$verifier[] = "($ch IS NULL OR MD5($ch)!=".sql_quote(md5($val)).")"; $intact &= ($s[$ch] == $val);
if (!sql_countsel($spip_table_objet, "($id_table_objet=$id) AND (" . join(' OR ',$verifier). ")", if ($intact) return;
null,null,null,$serveur))
return;
// Detection de conflits : // Detection de conflits :
// On verifie si notre modif ne provient pas d'un formulaire // On verifie si notre modif ne provient pas d'un formulaire
...@@ -322,15 +320,13 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctrl_') ...@@ -322,15 +320,13 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctrl_')
if ($m = $ctr[$prefix.$key]) { if ($m = $ctr[$prefix.$key]) {
$ctrh[$key] = $m; $ctrh[$key] = $m;
$ctrq[] = $key; $ctrq[] = $key;
$ctrq[] = "md5($key) AS ctrq_$key";
} }
} }
if ($ctrq) { if ($ctrq) {
$ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur); $ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur);
foreach ($ctrh as $key => $m) { foreach ($ctrh as $key => $m) {
if ($m != $ctrq['ctrq_'.$key] if ($m != md5($ctrq[$key])
AND $champs[$key] !== $ctrq[$key] AND $champs[$key] !== $ctrq[$key]) {
AND $ctrq['ctrq_'.$key] !== null) {
$conflits[$key] = array( $conflits[$key] = array(
'base' => $ctrq[$key], 'base' => $ctrq[$key],
'post' => $champs[$key] 'post' => $champs[$key]
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter