Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: gersofts en 23 de Octubre 2014, 01:20

Título: php Fatal error: Call-time pass-by-reference has been removed
Publicado por: gersofts en 23 de Octubre 2014, 01:20
Fatal error: Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of comprimir_arreglo(). in /home/gersofts/public_html/phpHotel/panel_facturas.php on line 24

-------------------------------------------------------------------------------------------------------------------
Código: [Seleccionar]
<?php
include_once(
'inc/validar.inc');
chdir(dirname(__FILE__));
include_once('../general/inc/gestor_facturacion.php');
chdir(dirname(__FILE__));
include_once('inc/xajax/xajax.inc.php');

function comprimir_arreglo($array){
$new_array = array();
foreach ($array as $element){
array_push($new_array,$element);
}
$array $new_array;
}

function eliminar_facturas($arrFacturasPausadasJS,$arrFacturasEnCursoJS){
/* @var $gestor_facturacion Gestor_Facturacion */
$gestor_facturacion Gestor_Facturacion::getInstancia();
$respuesta = new xajaxResponse();
$host 1;
$arrFacturasPausadasBorrar = array();
$arrFacturasPausadasBD $gestor_facturacion->obtener_facturas_pausadas($host);
$arrFacturasPausadasBorrar array_diff($arrFacturasPausadasJS,$arrFacturasPausadasBD);
comprimir_arreglo(&$arrFacturasPausadasBorrar);
if(sizeof($arrFacturasPausadasBorrar) > 0){
$respuesta->addScriptCall('eliminar_facturas_pausadas',$arrFacturasPausadasBorrar);
}

$arrFacturasEnCursoBorrar = array();
$arrFacturasEnCursoBD $gestor_facturacion->obtener_facturas_en_curso($host);
$arrFacturasEnCursoBorrar array_diff($arrFacturasEnCursoJS,$arrFacturasEnCursoBD);
comprimir_arreglo(&$arrFacturasEnCursoBorrar);
if(sizeof($arrFacturasEnCursoBorrar) > 0){
$respuesta->addScriptCall('eliminar_facturas_en_curso',$arrFacturasEnCursoBorrar);
}
$respuesta->addScriptCall('obtener_facturas');
return $respuesta;
}

function agregar_facturas($arrFacturasPausadasJS,$arrFacturasEnCursoJS){
/* @var $gestor_facturacion Gestor_Facturacion */
$gestor_facturacion Gestor_Facturacion::getInstancia();
$respuesta = new xajaxResponse();
$host 1;
$arrFacturasPausadasAgregar = array();
$arrFacturasPausadasBD $gestor_facturacion->obtener_facturas_pausadas($host);
$arrFacturasPausadasAgregar array_diff($arrFacturasPausadasBD,$arrFacturasPausadasJS);
comprimir_arreglo(&$arrFacturasPausadasAgregar);
foreach ($arrFacturasPausadasAgregar as $factura_impresion_id){
if(($arrFactura $gestor_facturacion->obtener_datos_factura($factura_impresion_id))){
$respuesta->addScriptCall('agregar_factura',$arrFactura);
}
else{
$respuesta->addAlert('Se produjo un error al recuperar una factura');
}
}
$arrFacturasEnCursoAgregar = array();
$arrFacturasEnCursoBD $gestor_facturacion->obtener_facturas_en_curso($host);
$arrFacturasEnCursoAgregar array_diff($arrFacturasEnCursoBD,$arrFacturasEnCursoJS);
comprimir_arreglo(&$arrFacturasEnCursoAgregar);
foreach ($arrFacturasEnCursoAgregar as $factura_impresion_id){
if(($arrFactura $gestor_facturacion->obtener_datos_factura($factura_impresion_id))){
$respuesta->addScriptCall('agregar_factura',$arrFactura);
}
else{
$respuesta->addAlert('Se produjo un error al recuperar una factura');
}
}
return $respuesta;
}

function pausar_factura($factura_impresion_id){
$respuesta = new xajaxResponse();
$gestor_facturacion Gestor_Facturacion::getInstancia();
/* @var $gestor_facturacion Gestor_Facturacion */
if($gestor_facturacion->pausar_factura($factura_impresion_id)){
$respuesta->addScriptCall('actualizar_facturas');
}
else{
$respuesta->addAlert('No se puede pausar la factura');
$respuesta->addScriptCall('actualizar_facturas');
}
return $respuesta;
}

