Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

IF EXISTS, ALERT, ELSE INSERT -- Como Hago??

Estas en el tema de IF EXISTS, ALERT, ELSE INSERT -- Como Hago?? en el foro de Mysql en Foros del Web. Hola. Soy nuevo en el foro y novato en esto de php y mysql. Ademas comento que para generar aplicaciones, me apoyo bastante en dreamweaver ...
  #1 (permalink)  
Antiguo 05/02/2011, 02:08
Avatar de nquerce  
Fecha de Ingreso: febrero-2011
Ubicación: Buenos Aires - Argentina
Mensajes: 5
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta IF EXISTS, ALERT, ELSE INSERT -- Como Hago??

Hola. Soy nuevo en el foro y novato en esto de php y mysql. Ademas comento que para generar aplicaciones, me apoyo bastante en dreamweaver ya que me cuesta mucho crear funciones desde cero, y con las que viene prediseñadas mas mucha lectura y un poco de "toqueteo" logro hacer que me sirvan para lo que necesito.

Ahora bien, me tope con algo que es tan complejo para mi que hasta me cuesta plantearmelo logicamnte para depsues abordarlo desde el codigo.

Les comento el escenario:

Tengo tres tablas:
Padron: un listado de empresas
Empleados: un listado de empleados de todas las empresas conun campo id_empresa que dierencia a que empresa pertenecen.
DDJJ: un listado igual al listado de empleados, pero con 2 campos mas (mes y año) donde guardo las declaraciones juradas de la nomina de empleados que cada empresa debe realizar mensualmente.

Y un select: que selecciona de la lista de empleados todos los que pertenecen a una empresa ne particular y que ademas estan marcados como activos. (los marco como activo o inactivo para no deletearlos de la base y no perder el registro) que me rellena una tabla dinamica que es una pagina.php con el maestro de los datos.

Para mejor ilustrar:

Tabla padron:
Código:
CREATE  TABLE  `proyecto`.`padron` (  `id_empresa` int( 6  )  NOT  NULL  auto_increment ,
 `cuit_prefijo` int( 2  )  NOT  NULL ,
 `cuit_dni` int( 8  )  NOT  NULL ,
 `cuit_subfijo` int( 1  )  NOT  NULL ,
 `ingbrutos` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `rsocial` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `calle_fiscal` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `nro_fiscal` varchar( 6  )  collate utf8_unicode_ci NOT  NULL ,
 `piso_fiscal` varchar( 2  )  collate utf8_unicode_ci NOT  NULL ,
 `dto_fiscal` varchar( 4  )  collate utf8_unicode_ci NOT  NULL ,
 `prov_fiscal` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `ciudad_fiscal` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `cp_fiscal` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `calle_laboral` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `nro_laboral` varchar( 6  )  collate utf8_unicode_ci NOT  NULL ,
 `piso_laboral` varchar( 2  )  collate utf8_unicode_ci NOT  NULL ,
 `dto_laboral` varchar( 4  )  collate utf8_unicode_ci NOT  NULL ,
 `prov_laboral` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `ciudad_laboral` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `cp_laboral` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `telef1` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `telef2` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `fax` varchar( 20  )  collate utf8_unicode_ci NOT  NULL ,
 `email1` varchar( 40  )  collate utf8_unicode_ci NOT  NULL ,
 `email2` varchar( 40  )  collate utf8_unicode_ci NOT  NULL ,
 `dia_fechaini` int( 2  )  NOT  NULL ,
 `mes_fechaini` int( 2  )  NOT  NULL ,
 `anio_fechaini` int( 4  )  NOT  NULL ,
 `nombre_contacto` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `apellido_contacto` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `tratamiento` varchar( 15  )  collate utf8_unicode_ci NOT  NULL ,
 `usuario` varchar( 16  )  collate utf8_unicode_ci NOT  NULL ,
 `password` varchar( 32  )  collate utf8_unicode_ci NOT  NULL ,
 `nivel` varchar( 16  )  collate utf8_unicode_ci NOT  NULL default  'empresa',
 PRIMARY  KEY (  `id_empresa`  )  ) ENGINE  =  MyISAM  DEFAULT CHARSET  = utf8 COLLATE  = utf8_unicode_ci;
