Calcul de date php sql

Eléphanteau du PHP | 20 Messages

01 janv. 2007, 09:42

Bonjour et bonne annee a tous :)

(Desole pour les accents manquants dans mon message mais j`ecris depuis un clavier americain)

Voila mon probleme.
J`ai un script de petites annonces.

La partie ci-dessous permet a l`utilisateur qui se log dans son espace perso, d`afficher les petites annonces qu`il a mis en ligne (resume de l`annonce par ex date de mise en ligne, no de l`annonce...)

J`aimerai dans le script ci-dessous inclure apres `$M_DATE, (soit la date de mise en ligne)` la date d`expiration. (30 jours plus tard)

Actuellement la date qui s`affiche est celle inscrite dans la base sql au moment de la mise en ligne de l`annonce.

Cela est il possible dans la mesure ou la date d`expiration n`est pas inscrite dans la bdd au moment de l`insertion de l`annonce ?

Merci dans tous les cas.


<?php



$expired_timestamp = time() - $EXPIRE_TIMESTAMP;



if(SQLCount("re_ads","WHERE username='$AuthUserName' AND date>=".$expired_timestamp) == 0)

{

	echo '<table summary="" border="0" width=95%>

 				<tr>

 					<td><br><b>'.$ANY_ADS.'</b></td>

 				</tr>

 			</table>

			';

	

}

else

{



				RenderTable

				(

						"re_ads",

						array(id","headline","date","price"),

						array($MODIFY,$ANNONCE_NO,$M_HEADLINE,$M_DATE,$M_PRICE." (".$CURRENCY_SYMBOL.")"),

						"640",

						"WHERE username='$AuthUserName' AND date>=".$expired_timestamp,

						$EFFACER,

						"id",

						"index.php?category=".$category."&action=".$action

				);

}

?>

Mammouth du PHP | 991 Messages

01 janv. 2007, 11:56

Je n'est pas tout a fait compris ... mais bon ce n'est pas grave va voir ca :
http://phpcodeur.net/articles/php/dates
Ca pourra peut etre t aider

thehawk
DevOps, Symfony4, Hoa

Mammouth du PHP | 19672 Messages

01 janv. 2007, 12:10

Si on résume, tu veux savoir comment calculer la date d'expiration à partir de la date de mise en ligne ?

Si c'est ça, tu peux le faire en utilisant un timestamp :

-1- transformer la date de mise en ligne en timestamp;
-2- ajouter la durée de validité en nombre de secondes (30j * 24h * 60' * 60") ;
-3- transformer le résultat obtenu en date :

Si ta date est au format aaaa-mm-jj, ça va donner sommairement :
<?php
/* Date de départ : exemple */
$M_DATE = "2007-02-12";
/* Récupération des éléments individuels qui composent la date */
$date = explode("-", $M_DATE);
/* Durée de validité d'une annonce en nombre de jours */
$validite = 30;
/* transformer la date de mise en ligne en timestamp */
$t1 = mktime(0, 0, 0, $date[1], $date[2], $date[0]);
/* ajouter la durée de validité en nombre de secondes (30j * 24h * 60' * 60") */
$duree = $validite * 24 * 60 * 60;
/* Ajouter la durée à la date de départ */
$t2 = $t1 + $duree;
/* transformer le résultat obtenu en date */
$expiration = date("Y-m-d", $t2);
echo("<p>". $expiration ."</p>");

// va afficher "2007-03-14"
?>
À toi d'adapter si le format de la date de départ est différent.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

01 janv. 2007, 14:50

Merci pour vos reponses :)

Il s`agit d`un site de petites annonces.
En fait a travers son panneau d`admin chaque utilisateur a acces a ses annonces pour les modifier, les lister ...etc

Lorsqu`il visualisent la liste de ses annonces, il a comme info pour chaque annonce:

Le no de l`annonce
Le titre de l`annonce
La date d`insertion
Le prix du bien mis en vente

Je voudrai rajouter la date d`expiration dans la liste pour apporter une info supplementaire.

Le probleme c`est que les donnees sont extraites d`une table sql et que je ne sais pas comment ajouter cette info lors de la requete.

Merci de ton explication Cyrano.
La portion de code a modifier est ICI*
re_ads", 

                        array(id","headline","date","price"), 

                        array($MODIFY,$ANNONCE_NO,$M_HEADLINE,$M_DATE,ICI*,$M_PRICE." (".$CURRENCY_SYMBOL.")"), 
Peux tu me dire s`il est possible d`ajouter ton code a cet endroit du script ?

Merci d`avance

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 janv. 2007, 14:54

Autre façon de calculer un écart (en PHP) :
//1ère Méthode
/* Date de départ : exemple */
$M_DATE = "2007-02-12";
/* Durée de validité d'une annonce en nombre de jours */
$validite = 40;
/* ajouter la durée de validité en nombre de secondes (30j * 24h * 60' * 60") */
$duree = $validite * 24 * 60 * 60;
/* transformer le résultat obtenu en date */
$expiration = date("Y-m-d", strtotime($M_DATE)+$duree);
echo("<p>". $expiration ."</p>");

//2ème Méthode
$date = explode("-", $M_DATE);
$validite = 40;
$t1 = mktime(0, 0, 0, $date[1], ($date[2]+$validite), $date[0]);
$expiration = date("Y-m-d", $t1);
echo("<p>". $expiration ."</p>");
Sinon tu as aussi ce post
où tu peux trouver des fonction SQL intéressantes :)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 janv. 2007, 14:59

Peux tu me dire s`il est possible d`ajouter ton code a cet endroit du script ?
oui, suffit de placer la variable qui va bien ($expiration) à l'endoit voulu.
Modifié en dernier par Truc le 01 janv. 2007, 15:34, modifié 1 fois.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 20 Messages

01 janv. 2007, 15:04

Merci Truc.

Je vais essayer ! ;)

Mammouth du PHP | 19672 Messages

01 janv. 2007, 15:49

Mets ce code dans une fonction, par exemple :
<?php
function expire($publie, $validite = 30)
{
    /* Récupération des éléments individuels qui composent la date */
    $date = explode("-", $publie);
    /* transformer la date de mise en ligne en timestamp */
    $t1 = mktime(0, 0, 0, $date[1], $date[2], $date[0]);
    /* ajouter la durée de validité en nombre de secondes (30j * 24h * 60' * 60") */
    $duree = $validite * 24 * 60 * 60;
    /* Ajouter la durée à la date de départ */
    $t2 = $t1 + $duree;
    /* transformer le résultat obtenu en date */
    $expiration = date("Y-m-d", $t2);
    return $expiration;
}
/* Date de départ : exemple */
$M_DATE = "2007-02-12";
echo("<p>". expire($M_DATE, 40) ."</p>");
// va afficher "2007-03-24"
echo("<p>". expire($M_DATE) ."</p>");
// va afficher "2007-03-14"
?> 
Et donc dans ton code, tu auras :
//...
array($MODIFY, $ANNONCE_NO, $M_HEADLINE, $M_DATE, expire($M_DATE), $M_PRICE." (".$CURRENCY_SYMBOL.")");
//...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

01 janv. 2007, 17:37

Merci Cyrano,

pour le moment ça ne marche pas.

