2009-12-17 3 views
0

Possible Duplicate:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectAvertissement: gregoriantojd() attend le paramètre 1 à être long, chaîne donnée en ligne 19

à chaque fois que je tente de tirer une date à partir de la ligne caseOpen dans tbl_accident Je suis accueilli par l'erreur suivante ...

Warning: gregoriantojd() expects parameter 1 to be long, string given in on line 19

quel pourrait être le problème?

la date à caseOpen a le format jj/mm/aaaa

<div style="paddingz: 5px;"> 
<table width="100%" height="100%" border="0" cellpadding="5" cellspacing="0" class="cp"> 
<?php 
// Make a MySQL Connection 
mysql_select_db("speedycms") or die(mysql_error()); 

// Get all the data from the "example" table 
$result = mysql_query("SELECT * FROM tbl_accident ORDER BY id ASC") 
or die(mysql_error()); 

// Define $color=1 
$color="1"; 

// date difference 
function dateDiff($dformat, $endDate, $beginDate) 
{ 
    $date_parts1=explode($dformat, $beginDate); 
    $date_parts2=explode($dformat, $endDate); 
    $start_date=gregoriantojd($date_parts1[0], $date_parts1[1], $date_parts1[2]); 
    $end_date=gregoriantojd($date_parts2[0], $date_parts2[1], $date_parts2[2]); 
    return $end_date - $start_date; 
} 

$date1 = $row['caseOpen']; 
$date2 = date('d/m/Y'); 

echo ' 
<tr bgcolor="#cccccc"> 
<td width="45px">Case ID</td> 
<td>Client Name/Address</td> 
<td>Accident Date</td> 
<td>Case Opened</td> 
<td>Days Running</td></tr>'; 
while($rows=mysql_fetch_array($result)){ 


// If $color==1 table row color = #FFC600 
if($color==1){ 
echo "<tr bgcolor='#f2f2f2' valign='top'> 
<td>".$rows['id']."</td> 
<td>".$rows['clientName']." <BR> ".$rows['address']."</td> 
<td>".$rows['doaDay']."/".$rows['doaMonth']."/".$rows['doaYear']."</td> 
<td>".$rows['caseOpen']."</td> 
<td>". dateDiff("/", $date2, $date1) ."</td> 
</tr>"; 
// Set $color==2, for switching to other color 
$color="2"; 
} 

// When $color not equal 1, use this table row color 
else { 
echo "<tr bgcolor='#ffffff' valign='top'> 
<td>".$rows['id']."</td> 
<td>".$rows['clientName']." <BR> ".$rows['address']."</td> 
<td>".$rows['doaDay']."/".$rows['doaMonth']."/".$rows['doaYear']."</td> 
<td>".$rows['caseOpen']."</td> 
</tr>"; 
// Set $color back to 1 
$color="1"; 
} 

} 
echo ''; 
?>  
</table>  
</div> 

Je vous serais reconnaissant de toute aide. Merci d'avance!

Répondre

1

Au lieu de

$date_parts1=explode($dformat, $beginDate); 
$date_parts2=explode($dformat, $endDate); 
$start_date=gregoriantojd($date_parts1[0], $date_parts1[1], $date_parts1[2]); 
$end_date=gregoriantojd($date_parts2[0], $date_parts2[1], $date_parts2[2]); 

essayer cette

$date_parts1=strptime($beginDate, 'dd/mm/YYYY'); 
$date_parts2=strptime($endDate, 'dd/mm/YYYY'); 
$start_date=gregoriantojd($date_parts1['tm_mday'], $date_parts1['tm_mon'], $date_parts1['tm_year']); 
$end_date=gregoriantojd($date_parts2['tm_mday'], $date_parts2['tm_mon'], $date_parts2['tm_year']); 

Il est un peu plus longtemps, mais strptime est spécifiquement pour transformer les chaînes de date formatée dans un tableau de pièces nommées.

+0

Erreur fatale: Appel à la fonction non définie strptime() ?? – methuselah

+0

Oups, j'avais manqué que ce n'est pas implémenté sur Windows ou dans les versions de PHP antérieures à 5.1. J'avais commencé à écrire une autre réponse, mais je dois l'avoir annulée avant de poster. Accrochez-vous et je vais le réécrire de la mémoire. – Powerlord

1

explode() prend une chaîne et renvoie un tableau de chaînes. utilisez intval() pour convertir le (s) argument (s) en gregoriantojd().

modifier

manuel:

int gregoriantojd (int $month , int $day , int $year ) 

votre code:

explode('d/m/y', ...) 
+0

merci pour le conseil. le message d'erreur est disparu mais maintenant le compte de date est toujours zéro. – methuselah

0

C'est un peu similaire à une partie de la réponse supprimé Alix Axel:

function dateDiff($endDate, $beginDate) 
{ 
    $endTimestamp = strtotime($endDate); 
    $beginTimestamp = strtotime($beginDate); 

    // There are 86400 seconds in a day 
    return ($endTimestamp - $beginTimestamp)/86400; 
} 

Notez que le nombre d'arguments est passé de 3 à 2.

Notez également que strtotime fait des suppositions si 12/11/2009 serait le 11 décembre 2009 ou le 12 novembre 2009 en fonction de vos paramètres régionaux.

+0

merci pour l'aide. il n'y a pas d'erreur mais le nombre de date reste 0. suis-je en utilisant les variables faux? – methuselah

+0

merci l'homme a réussi à travailler! – methuselah

+0

Je m'excuse si quelque chose n'allait pas, nous n'avons pas PHP où je travaille, et je ne vérifie pas habituellement SO de la maison. Laissez-moi deviner, j'avais besoin de plus de parenthèses sur la ligne de retour? – Powerlord

0

c'est ce que j'ai fini par faire R. Bemrose ... voulait sauter tout le truc de la fonction entièrement ... qu'est-ce que tu penses?

$caseOpen = date('d/m/Y', strtotime($rows['caseOpen'])); 
$caseOpen2 = date('Y-m-d', strtotime($rows['caseOpen'])); 
$days = (strtotime(date("Y-m-d")) - strtotime("$caseOpen2"))/(60 * 60 * 24); 
$days2 = round($days); 

cela fonctionne parfaitement!

Questions connexes