Foros del Web » Programando para Internet » PHP »

Ayuda con variables globales!!!

Estas en el tema de Ayuda con variables globales!!! en el foro de PHP en Foros del Web. Buenas. Tengo un problema con variables globales. Nunca las había usado en php a nivel global y ahora ando un poco liado. Intento asignarle un ...
  #1 (permalink)  
Antiguo 09/03/2009, 11:22
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 6
Ayuda con variables globales!!!

Buenas. Tengo un problema con variables globales. Nunca las había usado en php a nivel global y ahora ando un poco liado.
Intento asignarle un valor en una función y en otra diferente usar ese valor para introducirlo en una tabla de una base de datos mysql.

Consigo asignarle el valor en la primera función, porque la imprimo por pantalla y lo hace bien, pero no encuentro la manera de pasarla a la segunda función.

Este trozo de código corresponde a la primera función:
global $npedido;//aqui le dices php que busque la variable globlal $npedido
$npedido=mysql_insert_id();//aqui modifico el valor global de la variable

Lo que hago es asignarle un valor AUTO_INCREMENTED.

Ahora quiero introducir ese valor contenido en $npedido dentro de la tabla referencias con la siguiente sentencia sql, perteneciente a la segunda función:
@mysql_query("INSERT INTO referencias (npedido,referencia,cantidad,descripcion,epedido,t pedido) VALUES ('$npedido','$referencia','$cantidad','$descripcio n','$epedido','$tpedido')");
  #2 (permalink)  
Antiguo 09/03/2009, 11:32
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Ayuda con variables globales!!!

Solo declarala global dentro de la funcion antes de leer o modificar su valor

Código php:
Ver original
  1. $mi_variable = 0;
  2.  
  3. function mi_funcion() {
  4.     global $mi_variable;
  5.     // Aqui el codigo de tu funcion
  6. }

Edito: Asegurate de que la variable exista en un ambito global para que realmente tenga efecto.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 09/03/2009, 11:40
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 6
Mensaje Respuesta: Ayuda con variables globales!!!

Gracias por responder pero no me aclaras nada con lo que me dices. Te escribo el trozo de código donde tengo problemas a ver si me puedes ayudar mejor.
################################################## #
function insertar_pedido($nor,$nmec,$nrec,$nconcesion){
//Declaramos las variables

//Conectamos a mysql. Si falla muestra mensaje

//Seleccionamos la base de datos. Si falla muestra mensaje

//Ejecuta la sentencia sql de insercion

global $npedido;//aqui le dices php que busque la variable globlar $npedido
$npedido=mysql_insert_id();//aqui modifico el valor global de la variable
}
################################################## #
function insertar_referencia($npedido,$referencia,$cantidad ,$descripcion,$epedido,$tpedido){
//Declaramos las variables

//Conectamos a mysql. Si falla muestra mensaje

//Seleccionamos la base de datos. Si falla muestra mensaje

//Ejecuta la sentencia sql de insercion
@mysql_query("INSERT INTO referencias (npedido,referencia,cantidad,descripcion,epedido,t pedido) VALUES ('$npedido','$referencia','$cantidad','$descripcio n','$epedido','$tpedido')");
if (mysql_error($conexion)==""){
echo "<div>Referencia registrada.Ahora puedes insertar otra referencia.</div>\n";
}
else {
echo "<div>Ha habido un error en la introducción de datos, por favor, contacta con el departamento de Informatica.</div>\n";
}
}
################################################## #
...
$npedido='';
...
if (isset($_REQUEST['registrar'])){
insertar_pedido($nor,$nmec,$nrec,$nconcesion);
}
...
if (isset($_REQUEST['enviar'])){
insertar_referencia($npedido,$referencia,$cantidad ,$descripcion,$epedido,$tpedido);
}
  #4 (permalink)  
Antiguo 09/03/2009, 11:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Ayuda con variables globales!!!

Creo que el problema es que registras el pedido desde un formulario y la referencia desde otro, si es asi, al hacer click en "Enviar" se inicia nuevamente el proceso de PHP, por lo que tu variable $npedido no puede tomar el valor desde la funcion insertar_pedido(), ya que no entrara en ella.