Tabla empleados:
Código:
 CREATE  TABLE  `proyecto`.`empleados` (  `id_empl` int( 8  )  NOT  NULL  auto_increment ,
 `id_empresa` int( 6  )  NOT  NULL ,
 `cuit_prefijo` int( 2  )  NOT  NULL ,
 `cuit_dni` int( 8  )  NOT  NULL ,
 `cuit_subfijo` int( 1  )  NOT  NULL ,
 `cuil_prefijo` int( 2  )  NOT  NULL ,
 `cuil_dni` int( 8  )  NOT  NULL ,
 `cuil_subfijo` int( 1  )  NOT  NULL ,
 `nombre_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `apellido_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `diaalta_empl` int( 2  )  NOT  NULL ,
 `meslta_empl` int( 2  )  NOT  NULL ,
 `anioalta_empl` int( 4  )  NOT  NULL ,
 `convenio_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `categoria_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `sueldo_empl` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `sueldo_cent_empl` varchar( 2  )  collate utf8_unicode_ci NOT  NULL default  '00',
 `activo` varchar( 10  )  collate utf8_unicode_ci NOT  NULL default  'Inactivo',
 PRIMARY  KEY (  `id_empl`  )  ) ENGINE  =  MyISAM  DEFAULT CHARSET  = utf8 COLLATE  = utf8_unicode_ci;
