2016-09-30 5 views
1

Возможно, отметьте мой пост как дубликат, я искал, но не могу найти ответ на свою проблему, я пробовал все, что видел ответы другого пост, но все же дает мне ту же ошибку: Фатальная ошибка: Вызов в формате функции член() на не-объект в ... Это код:Неустранимая ошибка: вызовите функцию-функцию участника() на не-объект в

<?php 

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="Movimientos Cancelados del Mes.xls"'); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

$server = "192.168.1.240"; 
$info = array("Database"=>"Ariel","UID"=>"sa","PWD"=>""); 
$conn = sqlsrv_connect($server, $info); 
$param = array('ReturnDatesAsStrings'=> true); 
$opt = array("Scrollable" => SQLSRV_CURSOR_KEYSET); 

$per = $_GET["periodo"]; 
$eje = $_GET["ejercicio"]; 
$mov = 'Movimiento'; 
$est = 'Estatus'; 
$cli = 'Cliente'; 
$rfc = 'RFC'; 
$tot = 'Total'; 
$fec = 'Fecha Timbrado'; 
$uuid = 'UUID'; 
$cert = 'Certificado SAT'; 
$sql = "select v.MovID as '$mov',v.Estatus as '$est',v.Cliente as '$cli',cte.rfc as '$rfc',(v.Importe+v.Impuestos)as '$tot', c.UUID as '$uuid',c.noCertificadoSAT as '$cert', c.FechaTimbrado as '$fec' 
from Venta V join CFD c on v.MovID = c.MovID join cte on v.cliente = cte.cliente 
where V.Estatus = 'Cancelado' and c.Periodo = '$per' and c.Ejercicio = '$eje' and c.Empresa = 'MGJ' 
order by FechaEmision"; 

var_dump($fec); 

$query = sqlsrv_query($conn, $sql); 

if($query === false) { 
    if(($errors = sqlsrv_errors()) != null) { 
     foreach($errors as $error) { 
      echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />"; 
      echo "code: ".$error[ 'code']."<br />"; 
      echo "message: ".$error[ 'message']."<br />"; 
     } 
    } 
} 

$campos = sqlsrv_num_fields($query); 

$i = 0; 

echo "<table border=''><tr>"; 
echo "<th>$mov</th>"; 
echo "<th>$est</th>"; 
echo "<th>$cli</th>"; 
echo "<th>$rfc</th>"; 
echo "<th>$tot</th>"; 
echo "<th>$uuid</th>"; 
echo "<th>$cert</th>"; 

while ($row = sqlsrv_fetch_array($query)) { 

    $mov = $row['Movimiento']; 
    $est = $row['Estatus']; 
    $cli = $row['Cliente']; 
    $rfc = $row['RFC']; 
    $tot = $row['Total']; 
    $uuid = $row['UUID']; 
    $cert = $row['Certificado SAT']; 
    $fec = $row['Fecha Timbrado']; 

    echo "<tr>"; 
    echo "<td>".$mov."</td>"; 
    echo "<td>".$est."</td>"; 
    echo "<td>".$cli."</td>"; 
    echo "<td>".$rfc."</td>"; 
    echo "<td>".$tot."</td>"; 
    echo "<td>".$uuid."</td>"; 
    echo "<td>".$cert."</td>"; 
    echo "<td>".$fec->format("d/m/Y")."</td>"; 

} 

echo "</table>"; 
    sqlsrv_close($conn); 
?> 

и смотреть и смотреть в Интернете, но я нахожу, что это дает мне ошибку. Самое смешное в том, что с ошибкой показываются только некоторые результаты, некоторые из них, если они напечатаны на экране, но после некоторых строк дают ошибку, это может быть сначала, это может быть около конец запроса, игнорировать первые несколько строк кода, для экспорта в Excel ... Ошибка отмечена на строка 75, которая равна:

echo "<td>".$fec->format("d/m/Y")."</td>"; 
+0

Просто FYI, ваш код уязвим для SQL-инъекций .... – Hackerman

+0

@Hackerman спасибо за наблюдение, это только внутренний сайт –

+0

http://php.net/manual/en/datetime.format.php - - http://php.net/manual/en/function.date.php –

ответ

0

Публикация как вики-сообщества, так как она была разрешена в комментариях с несколькими предложениями к OP.

If (! empty($variable)) echo($variable); else echo ('NULL'); 

является окончательным решением проблемы.