Changement de date (timestamp) php + SQL

Mammouth du PHP | 687 Messages

13 févr. 2011, 15:27

Bonjour à tous,

j'ai une fonction qui me permet d'ajouter une année à une fiche de mon site lorsque je clique sur un lien, ce que je souhaite faire c'est la même opération mais en retirant 1 année en cliquant sur un lien. Pouvez vous m'aider svp? Merci

Voici mon codage php
//--------------------------- renouveller la date d'echeance ------------------------------
	if (isset($_GET['date_limite']) && isset($_GET['id'])) {
		$id = $_GET['id'];
		$new_date_limite = (time()+(86400 * 364));
		
		$conn = db_connect();	
    		$sql = "update entreprises_dossiers set date_limite = '$new_date_limite' where id = '$id'";
    		$result = @mysql_query($sql, $conn);
    			
    		echo "<meta http-equiv=\"refresh\" content=\"0;url=$_SERVER[HTTP_REFERER]\" />";
	}
//-----------------------------------------------------------------------------------------
LIEN POUR RENOUVELER LA DATE (AJOUT D'UNE ANNEE)
<?php echo stripslashes(date('d/m/Y', $aff_donnee_dossier[date_limite]));?>&nbsp;&nbsp;[   <a href="dossier_entreprise.php?date_limite=<?php echo $aff_donnee_dossier[date_limite]; ?>&id=<?php echo $aff_donnee_dossier[id]; ?>">Renouveller la date limite</a>   ]

Merci par avance.

ViPHP
xTG
ViPHP | 7331 Messages

13 févr. 2011, 16:24

Il suffit de faire un - à la place d'un +...

Mammouth du PHP | 687 Messages

13 févr. 2011, 16:45

Merci pour ta réponse,
c'est ce que j'ai fait mais le problème c'est que ça agit sur les deux liens an même temps...
Il faut que le premier lien serve à renouveler la date et l'autre lien à retirer un an ou 2 par exemple...

C'est ça mon problème... :(

ViPHP
xTG
ViPHP | 7331 Messages

13 févr. 2011, 17:40

Il faut rajouter une variable dans l'url définissant l'action, par exemple act=enlever
Et dans le code :
if( isSet($_GET['act']) && $_GET['act'] == "enlever" )
  $new_date_limite = (time()-(86400 * 364));
else
  $new_date_limite = (time()+(86400 * 364));

Mammouth du PHP | 687 Messages

13 févr. 2011, 17:47

merci.

Mais je ne comprends pas ou je dois placer ce code ni comment l'adapter à mon code d'origine...? #-o

Mammouth du PHP | 687 Messages

13 févr. 2011, 23:45

Quelqu'un à une idée ???

Merci par avance.

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

14 févr. 2011, 00:15

Ben le code php que t'a donné xTG doit être placé dans la partie php de ton script, et la modification des liens se fait dans le html .... quoi, ça t'aide pas ? :p

Pour la partie php, tu remplaces ton calcul " $new_date_limite = (time()+(86400 * 364)); " par le test de xTG, et pour le lien, il te suffit de rajouter un " &act=enlever" dans l'url du lien qui fait la soustraction :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 5462 Messages

14 févr. 2011, 00:19

Il faut rajouter une variable dans l'url définissant l'action, par exemple act=enlever
Et dans le code :
if( isSet($_GET['act']) && $_GET['act'] == "enlever" )
  $new_date_limite = (time()-(86400 * 364));
else
  $new_date_limite = (time()+(86400 * 364));

c'est plutôt :
$new_date_limite = strtotime('+1 year');
$new_date_limite = strtotime('-1 year');
EDIT : vue que c'est du mysql derrière, il faut utiliser DATE_ADD et DATE_SUB

avec un $sign - ou +
UPDATE `entreprises_dossiers` SET `date_limite` $sign INTERVAL 1 YEAR WHERE `id`=$id
et oublie pas de protèger les valeur avec mysql_real_escape_string, de toujours protéger les champs SQL avec `, et de bien mettre le type c'est `id`=$id pas `id`='$id'

:wink:

Mammouth du PHP | 687 Messages

14 févr. 2011, 01:22

Merci beaucoup pour cette réponse mais là je suis complétement perdu.
Je ne sais même pas par ou commencer...?
il faut une seule connexion à la base pour les 2 liens? (1 lien qui permet d'ajouter une année à 2011 et un lien qui permet de retirer une année à 2011)

Pour rappel voici mon code qui permet d'ajouter une année à 2011:
//--------------------------- renouveller la date d'echeance ------------------------------
        if (isset($_GET['date_limite']) && isset($_GET['id'])) {
                $id = $_GET['id'];
                $new_date_limite = (time()+(86400 * 364));
               
                $conn = db_connect();  
                $sql = "update entreprises_dossiers set date_limite = '$new_date_limite' where id = '$id'";
                $result = @mysql_query($sql, $conn);
                       
                echo "<meta http-equiv=\"refresh\" content=\"0;url=$_SERVER[HTTP_REFERER]\" />";
        }
//-----------------------------------------------------------------------------------------
LE LIEN QUI ACTIONNE LA FONCTION
<?php echo stripslashes(date('d/m/Y', $aff_donnee_dossier[date_limite]));?>&nbsp;&nbsp;[   <a href="dossier_entreprise.php?date_limite=<?php echo $aff_donnee_dossier[date_limite]; ?>&id=<?php echo $aff_donnee_dossier[id]; ?>">Renouveller la date limite</a>   ]
Merci par avance.

Mammouth du PHP | 687 Messages

14 févr. 2011, 01:45

J'ai peut-être trouvé quelque chose d'intéressant, je ne sais pas si le codage est vraiment très bon mais on dirait que ça fonctionne...
Peut être avez vous des modifications à apporter?

LIEN QUI PERMET D'AJOUTER UNE ANNEE A 2011
<?php
        if (isset($_GET['date_limite']) && isset($_GET['id'])) {
                $id = $_GET['id'];
                $new_date_limite = (time()+(86400 * 364));
               
                $conn = db_connect();  
                $sql = "update entreprises_dossiers set date_limite = '$new_date_limite' where id = '$id'";
                $result = @mysql_query($sql, $conn);
                       
                echo "<meta http-equiv=\"refresh\" content=\"0;url=$_SERVER[HTTP_REFERER]\" />";
        }
?>

<?php echo stripslashes(date('d/m/Y', $aff_donnee_dossier[date_limite]));?>&nbsp;&nbsp;[   <a href="dossier_entreprise.php?date_limite=<?php echo $aff_donnee_dossier[date_limite]; ?>&id=<?php echo $aff_donnee_dossier[id]; ?>">Renouveller la date limite</a>   ]
 
LIEN QUI PERMET DE RETIRER UNE ANNEE A 2011
<?php
	if (isset($_GET['date_limite']) && isset($_GET['id'])) {
		$id_annul = $_GET['id_annul'];
		$new_date_limite_annul = (time()-(86400 * 364));
		
		$conn = db_connect();	
    		$sql_annul = "update entreprises_dossiers set date_limite = '$new_date_limite_annul' where id = '$id_annul'";
    		$result = @mysql_query($sql_annul, $conn);
			
    			
    		echo "<meta http-equiv=\"refresh\" content=\"0;url=$_SERVER[HTTP_REFERER]\" />";
	}

?>

&nbsp;&nbsp;[   <a href="dossier_entreprise.php?date_limite=<?php echo $aff_donnee_dossier_annul[date_limite]; ?>&id=<?php echo $aff_donnee_dossier_annul[id]; ?>&id_annul=<?php echo $aff_donnee_dossier_annul[id]; ?>">Désactiver la fiche</a>   ]

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

14 févr. 2011, 22:09

Dans ton 2nd code, tu testes si $_GET['id'] est défini au lieu de $_GET['id_annul'] :
if (isset($_GET['date_limite']) && isset($_GET['id'])) {
                $id_annul = $_GET['id_annul'];
Et comme l'a signalé stealth35, en SQL les nombres ne doivent pas être délimités par des apostrophes. MySQL les tolères, mais c'est mieux de ne les utiliser que pour les chaines :)
Et pis perso, je trouve le code plus lisible quand on sort les variables des chaines, ça permet de les mettre en couleur et de les lire plus facilement... de même en ce qui concerne le SQL j'ai tendance à mettre les mots clés en majuscule pour les mêmes raison :
$sql_annul = "UPDATE entreprises_dossiers SET date_limite = '$new_date_limite_annul' WHERE id = " . $id_annul;
e
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

14 févr. 2011, 22:44

Merci beaucoup pour ta réponse! :D
Effectivement ce sera plus propre comme ça.

Merci.
Bonne soirée.
Post résolu.