Entonces debes crear un campo hidden en tu formulario donde almacenes el numero de pedido.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 09/03/2009, 11:51
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 6
Registro desde un mismo formulario todo. Con lo que me dices me has abierto la mente. Creo que ese es el problema, que se inicializa el proceso, por lo que debería pasar por parámetro a la misma dirección la variable $npedido.

El formulario consiste en rellenar los campos del pedido y registrarlo. Entonces sobre el mismo formulario rellenar los campos de referencia y enviarlos junto con el número de pedido ($npedido).

Pruebo y te digo algo.


No hay manera.... Seguiré investigando.
Pero ya tengo claro que el problema es que no llega la variable $npedido a la segunda función.

Última edición por GatorV; 09/03/2009 a las 12:24
  #6 (permalink)  
Antiguo 09/03/2009, 12:26
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Ayuda con variables globales!!!

Muestra tu codigo completo para poder encontrar la solucion.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 09/03/2009, 12:29
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 6
Respuesta: Ayuda con variables globales!!!

tengo que salir del trabajo. mañana lo cuelgo, muchas gracias por tu atención y ayuda.
  #8 (permalink)  
Antiguo 09/03/2009, 12:30
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 19 años, 5 meses
Puntos: 88
Respuesta: Ayuda con variables globales!!!

creo que puedes usar sessiones o cockies para almacenar temporalmente el numero de pedido, y así hacer lo que deseas.

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #9 (permalink)  
Antiguo 09/03/2009, 13:43
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 6
Respuesta: Ayuda con variables globales!!!

Muchas gracias eits mañana investigaré el uso de las cockies porque de momento no se usarlas.
  #10 (permalink)  
Antiguo 10/03/2009, 01:53
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 6
Respuesta: Ayuda con variables globales!!!

<?php
session_start();
$_GET['usuario'];
################################################## ################################################## ########################################
function insertar_pedido($nor,$nmec,$nrec,$nconcesion){
//Declaramos las variables

//Conectamos a mysql. Si falla muestra mensaje
$conexion=mysql_connect($host,$usr,$pass)
or die("No se pudo conectar, por favor, contacta con el departamento de Informatica." );

//Seleccionamos la base de datos. Si falla muestra mensaje
mysql_select_db($db,$conexion)
or die("No se pudo seleccionar la Base de Datos, por favor, contacta con el departamento de Informatica.");

//Ejecuta la sentencia sql de insercion
@mysql_query("INSERT INTO pedido (nor,nmec,nrec,nconcesion) VALUES ('$nor','$nmec','$nrec','$nconcesion')");
global $npedido;//aqui le dices php que busque la variable globlar $npedido
$npedido=mysql_insert_id();//aqui modifico el valor global de la variable

if (mysql_error($conexion)==""){
echo "<div>Pedido $npedido registrado.</div>";
}
else {
echo "<div>Ha habido un error en la introducción de datos, por favor, contacta con el departamento de Informatica.</div>";
}
}
################################################## ################################################## ########################################
function insertar_referencia($npedido,$referencia,$cantidad ,$descripcion,$epedido,$tpedido){
//Declaramos las variables

//Conectamos a mysql. Si falla muestra mensaje
$conexion=mysql_connect($host,$usr,$pass)
or die("No se pudo conectar, por favor, contacta con el departamento de Informatica." );

//Seleccionamos la base de datos. Si falla muestra mensaje
mysql_select_db($db,$conexion)
or die("No se pudo seleccionar la Base de Datos, por favor, contacta con el departamento de Informatica.");
//Ejecuta la sentencia sql de insercion
@mysql_query("INSERT INTO referencias (npedido,referencia,cantidad,descripcion,epedido,t pedido) VALUES ('$npedido','$referencia','$cantidad','$descripcio n','$epedido','$tpedido')");
if (mysql_error($conexion)==""){
echo "<div>Pedido $npedido registrado.</div>";//Esta es para ayudar y ver que pedido tenemos en memoria.
echo "<div>Referencia registrada.Ahora puedes insertar otra referencia.</div>\n";
}
else {
echo "<div>Pedido $npedido registrado.</div>";
echo "<div>Ha habido un error en la introducción de datos, por favor, contacta con el departamento de Informatica.</div>\n";
}
}
################################################## ################################################## ########################################
function desple_nor($nor){
//Función
}
################################################## ################################################## ########################################
function desple_nmec($nmec){
//Función
}
################################################## ################################################## ########################################
function desple_nrec($nrec){
//Función
}
################################################## ################################################## ########################################
function desple_nconcesion($nconcesion){
//Función
}
################################################## ################################################## ########################################
?>
<?php
echo "<html>\n";