function eliminar_factura($factura_impresion_id){
$respuesta = new xajaxResponse();
$gestor_facturacion Gestor_Facturacion::getInstancia();
/* @var $gestor_facturacion Gestor_Facturacion */
if($gestor_facturacion->eliminar_factura_impresion($factura_impresion_id)){
$respuesta->addScriptCall('actualizar_facturas');
}
else{
$respuesta->addAlert('No se puede eliminar la factura');
$respuesta->addScriptCall('actualizar_facturas');
}
return $respuesta;
}

function reanudar_factura($factura_impresion_id){
$respuesta = new xajaxResponse();
$gestor_facturacion Gestor_Facturacion::getInstancia();
/* @var $gestor_facturacion Gestor_Facturacion */
if($gestor_facturacion->reanudar_factura($factura_impresion_id)){
$respuesta->addScriptCall('actualizar_facturas');
}
else{
$respuesta->addAlert('No se puede reanudar la factura');
$respuesta->addScriptCall('actualizar_facturas');
}
return $respuesta;
}

$xajax = new xajax();
//$xajax->debugOn();
$xajax->registerFunction('eliminar_facturas');
$xajax->registerFunction('agregar_facturas');
$xajax->registerFunction('pausar_factura');
$xajax->registerFunction('eliminar_factura');
$xajax->registerFunction('reanudar_factura');
$xajax->processRequests();

$width['acciones'] = '15%';
$width['razon_social'] = '40%';
$width['fecha'] = '15%';
$width['hora'] = '15%';
$width['total'] = '15%';

$width['descripcion'] = '55%';
$width['cantidad'] = '15%';
$width['precio_unitario'] = '15%';
$width['subtotal'] = '15%';
?>

<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="Zend Studio" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Panel de facturas</title>
<link href="inc/estilos.css" rel="stylesheet" type="text/css" />
<link href="inc/estilo_autocomplete.css" rel="stylesheet" type="text/css" />
<?php $xajax->printJavascript("inc/xajax"); ?>
<script type="text/javascript" src="inc/scriptaculous/prototype.js"></script>
<script type="text/javascript" src="inc/scriptaculous/scriptaculous.js"></script>
<script language="JavaScript" type="text/javascript">
window.onload=inicializar;
var arrFacturasPausadasIds;
var arrFacturasEnCursoIds;

var Factura = Class.create();
Factura.prototype={
initialize: function(arrFactura){
this.factura_impresion_id = arrFactura.id_factura_impresion;
this.factura_id = arrFactura.id_factura;
this.pausada = arrFactura.pausada;
this.fecha = arrFactura.fecha;
this.hora = arrFactura.hora;
this.descuento = arrFactura.monto;
this.razon_social = arrFactura.nombre;
this.detalles = new Array();
this.total = arrFactura.total;
for (var i = 0 ; i < arrFactura.detalles.length ; i++){
this.detalles.push(arrFactura.detalles[i]);
}
},
pausar: function(){
xajax_pausar_factura(this.factura_impresion_id);
},
reanudar: function(){
xajax_reanudar_factura(this.factura_impresion_id);
},
eliminar: function(){
if(confirm("¿Esta seguro que desea eliminar la factura?\n(Esta acción es irreversible)")){
xajax_eliminar_factura(this.factura_impresion_id);
}
},
expandir: function(boton,objFactura){
boton.onclick = function(){objFactura.contraer(boton,objFactura)};
Effect.SlideDown('divDetalles_' + this.factura_impresion_id,{afterFinish:function(){
boton.src = 'images/fold.gif';
}});
},
contraer: function(boton,objFactura){
boton.onclick = function(){objFactura.expandir(boton,objFactura)};
Effect.SlideUp('divDetalles_' + this.factura_impresion_id,{afterFinish:function(){
boton.src = 'images/unfold.gif';
}});
}
}

function reset(){
var i;
arrFacturasPausadasIds = new Array();
arrFacturasEnCursoIds = new Array();
for(i = 0 ; i < $('divFacturasEnCurso').childNodes.length ; i++){
if($('divFacturasEnCurso').childNodes[i].tagName== "DIV"){
$('divFacturasEnCurso').childNodes[i].parentNode.removeChild($('divFacturasEnCurso').childNodes[i]);
i--;
}
}
for(i = 0 ; i < $('divFacturasPausadas').childNodes.length ; i++){
if($('divFacturasPausadas').childNodes[i].tagName== "DIV"){
$('divFacturasPausadas').childNodes[i].parentNode.removeChild($('divFacturasPausadas').childNodes[i]);
i--;
}
}
obtener_facturas();
}

function inicializar(){
arrFacturasPausadasIds = new Array();
arrFacturasEnCursoIds = new Array();
obtener_facturas();
new PeriodicalExecuter(function(){ actualizar_facturas();},10);
}

function agregar_factura(arrFactura){
var objFactura = new Factura(arrFactura);
var div = "";
var id = arrFactura.id_factura_impresion;
var boton;
if($('divFactura_' + id)){
return false;
}
div += '<div id="divFactura_' + id + '" style="display:none" width="100%">';
div += '<table width="100%" class="texto_comun">';
div += '<tr>';
div += '<td width="<?=$width['acciones']?>" id="tdBotonera_' + id + '"></td>';
div += '<td width="<?=$width['razon_social']?>"><img src="images/unfold.gif" class="boton" id="btnPlus_' + id + '">&nbsp;' + objFactura.razon_social + '</td>';
div += '<td width="<?=$width['fecha']?>">' + objFactura.fecha + '</td>';
div += '<td width="<?=$width['hora']?>">' + objFactura.hora + '</td>';
div += '<td width="<?=$width['total']?>">$ ' + objFactura.total + '</td>';
div += '</tr>';
if (objFactura.detalles.length > 0){
div += '<tr><td></td><td colspan="4">';
div += '<div id="divDetalles_' + id + '" style="display:none;border:solid;border-width:thin" width="100%"><table width="100%" class="texto_comun">';
div += '<tr>';
div += '<td width="<?=$width['descripcion']?>"><b>Descripci&oacute;n</b></td>';
div += '<td width="<?=$width['cantidad']?>"><b>Cantidad</b></td>';
div += '<td width="<?=$width['precio_unitario']?>"><b>Precio unitario</b></td>';
div += '<td width="<?=$width['subtotal']?>"><b>Total</b></td>';
div += '</tr>';
for(var i = 0; i < objFactura.detalles.length; i++){
div += '<tr>';
div += '<td>' + objFactura.detalles[i].descripcion + '</td>';
div += '<td>' + objFactura.detalles[i].cantidad + '</td>';
div += '<td>$ ' + objFactura.detalles[i].precio_unitario + '</td>';
div += '<td>$ ' + objFactura.detalles[i].total + '</td>';
div += '</tr>';
}
if(!(objFactura.descuento == '0,00')){
div += '<tr>';
div += '<td>Descuento</td>';
div += '<td>&nbsp</td>';
div += '<td>&nbsp</td>';
div += '<td>$ ' + objFactura.descuento + '</td>';
div += '</tr>';
}
div += '</table></div></td></tr>';
}
div += '</table>';
div += '</div>';
if (objFactura.pausada == 1){
arrFacturasPausadasIds.push(id);
new Insertion.Bottom('divFacturasPausadas',div);
boton = Builder.node('img', {id: 'btnDelete_' + id, src: 'images/trash.png', className: 'boton',  width: '30', height: '30'});
boton.onclick = function(){objFactura.eliminar()};
$('tdBotonera_' + id).appendChild(boton);
boton = Builder.node('img', {id: 'btnPlay_' + id, src: 'images/play.png', className: 'boton', width: '30', height: '30'});
boton.onclick = function(){objFactura.reanudar()};
$('tdBotonera_' + id).appendChild(boton);
boton = $('btnPlus_' + id);
boton.onclick = function(){objFactura.expandir(boton,objFactura)};
$('divFactura_' + id).className = 'factura_pausada';
}
else{
arrFacturasEnCursoIds.push(id);
new Insertion.Bottom('divFacturasEnCurso',div);
boton = Builder.node('img', {id: 'btnDelete_' + id, src: 'images/trash.png', className: 'boton',  width: '30', height: '30'});
boton.onclick = function(){objFactura.eliminar()};
$('tdBotonera_' + id).appendChild(boton);
boton = Builder.node('img', {id: 'btnPause_' + id, src: 'images/pause.png', className: 'boton', width: '30', height: '30'});
boton.onclick = function(){objFactura.pausar()};
$('tdBotonera_' + id).appendChild(boton);
boton = $('btnPlus_' + id);
boton.onclick = function(){objFactura.expandir(boton,objFactura)};
$('divFactura_' + id).className = 'factura_en_curso';
}
Effect.SlideDown('divFactura_' + id);
}