Je désormaischez moi (je peux éditer le fichier c'est plus simple).
En fait j'ai commis une erreur tout à l'heure.

La phrase qui affiche les données de la base sql c'est celle là
array(id","headline","date","price"),
Le mot date, correspond au champ date de la base sql.

Lorsque l'utilisateur affiche la liste de ses annonces celà donne ça:

Code : Tout sélectionner

N° Type Date Prix 100 Terrain 28/12/06 115000 101 Terrain 25/12/06 75000 102 Maison 24/12/06 250000 103 Maison 24/12/06 175000 104 Maidon 24/12/06 300000

selon l'utilisateur, il y a donc 1 ou plusieurs annonces, et celà va de soi , peût être plusieurs date à afficher en même temps.

En tout cas merci de votre patience :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 janv. 2007, 17:48

Montre nous un code plus complet parce que là il manque des choses pour la compréhension.
Apparemment tu commences par remplir un tableau puis tu l'affiches :-k
Dans ce cas faudrait ajouter un paramètre à ce tableau pour la date d'expiration.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 20 Messages

01 janv. 2007, 18:36

Le code complet du script servant à afficher la liste d'annonce est en début de message.

Apparement mon problème est relativement compliqué :(

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 janv. 2007, 18:51

Apparement mon problème est relativement compliqué :(
Non mais tu passes par une fonction RenderTable()... on ne sait pas ce qu'elle fait.

Ton problème est résolu avec la fonction de Cyrano.

Veux tu afficher les deux dates (mise en ligne + expiration) ou seulement l'expiration ?

Dans le 1er cas montre nous la fonction RenderTable()

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

02 janv. 2007, 12:59

Voilà ce doit être ça !
function RenderTable(
						$strTable,
						$oCol,
						$oNames,
						$iWidth,
						$sqlClause,
						$strCheckColumnName,
						$strCheckValue,
						$strFormAction
						){

	global $arrHighlightIds;
	global $strHighlightIdName;
	global	$IS_RADIO;
	global $RADIO_VALUE;
	global $DBHost,$DBUser,$DBPass,$DBName,$DBprefix,$action,$category;
	
	global $strExplanationTitle,$PageSize,$PageNumber,$arrTDSizes,$iRTables;
	
	global $SEARCH_IN,$SEARCH,$TOTAL_NUMBER_OF_RESULTS,$QUERY_EXECUTED_FOR,$PAGE_SIZE,$customFormEnd,$order,$order_type,$ORDER_QUERY,$QUERY_TO_EXECUTE,$comboSearch,$textSearch;
	
	if(!isset($PageSize)){
		$PageSize=20;
	}
	
	if(!isset($PageNumber)){
		$PageNumber=1;
	}
	
	

	echo "
	<script>
	function ChangePageSize(x){
					var category='$category';
					var action='$action';
					var newSize=10;
					
					if(x==0){
						newSize=5;
					}
					else
					if(x==1){
						newSize=10;
					}
					else
					if(x==2){
						newSize=20;
					}
					else
					if(x==3){
						newSize=50;
					}
					else
					if(x==4){
						newSize=100;
					}
					
					document.location.href='index.php?category=$category&action=$action&PageSize='+newSize+'';
					
				}
				
		</script>
	
	";
	
	
	
	if(isset($order)){
		$strQuery="SELECT * FROM $DBprefix".$strTable." $sqlClause ORDER BY $order $order_type";
	}
	else
	if(isset($textSearch)){
			if(trim($sqlClause)!=""){
				$strQuery="SELECT * FROM $DBprefix".$strTable." ".$sqlClause." AND ".$comboSearch." LIKE '%".$textSearch."%'  ".(isset($ORDER_QUERY)?$ORDER_QUERY:"");
			}
			else{
					$strQuery="SELECT * FROM $DBprefix".$strTable." WHERE ".$comboSearch." LIKE '%".$textSearch."%'  ".(isset($ORDER_QUERY)?$ORDER_QUERY:"");
			}
	}
	else
	{
		$strQuery="SELECT * FROM $DBprefix".$strTable." ".$sqlClause." ".(isset($ORDER_QUERY)?$ORDER_QUERY:"");
	}

	if($QUERY_TO_EXECUTE){
		$strQuery=$QUERY_TO_EXECUTE;
	}
	
	$iTotalResults=SQLCount_Query($strQuery);

	mysql_connect($DBHost,$DBUser,$DBPass);
	mysql_select_db($DBName);

	list($msec1,$sec1)=explode(" ",microtime());
	$oDataTable=mysql_query($strQuery." LIMIT ".(($PageNumber-1)*$PageSize).",".($PageSize)."") or RegisterError("SQL_ERROR",$strQuery."<br>".mysql_error());
	list($msec2,$sec2)=explode(" ",microtime());
	$strExecutionTime=(intval($sec2)-intval($sec1))+(floatval($msec2)-floatval($msec1))." sec";
	
	
	mysql_close();

	echo "<table width=$iWidth>
				<tr>
					<td class=basictext>
							<table>
							<tr>
							<td class=basicText>
							<b>
							$PAGE_SIZE:
							<!--Taille de la page-->
							</b>
							</td>
							<td class=basicText valign=top>
								<select onchange='javascript:ChangePageSize(this.selectedIndex)'>
									<option ".($PageSize==5?"selected":"").">5</option>
									<option ".($PageSize==10?"selected":"").">10</option>
									<option ".($PageSize==20?"selected":"").">20</option>
									<option ".($PageSize==50?"selected":"").">50</option>
									<option ".($PageSize==100?"selected":"").">100</option>
								</select>
								
							 </td>
							 <td class=basictext>
							 	&nbsp;&nbsp;&nbsp;&nbsp;
								
								<b>";
																	
								for($f=1;$f<=ceil($iTotalResults/$PageSize);$f++){
								
									echo "<a href='index.php?category=$category&action=$action&PageSize=$PageSize&PageNumber=$f".(isset($order)?"&order=$order":"")."".(isset($order_type)?"&order_type=$order_type":"")."".(isset($comboSearch)?"&comboSearch=$comboSearch":"")."".(isset($textSearch)?"&textSearch=$textSearch":"")."'>$f</a>";
									echo "&nbsp;&nbsp;";
									
									if($f==20){
										break;
									}
									
									if($f%25==0){
										echo "<br>";
									}
								}
								
									
					echo "	 </b>
								
															
							 </td>
							 </tr>
							 </table>
							 
							 
					</td>
					<td class=basictext align=right>
						<b>
						";
								
				if(isset($strExplanationTitle)){
				
						$strExplanationTitle=str_replace("[COUNT]","(total: ".$iTotalResults.")",$strExplanationTitle);		
						
						echo $strExplanationTitle;			
				}
														
								
					echo "	
						</b>
					</td>
				</tr>
			</table><br>";
			
			
	$iRTables++;

	echo "<table height=22 cellspacing=0 cellpadding=0 width=$iWidth><form  action='$strFormAction' method=POST><tr>
	
	<td class=basictext width=60 >
	<a href=\"javascript:nvoid()\" onclick=\"document.all.spanSearch".$iRTables.".style.display='none';document.all.spanInfo".$iRTables.".style.display='block';\"><img src='images/qhelp.gif' width=12 height=13 border=0></a>
	&nbsp;
	<a href=\"javascript:nvoid()\" onclick=\"document.all.spanSearch".$iRTables.".style.display='block';document.all.spanInfo".$iRTables.".style.display='none';\"><img src='images/qsearch.gif' width=13 height=14 border=0></a>
	
	
	</td>
	
	<td width=".($iWidth-60)." class=basictext align=left valign=top>
	
		<span id=spanInfo".$iRTables." style='display:none'>
	$TOTAL_NUMBER_OF_RESULTS: <font color=red>".$iTotalResults."</font>
					&nbsp;&nbsp;
					$QUERY_EXECUTED_FOR: <font color=red>".$strExecutionTime."</font>
	</span>
	<span id=spanSearch".$iRTables." style='display:none'>
	$SEARCH_IN <select name=comboSearch style='font-size:11;font-family:verdana'>";
	
	for($k=0;$k<sizeof($oNames);$k++){
		if(strtolower(substr($oCol[$k],0,4))!="show"&&strtolower(substr($oCol[$k],0,4))!="edit")
		{
			echo "<option value=\"".$oCol[$k]."\" ".(isset($comboSearch)&&$comboSearch==$oCol[$k]?"selected":"").">".$oNames[$k]."</option>";
		}
	}
	
	echo "</select> &nbsp; <input style='font-size:11;font-family:verdana' ".(isset($textSearch)?$textSearch:"")." type=text name=textSearch> <input type=submit class=adminButton value=' $SEARCH '>
	</span>
	
					</td></form>
	</tr></table>";
	
	
	
	echo "<table cellpadding=3 cellspacing=0 width=$iWidth style='border-color:#cecfce;border-width:1px 1px 1px 1px;border-style:solid'>";
	echo "<form action='$strFormAction' method=POST> ";
	echo "<tr class=table_header height=20 nowrap>";
	
	
	$iTDWidth=0;
	$iDefaultTDWidth=0;
	
	$iTDTotalNumber=sizeof($oCol);
	
	
	if(!isset($arrTDSizes)){
		
		$iTDWidth=round(($iWidth-30)/$iTDTotalNumber);
		$arrTDSizes=array_fill(0, sizeof($oCol), $iTDWidth);
		
	}
	else{
		$iOccupied=0;
	
		$iTDHaveValues=0;	
				
		foreach($arrTDSizes as $strTDSize){
		
			if($strTDSize!="*"){
				$iOccupied+=intval($strTDSize);		
				$iTDHaveValues++;
			}
			
		}	
		
		if(($iTDTotalNumber-$iTDHaveValues)==0){
		
			$iDefaultTDWidth=round((($iWidth-30)-$iOccupied)/($iTDHaveValues));	
		
		}
		else{
			$iDefaultTDWidth=round((($iWidth-30)-$iOccupied)/($iTDTotalNumber-$iTDHaveValues));	
		}
		
		for($k=0;$k<sizeof($arrTDSizes);$k++){
		
				if($arrTDSizes[$k]!="*"){
					$arrTDSizes[$k]=intval($arrTDSizes[$k]);									
				}
				else{
					$arrTDSizes[$k]=$iDefaultTDWidth;
				}	
							
		}
			
	}

	
	if(trim($strCheckColumnName)!=""){
		echo "<td class=oHeader  width=30 nowrap >$strCheckColumnName</td>";
	}

	$iTDHeaderCounter=0;
	
	
	
	
	if(!isset($order_type)){
		$order_type="desc";
		$strImgName="";
	}
	else
	if($order_type=="asc"){
		$order_type="desc";
		$strImgName="up";
	}
	else{
		$order_type="asc";
		$strImgName="down";
	}
	
	$arrFields=GetFieldsInTable($strTable);

	
	foreach ($oNames as $columnName) 
	{
			echo "<td class=oHeader width=".$arrTDSizes[$iTDHeaderCounter]."  nowrap >
			<table cellspacing=0 cellpadding=0><tr><td  class=oHeader>
			".(in_array($oCol[$iTDHeaderCounter],$arrFields)?("<a href='".$strFormAction."&order=".$oCol[$iTDHeaderCounter]."&order_type=".$order_type."' style='color:#8c8a73'>"):"")."
			$columnName
			</a>
			</td><td  class=oHeader>
			".((isset($order)&&$order==$oCol[$iTDHeaderCounter]&&$strImgName!="")?"<img src='../ADMIN/images/".$strImgName.".gif' width=10 height=10 style='position:relative;top:2;left:3'>":"")."
			</td></tr></table>
			</td>";
			$iTDHeaderCounter++;
  	}

	echo "</tr>";

	$boolColor=true;


	
	while ($myArray = mysql_fetch_array($oDataTable))
	{
	
		
			if(isset($arrHighlightIds) && isset($strHighlightIdName) && in_array($myArray[$strHighlightIdName],$arrHighlightIds,false)){
				echo "<tr bgcolor=\"#efefef\"  height=20>";
			}
			else{
				echo "<tr bgcolor=".($boolColor?"#ffffff":"#efefef")."  height=20>";
			}

			if(trim($strCheckColumnName)!=""){
			
				$cVal=$myArray["$strCheckValue"];
				echo "<td class=oMain  nowrap >";
				
				if(isset($IS_RADIO)){
					echo "<input type=radio name=CheckList value=\"$cVal\" ".($cVal==$RADIO_VALUE?"checked":"").">";
				}
				else{
					echo "<input type=checkbox name=CheckList[] value='$cVal'>";
				}
			
				echo "</td>";
				}


			foreach ($oCol as $columnName) {



				$strParticularCases=particularCases($columnName,$myArray);

				if($strParticularCases!=""){
						echo $strParticularCases;
				}
				else
				if($columnName == "date")
				{
					if(isset($myArray[$columnName]) && $myArray[$columnName] != "")
					{
							global $PHP_DATE_FORMAT;
						echo "<td class=oMain>".date($PHP_DATE_FORMAT,$myArray[$columnName])."</td>";
					}
					else
					{
						echo "<td class=oMain>&nbsp;</td>";
					}
				}
				else{
						$val="";

						if(isset($myArray[$columnName])){

									$val=$myArray[$columnName];
						}
						
						if(isset($textSearch)&&$comboSearch==$columnName)
						{
							$val=eregi_replace($textSearch,"<span style='background:yellow'>".$textSearch."</span>",$val);
							echo "<td class=oMain>".$val."</td>";
						}
						else{
							if(substr($val,0,4) == "http")
							{
								echo "<td class=oMain><a href=\"$val\">$val</a></td>";
							}
							else{
   								echo "<td class=oMain>$val</td>";
							}
						}
				}
  			}

			echo "</tr>";

			$boolColor=$boolColor?false:true;

	}

	echo "</table>";

	
	if(trim($strCheckColumnName)!=""){
		echo "
			<br>
			<input type=hidden name='$strCheckColumnName' value=''>
			<table width=".($iWidth+15)." cellpadding=0 cellspacing=0><tr><td align=right>
			<input type=submit name=DELETE value=' $strCheckColumnName ' class=adminButton>
			</td></tr></table>
		";	
	}
	
	if(isset($customFormEnd)&&$customFormEnd){
	
	
	}
	else{
		echo "</form>";
	}

}

Eléphanteau du PHP | 20 Messages

02 janv. 2007, 14:27

j'ai oublié de préciser, en faite je voudrais afficher les deux dates (mise en ligne + expiration).

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

02 janv. 2007, 15:11

C'est plus compliqué que prévu...
As tu essayé la proposition de Cyrano?
array($MODIFY, $ANNONCE_NO, $M_HEADLINE, $M_DATE, expire($M_DATE), $M_PRICE." (".$CURRENCY_SYMBOL.")");
Résultat ?

Sinon mofifie aussi cette ligne (plus facile d'effectuer des tests de ton coté):
Remplace :
array("id","headline","date","price")
Par
array("id","headline","date","Expire","price") 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute