Calcul de date php sql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Calcul de date php sql

par loubets » 02 janv. 2007, 15:26

Oui j'ai essayé mais sans succès.
Je pense que je vais laisser tomber.

Merci à tous.

par Truc » 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") 

par loubets » 02 janv. 2007, 14:27

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

par Invité » 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>";
	}

}

par Truc » 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()

par loubets » 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é :(

par Truc » 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.

par loubets » 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 :)

par Cyrano » 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.")");
//...

par loubets » 01 janv. 2007, 15:04

Merci Truc.

Je vais essayer ! ;)

par Truc » 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.

par Truc » 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 :)

par Invité » 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

par Cyrano » 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.

par thehawk » 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