echo "<head>\n";
echo "<title>Recambios -> Pedidos -> Insertar</title>\n";
echo "<link rel='stylesheet' type='text/css' href='recambios.css' />\n";
echo "<meta http-equiv='Content-Type' content='text/xhtml+xml; " .
"charset=utf-8' />\n";
echo "</head>\n\n";

echo "<body>\n";

$npedido=0;
$nor=$_REQUEST['nor'];
$nmec=$_REQUEST['nmec'];
$nrec=$_REQUEST['nrec'];
$nconcesion=$_REQUEST['nconcesion'];
$referencia=$_REQUEST['referencia'];
$cantidad=$_REQUEST['cantidad'];
$descripcion=$_REQUEST['descripcion'];
$epedido=$_REQUEST['epedido'];
$tpedido=$_REQUEST['tpedido'];

echo "<form action='' method='post'>\n";
echo "<table align='center'>\n";
echo "<tr>\n";
echo "<td colspan='2'>REGISTRAR PEDIDO</td>\n";
echo "<td colspan='2' rowspan='9'>\n";
echo "<div>1) Registre un pedido:</div>\n";
echo "<div><br /></div>\n";
echo "<div><input type='submit' name='registrar' value='Registrar' /></div>\n";
echo "<div>";
if (isset($_REQUEST['registrar'])){
insertar_pedido($nor,$nmec,$nrec,$nconcesion);
}
echo "</div>\n";
echo "<div><br /></div>\n";
echo "<div>2) Enviar una referencia:</div>\n";
echo "<div><br /></div>\n";
echo "<div><input type='submit' name='enviar' value='Enviar' /></div>\n";
if (isset($_REQUEST['enviar'])){
insertar_referencia($npedido,$referencia,$cantidad ,$descripcion,$epedido,$tpedido);
}
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>OR</td>\n";
echo "<td>";
desple_nor($nor);
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>N.mec&aacutenico:</td>\n";
echo "<td>";
desple_nmec($nmec);
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>N.recambista:</td>\n";
echo "<td>";
desple_nrec($nrec);
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>N.concesi&oacuten:</td>\n";
echo "<td>";
desple_nconcesion($nconcesion);
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td colspan='2'>REGISTRAR REFERENCIA</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>Referencia:</td>\n";
echo "<td><input type='text' name='referencia' value='$referencia' size='20' maxlength='10' /></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>Cantidad:</td>\n";
echo "<td><input type='text' name='cantidad' value='$cantidad' size='20' maxlength='11' /></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>Descripci&oacuten:</td>\n";
echo "<td><input type='text' name='descripcion' value='$descripcion' size='20' maxlength='100' /></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>E.pedido:</td>\n";
echo "<td><select name='epedido' value='$epedido'>".
"<option selected='selected'>Pedido</selected>".
"</select></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>T.pedido:</td>\n";
echo "<td><select name='tpedido' value='$tpedido'>".
"<option selected='selected'>Normal</option>".
"<option>Urgente</option>".
"</select></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</form>\n";

echo "</td>\n";
echo "</tr>\n";

echo "</body>\n";

echo "</html>\n";
?>
  #11 (permalink)  
Antiguo 10/03/2009, 02:04
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 6
Respuesta: Ayuda con variables globales!!!

Buenos días! Ya lo he conseguido. Mediante coockies. He añadido:
1) A la primera función: setcookie(npedido,mysql_insert_id());
2) Al código html: $npedido=$_COOKIE['npedido'];
Y así ya puedo insertar $npedido en la segunda función.
Muchas gracias a ambos!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:11.