Tabla ddjj:
Código:
CREATE  TABLE  `proyecto`.`ddjj` (  `id_ddjj` int( 10  )  NOT  NULL  auto_increment ,
 `id_empl` int( 8  )  NOT  NULL ,
 `id_empresa` int( 6  )  NOT  NULL ,
 `cuit_prefijo` int( 2  )  NOT  NULL ,
 `cuit_dni` int( 8  )  NOT  NULL ,
 `cuit_subfijo` int( 1  )  NOT  NULL ,
 `cuil_prefijo` int( 2  )  NOT  NULL ,
 `cuil_dni` int( 8  )  NOT  NULL ,
 `cuil_subfijo` int( 1  )  NOT  NULL ,
 `nombre_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `apellido_empl` varchar( 50  )  collate utf8_unicode_ci NOT  NULL ,
 `diaalta_empl` int( 2  )  NOT  NULL ,
 `meslta_empl` int( 2  )  NOT  NULL ,
 `anioalta_empl` int( 4  )  NOT  NULL ,
 `convenio_empl` varchar( 16  )  collate utf8_unicode_ci NOT  NULL ,
 `categoria_empl` varchar( 32  )  collate utf8_unicode_ci NOT  NULL ,
 `sueldo__empl` varchar( 8  )  collate utf8_unicode_ci NOT  NULL ,
 `mes_ddjj` varchar( 2  )  collate utf8_unicode_ci NOT  NULL ,
 `anio_ddjj` varchar( 4  )  collate utf8_unicode_ci NOT  NULL ,
 PRIMARY  KEY (  `id_ddjj`  )  ) ENGINE  =  MyISAM  DEFAULT CHARSET  = utf8 COLLATE  = utf8_unicode_ci;
El select:
Código:
SELECT *
FROM empleados
WHERE id_empresa = $_SESSION['MM_id_empresa'] AND activo='Activo'
La pagina maestro.php tiene una tabla dinamica que muestra el recordset y un form con 2 textinput (mes, año) y boton enviar.

Hasta aca llegue con la ayuda de dreamweaver y leyendo foros, faq's, y los manuales de MYSQL.

Pero estoy trabado en lo siguiente:

Necesito que cuando el usuario apriete el boton enviar del formulario el resultado del select de la tabla empleados (el mismo que me genera la tabla dinamica del maestro.php) se grabe a la tabla ddjj agregando mes y año ingresado en el form a cada registro.

Esto verificando previamente que esa empresa no haya realizado ya una daclaracion jurada para el mismo mes y mismo año, o sea pafra ese mismo periodo mensual.

Se me ocurren dos opciones:

1ra) IF EXISTS (hacer el mismo select agregando al WHERE año_ddjj=$_post['año_ddjj'] AND mes_ddjj=$_post['mes_ddjj'] pero desde la tabla ddjj)

SI VERDADERO emitir un alert indicando que ya se hizo la declaracion jurada por supuesto sin grabar nada en la tabla ddjj,

SI FALSO (hacer el INSERT INTO correspondiente, agregando los campos mes_ddjj y anio_ddjj a cada registro insertado).

2da) (hacer el mismo select agregando al WHERE año_ddjj=$_post['año_ddjj'] AND mes_ddjj=$_post['mes_ddjj'] pero desde la tabla ddjj) y

si el recuento de rows del resultado es =0, hacer el INSERT INTO correspodiente, agregando los campos mes_ddjj y anio_ddjj a cada registro insertado,

y si no mostrar el alert con el mensaje de error

(Esta opcion me parece que no recarga tanto al servidor donde corre la aplicacion).

Como el caso es muy puntual y muy particular, no encuentro en dreamweaver ninguna funcion prediseñada que pueda "toquetear" para poder hacer esto.

Ademas leyendo y googleando, lo mas cercano que encontre es "IF EXISTS UPDATE ELSE INSERT", pero yo no quiero updatear ni insertar nada si es que ya se hizo la DDJJ anteriormente.

Perdon por lo extenso, pero creo que cuando mas claro sea y mas datos aporte, tango mas probabilidades de obtener una buena respuesta.

Gracias de antemano.

Última edición por nquerce; 06/02/2011 a las 01:11 Razón: Ampliar info
  #2 (permalink)  
Antiguo 07/02/2011, 16:22
Avatar de nquerce  
Fecha de Ingreso: febrero-2011
Ubicación: Buenos Aires - Argentina
Mensajes: 5
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: IF EXISTS, ALERT, ELSE INSERT -- Como Hago??

Bueno gente, al final lo solucione de otra manera.

El formulario del php donde esta el recordset, solamente manda mes y año otro php que con esos datos mas el id del usuario que esta en una variabla de sesion, hace un select en la base ddjj, buscando registros que coincidan con mes y el año y el id empresa.

El php tiene dos regiones, una que se muestra si el recordset esta vacio y otro si tiene al menos un registro.

Si esta vacio,
Muestra la region donde tengo un form que en dos texto ocultos toma las variables mes y año que pase por GET.
Al enviar :
1)Genera una tabla temporal con registros desde la tabla empleados que sean de este id empresa y que el campo activo diga "activo",
2) Le agrega las columnas mes y año,
3) Le hace un Update set a esas columnas escribiendo mes y año desde las var GET,
4)hace un insert into ddjj from temporal,
5) finalmente un DROP a la tabla temporal.

cuando termina envia a un php con el mensaje de exito.

Si tiene al menos un registro
Muestra la segunda region donde simpleemente tengo un texto que dice que la empresa nro (var session ide_mpresa) ya tiene hecho una declaracion jurada para el mes (var get mes)y año (var get año).

No si es lo mas rapido, lo mas eficiente, o lo mejor, pero es lo que se me ocurrio y la solucion que pude encontrar con las herramientas que tengo.

Código:
<?php require_once('../../Connections/x.php'); ?>
<?php
// Aca va todo la parte de session que incluye el dreamweaver
?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
$currentPage = $_SERVER["PHP_SELF"];
$colname_ddjj = "-1";
if (isset($_SESSION['MM_id_empresa'])) {
  $colname_ddjj = $_SESSION['MM_id_empresa'];
}
$coolname_ddjj = "-1";
if (isset($_GET['mes'])) {
  $coolname_ddjj = $_GET['mes'];
}
$cooolname_ddjj = "-1";
if (isset($_GET['anio'])) {
  $cooolname_ddjj = $_GET['anio'];
}
mysql_select_db($database_bapro, $bapro);
$query_ddjj = sprintf("SELECT id_empresa FROM ddjj WHERE id_empresa = %s AND ddjj.mes_ddjj=%s  AND ddjj.anio_ddjj=%s", GetSQLValueString($colname_ddjj, "int"),GetSQLValueString($coolname_ddjj, "int"),GetSQLValueString($cooolname_ddjj, "int"));
$ddjj = mysql_query($query_ddjj, $bapro) or die(mysql_error());
$row_ddjj = mysql_fetch_assoc($ddjj);
$totalRows_ddjj = mysql_num_rows($ddjj);
// COMIENZA INSERT
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")){
$insertSQL1 = sprintf("CREATE TABLE ddjj_temp SELECT * FROM empleados WHERE `id_empresa` =1 AND `activo` = Activo");
  mysql_select_db($database_bapro, $bapro);
  $Result1 = mysql_query($insertSQL1, $bapro) or die(mysql_error());
 
$insertSQL2 = sprintf("ALTER TABLE `ddjj_temp` ADD `mes_ddjj` VARCHAR( 2 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , ADD `anio_ddjj` VARCHAR( 4 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL");
  mysql_select_db($database_bapro, $bapro);
  $Result2 = mysql_query($insertSQL2, $bapro) or die(mysql_error());
 
$insertSQL3 = sprintf("ALTER TABLE `ddjj_temp` ADD `id_ddjj` INT NOT NULL FIRST");
  mysql_select_db($database_bapro, $bapro);
  $Result3 = mysql_query($insertSQL3, $bapro) or die(mysql_error());
 
$insertSQL4 = sprintf("UPDATE ddjj_temp SET mes_ddjj =$mes_ddjj,anio_ddjj =$anio_ddjj WHERE `id_empresa` =1");
  mysql_select_db($database_bapro, $bapro);
  $Result4 = mysql_query($insertSQL4, $bapro) or die(mysql_error());
 
$insertSQL5 = sprintf("INSERT INTO ddjj SELECT * FROM ddjj_temp");
  mysql_select_db($database_bapro, $bapro);
  $Result5 = mysql_query($insertSQL5, $bapro) or die(mysql_error());
$insertSQL6 = sprintf("DROP TABLE `ddjj_temp`");
  mysql_select_db($database_bapro, $bapro);
  $Result6 = mysql_query($insertSQL6, $bapro) or die(mysql_error());
$insertGoTo = "ddjj_alta_ok";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
  header(sprintf("Location: %s", $insertGoTo));
}
// FIN INSERT
$queryString_ddjj = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_ddjj") == false && 
        stristr($param, "totalRows_ddjj") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_ddjj = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_ddjj = sprintf("&totalRows_ddjj=%d%s", $totalRows_ddjj, $queryString_ddjj);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[URL]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/URL]">
<html xmlns="[URL]http://www.w3.org/1999/xhtml[/URL]">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<link href="../css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<p><span class="tittabla">Union del Personal Panaderias y Afines</span><br />
  Sistema  De Gesti&oacute;n On Line </p>
<?php if ($totalRows_ddjj == 0) { // Show if recordset empty ?>
  <p><strong>IMPORTANTE: Las declaraciones juradas pueden relizarse s&oacute;lo una vez por cada per&iacute;odo. <br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adem&aacute;s no se permite modificar ni borrar una declaraci&oacute;n jurada despu&eacute;s de haberla realizado.</strong></p>
  <p align="center"><strong><span class="no">Por favor, revise y verifique los datos antes de realizar esta declaraci&oacute;n jurada!</span></strong></p>
  <form id="proc_ddjj" name="proc_ddjj" method="post" action="<?php echo $editFormAction; ?>">
    <label>
    <table width="100%" border="0" cellspacing="0" cellpadding="3">
      <tr>
        <td colspan="2" class="tablatop">Realizar una declaracion jurada para el per&iacute;odo:</td>
      </tr>
      <tr>
        <td width="200" align="right" class="tablabody">Mes</td>
        <td class="tablabody"><strong> <?php echo $mes; ?>
          <input name="mes_ddjj" type="hidden" id="mes_ddjj" value="<?php echo $mes; ?>" />
          </strong></td>
      </tr>
      <tr>
        <td width="200" align="right" class="tablabody">A&ntilde;o</td>
        <td class="tablabody"><strong> <?php echo $anio;?>
          <input name="anio_ddjj" type="hidden" id="anio_ddjj" value="<?php echo $anio;?>" />
          </strong></td>
      </tr>
      <tr>
        <td width="200" class="tablabody">&nbsp;</td>
        <td class="tablabody"><input type="submit" name="button" id="button" value="Realizar Declaraci&oacute;n Jurada" /></td>
      </tr>
    </table>
    <input type="hidden" name="MM_insert" value="form1" />
    </label>
  </form>
  <?php } // Show if recordset empty ?>
<?php if ($totalRows_ddjj > 0) { // Show if recordset not empty ?>
  <p><span class="no"><strong><img src="../images/no.gif" width="51" height="49" hspace="3" vspace="3" align="absmiddle" />Esta empresa ya ha realizado una declaraci&oacute;n jurada para el per&iacute;odo <?php echo $mes; ?> / <?php echo $anio;?> . </strong></span></p>
  <p><strong>IMPORTANTE: Las declaraciones juradas pueden relizarse s&oacute;lo una vez por cada per&iacute;odo. <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adem&aacute;s no se permite modificar ni borrar una declaraci&oacute;n jurada despu&eacute;s de haberla realizado.</strong></p>
  <?php } // Show if recordset not empty ?>
<p><a href="admin.php">Panel Admin</a> - <a href="javascript:history.go(-1);">Volver</a> - <a href="login.php">Cambiar Usuario</a> - <a href="<?php echo $logoutAction ?>">Desconectar</a></p>
</body>
</html>
<?php
mysql_free_result($ddjj);
?>
Que raro que cuando escribi esta solucion habian pasado mas de 100 visitas y ningun aporte....era realmente tan raro lo que queria hacer??

Gracias a todos!

Etiquetas: insert, alerta
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 13:04.