function eliminar_facturas_pausadas(arrFacturasEliminarIds){
for(var i = 0; i < arrFacturasEliminarIds.length; i++){
$('divFactura_' + arrFacturasEliminarIds[i]).parentNode.removeChild($('divFactura_' + arrFacturasEliminarIds[i]));
arrFacturasPausadasIds.splice(arrFacturasPausadasIds.indexOf(arrFacturasEliminarIds[i]),1);
}
}

function eliminar_facturas_en_curso(arrFacturasEliminarIds){
for(var i = 0; i < arrFacturasEliminarIds.length; i++){
$('divFactura_' + arrFacturasEliminarIds[i]).parentNode.removeChild($('divFactura_' + arrFacturasEliminarIds[i]));
arrFacturasEnCursoIds.splice(arrFacturasEnCursoIds.indexOf(arrFacturasEliminarIds[i]),1);
}
}

function obtener_facturas(){
xajax_agregar_facturas(arrFacturasPausadasIds,arrFacturasEnCursoIds);
}

function actualizar_facturas(){
xajax_eliminar_facturas(arrFacturasPausadasIds,arrFacturasEnCursoIds);
}

</script>
</head>
<body>
<table width="80%">
<tr bgcolor="#FFCC00" class="titulo_medio">
<td>Facturas en curso</td>
</tr>
<tr>
<td><div id="divFacturasEnCurso">
<table width="100%" class="titulochico" cellspacing="0"><tr bgcolor="#EEEEEE">
<td width="<?=$width['acciones']?>">Acciones</td>
<td width="<?=$width['razon_social']?>">Razón Social</td>
<td width="<?=$width['fecha']?>">Fecha</td>
<td width="<?=$width['hora']?>">Hora</td>
<td width="<?=$width['total']?>">Total</td>
</tr></table>
</div></td>
</tr>
</table>
<br>
<table width="80%">
<tr bgcolor="#FFCC00" class="titulo_medio">
<td>Facturas pausadas</td>
</tr>
<tr>
<td><div id="divFacturasPausadas">
<table width="100%" class="titulochico" cellspacing="0"><tr bgcolor="#EEEEEE">
<td width="<?=$width['acciones']?>">Acciones</td>
<td width="<?=$width['razon_social']?>">Razón Social</td>
<td width="<?=$width['fecha']?>">Fecha</td>
<td width="<?=$width['hora']?>">Hora</td>
<td width="<?=$width['total']?>">Total</td>
</tr></table>
</div></td>
</tr>
</table>
<br>
<div align="center" style="width:80%"><input type="button" value="Recargar" onclick="reset()" class="texto_comun"><div></div>
</body>
</html>
Título: php Fatal error: Call-time pass-by-reference has been removed
Publicado por: Alex Rodríguez en 23 de Octubre 2014, 11:50
Hola, en primer lugar por favor cuando escribas mensajes en el foro sigue las indicaciones que se dan aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Es importante seguirlas para que las consultas puedan ser respondidas.

Sobre el error que estás obteniendo, parece que se debe a la llamada de función con esta sintaxis:

comprimir_arreglo(&$arrFacturasPausadasBorrar);

De acuerdo con la documentación oficial de php, no existe ningún signo de referencia en una llamada a una función - sólo en la definición de la función. Las definiciones de funciones por sí solas son suficientes para pasar correctamente el argumento por referencia. A partir de PHP 5.3.0, se obtendrá una advertencia diciendo que "call-time pass-by-reference" (pasar por referencia en tiempo de llamada) está obsoleto cuando se use & en foo(&$a);. A partir de PHP 5.4.0, el paso por referencia en tiempo de llamada ha sido eliminado, por lo que su uso emitirá un error fatal.

Si necesitas que el argumento sea pasado por referencia tienes que definir la función como function comprimir_arreglo(&$array){ ... }

donde el símbolo & indica que el argumento se pasará por referencia.

La llamada a la función será simplemente comprimir_arreglo($arrFacturasPausadasBorrar);

En caso de que quieras que el argumento se pase por valor debes definir la función como function comprimir_arreglo($array){ ... } y hacer la llamada como comprimir_arreglo($arrFacturasPausadasBorrar);


Título: Re:php Fatal error: Call-time pass-by-reference has been removed
Publicado por: gersofts en 23 de Octubre 2014, 17:48
Gracias lo corregi cambiando  : comprimir_arreglo(&$arrFacturasPausadasBorrar); por

comprimir_arreglo($arrFacturasPausadasBorrar);