PDA

Ver la Versión Completa : Que estoy Haciendo mal


jostrix
01-11-2004, 01:30:49
La bronca de este codigo es q a segun me registra mis variables en mi BD, pero al consultar esta me dice q las tablas q utilizo (SOCIOS, Titulares:Adicionale) estan vacias alguien me puede ayudar, ya le busq y namas no le encuentro...

<HTML>

<?php
session_start();

function EANCorrecto($Numero){
$sum=0;
$digito=0;
$N= strlen($Numero);
for($i=1;$i<=$N;$i++){
if (($i % 2)==0) {
if ($N==12) { $sum=$sum+$Numero[$i-1]*3;}
else { $sum=$sum+$Numero[$i-1];}
}
else {
if ($N==12) { $sum=$sum+$Numero[$i-1];}
else { $sum=$sum+$Numero[$i-1]*3;}
}
}
if ($sum>99) {
$extra=($sum % 100);
$digito=10-($extra % 10);
}
else {$digito=10-($sum % 10);}
if ($digito==10) {$digito=0;}
$Numero= $Numero . $digito;
return $Numero;
}

?>
<body>
<?

mysql_connect("localhost",$_SESSION['Usuario'],$_SESSION['Password']);
$ValorId=mysql_db_query("VIDEODROMO","Select Last_Insert_ID() from socios");

// Obtengo el valor del Ultimo no_de Socio, y lo complemento a 6 digitos si es Necesario

if ($ValorId=="") {$ValorId="000001";}
else {
$NuevoReg= $ValorId + 1;
$tam=strlen($NuevoReg);
$nuevovalor="";
$ValorId="000000";
for($i=0;$i<=5-$tam;$i++){
$nuevovalor=$nuevovalor . $ValorId[$i];
}
$ValorId= $nuevovalor . $NuevoReg;
}

// Agrego un digito predifinido indicando el tipo de tabla y llamo a la funcion EAN para determinar el digito de Verificacion y tener mi EAN8
$idSocio=EANCOrrecto("3".$ValorId);

//Procedo a Insertar los datos a mis respectivas tablas. MI EAN8 y los DATOS RECIBIDOS DE UN FORMULARIO

$sSQL="Insert into socios(id_Socio,No_Socio,calle,No_Int,No_Ext,Colonia,DelegMunicipio,Estado,Identificacion)";
$sSQL= $sSQL. "Values('$idSocio',NULL,".$_POST['Calle'].",".$_POST['No_Int'].",".$_POST['No_Ext'].",".$_POST['Colonia'].",".$_POST['DelegMunicipio'].",".$_POST['Estado'].",".$_POST['Identificacion'].")";
mysql_db_query("VIDEODROMO",$sSQL);
$sSQL="Insert into Titulares_Adicionales(id_Titular_Adicional,Id_Socio,Ap_Paterno,Ap_Materno,Nombre,Telefono_1,Telefono _2,Email,Fecha_Nacimiento,Status,Quien)";
$sSQL= $sSQL . " Values(NULL,'$idSocio',".$_POST['Ap_Paterno'].",".$_POST['Ap_Materno'].",".$_POST['Nombre'].",".$_POST['Telefono1'].",".$_POST['Telefono2'].",".$_POST['Email'].",".$_POST['Fecha'].",1,1)";
mysql_db_query("VIDEODROMO",$sSQL);
?>
</body>
</HTML>

roman
01-11-2004, 02:29:16
La primera cosa es pedirte que formatees bien el código porque es muy difícil leerlo así- usa las etiquetas php.

En lo que he visto de tu código hay por lo menos dos puntos que no están bien.

El primero es que last_insert_id() siempre te va a devolver 0. Esta función no te devuelve el próximo valor del campo auto incremental, te devuelve el último valor autoincremental que el servidor haya asignado en una operación INSERT, que no es lo mismo. Y este valor depende de la conexión- si dos clientes realizan inserciones simultáneas a una tabla o distintas tablas que tengan campos auto incrementales, cada cliente tendrá un número distinto según la inserción que hayan hecho. Por ello, cuando recién te has conectado, como es tu caso, last_insert_id() te devuelve 0 pues en esa conexión no has realizado ninguna inserción.

Por otra parte, aun cuando una consulta como last_insert_id() devuelva un sólo valor, esto no significa que puedes recoger este valor directamente del resultado de mysql_db_query. En consultas que devuelven registros, mysql_db_query siempre regresa una referencia al conjunto de registros, los cuales debes recorrer usando mysql_fetch_row o similar. En este caso debiera ser:


$rs = mysql_db_query('VIDEODROMO', 'select last_insert_id()');
$row = mysql_fetch_row($rs);
$valorId = $row[0];


Por último, para obtener lo que quieres puedes usar la consulta:


show table status like "socios"


que te devolverá un registro con información de la tabla socios. Una columna de este registro es el campo que buscas:


$rs = mysql_db_query('VIDEODROMO', 'show table status like "socios"');
$row = mysql_fetch_array($rs);
$valorId = $row['Auto_increment'];


// Saludos