Advertencia: extract() espera parámetro 1 a ser matriz

  • cerio
  • Proficient
  • Proficient
  • Avatar de Usuario
  • Registrado: Feb 07, 2004
  • Mensajes: 263
  • Loc: UK
  • Status: Offline

Nota Septiembre 21st, 2011, 3:55 pm

IM no sé si esto está relacionado con el cambio de webhosts a PHP 5.3 demasiado pero hay una sola otra área de repente está causando un problema, aunque estaba bien durante 4 años hasta hace poco y no hacer con formato de fecha esta vez. Esto es...


El mensaje de error es...
Advertencia: extract() espera parámetro 1 a ser matriz booleana dada.../httpdocs/admin/product/modify.php on line 20

Notice: Undefined variable: cat_id en.../httpdocs/admin/product/modify.php en línea 52

y el código parece referirse en el archivo modify.php....

Código: [ Select ]
<?php
if (!defined('WEB_ROOT')) {
    exit;
}

// make sure a product id exists
if (isset($_GET['productId']) && $_GET['productId'] > 0) {
    $productId = $_GET['productId'];
} else {
    // redirect to index.php if product id is not present
    header('Location: index.php');
}

// get product info
$sql = "SELECT *
    FROM tbl_product pd, tbl_category cat
        WHERE pd.pd_id = $productId AND pd.cat_id = cat.cat_id";
$result = mysql_query($sql) or die('Cannot get product. ' . mysql_error());
$row  = mysql_fetch_assoc($result);
extract($row);

// get category list
$sql = "SELECT cat_id, cat_parent_id, cat_name
    FROM tbl_category
        ORDER BY cat_id";
$result = dbQuery($sql) or die('Cannot get Product. ' . mysql_error());

$categories = array();
while($row = dbFetchArray($result)) {
    list($id, $parentId, $name) = $row;
    
    if ($parentId == 0) {
        $categories[$id] = array('name' => $name, 'children' => array());
    } else {
        $categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);    
    }
}    

//echo '<pre>'; print_r($categories); echo '</pre>'; exit;

// build combo box options
$list = '';
foreach ($categories as $key => $value) {
    $name   = $value['name'];
    $children = $value['children'];
    
    $list .= "<optgroup label=\"$name\">";
    
    foreach ($children as $child) {
        $list .= "<option value=\"{$child['id']}\"";
        
        if ($child['id'] == $cat_id) {
            $list .= " selected";
        }
        $list .= ">{$child['name']}</option>";
    }
    
    $list .= "</optgroup>";
}
?>
<form action="processProduct.php?action=modifyProduct&productId=<?php echo $productId; ?>" method="post" enctype="multipart/form-data" name="frmAddProduct" id="frmAddProduct">
<p align="center" class="formTitle">Modify Product</p>

<table width="100%" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
 <tr>
  <td width="150" class="label">Category</td>
  <td class="content"> <select name="cboCategory" id="cboCategory" class="box">
   <option value="" selected>-- Choose Category --</option>
<?php
    echo $list;
?>    
  1. <?php
  2. if (!defined('WEB_ROOT')) {
  3.     exit;
  4. }
  5. // make sure a product id exists
  6. if (isset($_GET['productId']) && $_GET['productId'] > 0) {
  7.     $productId = $_GET['productId'];
  8. } else {
  9.     // redirect to index.php if product id is not present
  10.     header('Location: index.php');
  11. }
  12. // get product info
  13. $sql = "SELECT *
  14.     FROM tbl_product pd, tbl_category cat
  15.         WHERE pd.pd_id = $productId AND pd.cat_id = cat.cat_id";
  16. $result = mysql_query($sql) or die('Cannot get product. ' . mysql_error());
  17. $row  = mysql_fetch_assoc($result);
  18. extract($row);
  19. // get category list
  20. $sql = "SELECT cat_id, cat_parent_id, cat_name
  21.     FROM tbl_category
  22.         ORDER BY cat_id";
  23. $result = dbQuery($sql) or die('Cannot get Product. ' . mysql_error());
  24. $categories = array();
  25. while($row = dbFetchArray($result)) {
  26.     list($id, $parentId, $name) = $row;
  27.     
  28.     if ($parentId == 0) {
  29.         $categories[$id] = array('name' => $name, 'children' => array());
  30.     } else {
  31.         $categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);    
  32.     }
  33. }    
  34. //echo '<pre>'; print_r($categories); echo '</pre>'; exit;
  35. // build combo box options
  36. $list = '';
  37. foreach ($categories as $key => $value) {
  38.     $name   = $value['name'];
  39.     $children = $value['children'];
  40.     
  41.     $list .= "<optgroup label=\"$name\">";
  42.     
  43.     foreach ($children as $child) {
  44.         $list .= "<option value=\"{$child['id']}\"";
  45.         
  46.         if ($child['id'] == $cat_id) {
  47.             $list .= " selected";
  48.         }
  49.         $list .= ">{$child['name']}</option>";
  50.     }
  51.     
  52.     $list .= "</optgroup>";
  53. }
  54. ?>
  55. <form action="processProduct.php?action=modifyProduct&productId=<?php echo $productId; ?>" method="post" enctype="multipart/form-data" name="frmAddProduct" id="frmAddProduct">
  56. <p align="center" class="formTitle">Modify Product</p>
  57. <table width="100%" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
  58.  <tr>
  59.   <td width="150" class="label">Category</td>
  60.   <td class="content"> <select name="cboCategory" id="cboCategory" class="box">
  61.    <option value="" selected>-- Choose Category --</option>
  62. <?php
  63.     echo $list;
  64. ?>    

Hay un poco más código en la página, pero he copiado forma pasado línea 52, esperanza lo que hará.

Una vez más, no sé nada acerca de arreglos de discos o variables, Im miedo.

El efecto de ese problema es que si abre el administrador de sitios, habiendo dejado conectado, utilizado para mostrar la última página admin era, mostrando una lista de categorías o elementos etc., ahora da esto...
Imagen

Todavía funciona, sólo tengo que elegir la sección en el menú, pero como digo, que no solía mostrar estos errores, muestra correctamente la última página en que estaba.

Si Ive cierre la sesión e inicie la sesión desde cero no tengo esa página revuelto ya que me lleva automáticamente a la página de inicio de administración cuando recién iniciado en su única cuando volver después de cerrar la página pero todavía conectado.

No es un problema enorme, su solo irritante y yo no sé por qué de repente cambió cuando estaba bien desde hace años y creo que no he cambiado nada en ese archivo en absoluto.

Atentamente,
Cerio
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Septiembre 21st, 2011, 3:55 pm

  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8211
  • Loc: USA
  • Status: Offline

Nota Septiembre 22nd, 2011, 9:49 pm

Poner lo siguiente:
PHP Código: [ Select ]
echo "<pre>";var_dump($result);var_dump($row);echo "</pre>";

en la línea 21 y publicar lo que muestra.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8211
  • Loc: USA
  • Status: Offline

Nota Septiembre 26th, 2011, 12:31 am

Como una nota al margen, la función extracto puede sobrescribir una variable como el $ cat_id por ejemplo
"Bring forth therefore fruits meet for repentance:" Matthew 3:8

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 208 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC