Foros del Web » Programando para Internet » PHP »

ayuda con ciclo for e if

Estas en el tema de ayuda con ciclo for e if en el foro de PHP en Foros del Web. hola Estoy haciendo una pagina la cual me permita ingresar noticias a una base de datos en DB2,los valores que envio desde un formulario los ...
  #1 (permalink)  
Antiguo 22/09/2005, 07:56
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
ayuda con ciclo for e if

hola
Estoy haciendo una pagina la cual me permita ingresar noticias a una base de datos en DB2,los valores que envio desde un formulario los recibo a traves del metodo post.Eso funciona bien,el ingreso y modificado tambien funciona sin problemas,estas 2 operaciones las realizo con el mismo boton del formulario.pero cuando intento ingresar mas de una noticia en la misma fecha no me resulta,porque en vez de ingresar una noticia nueva,me actualiza la que ya esta ingresada en esa fecha :? .

ahora me explicare mejor :P

mi clave principal es la fecha,dia,mes y año,cuando ingreso una noticia lo hace sin problemas,y si deseo modificar algun campo tambien lo hace bien,pero yo quiero que en un dia se pueda ingresar mas de una noticia asociada a la misma fecha,para lo cual necesitare un contador,para eso estoy ocupando un ciclo for,pero no me resulta y en vez de incrementarse e ingresar mas de una noticia con la misma fecha,se actualiza :? y no entra a mi ciclo for,el cual lo utilizo con un if y todo esto va dentro de un else.

mas abajo detallo mi codigo con comentarios y tambien para que se entienda cual es mi problema.

alguien me puede ayudar a solucionar mi problema,indicandome el error,o si tengo que modificar algo de mi codigo para que me resulte lo que quiero.

muchas gracias

pd:coloco el codigo dentro de las etiquetas code,porque la etiqueta php no me funciono :?

Código:
ejemplo de lo que quiero hacer

dia:22
mes:09
año:2005

noticia1:huracanes en usa
ahora si quiero ingresar otra noticia en la misma fecha,deberia incrementarse el ciclo for

y quedar :
noticia2:elecciones presidenciales en chile

noticia3:guerra en irak

y asi sucesivamente deberia incrementarse y agregar una nueva noticia asociada a la fecha del dia que en este caso es la clave primaria.
y la modificacion en alguna noticia ,solo deberia realizarse mientras esten todos los campos en la base de datos.

esa parte la explico mas abajo como comentario en mi codigo.

Código PHP:
<?

   
//ingresar   y  modificar

   
$accion $_POST['Ingreso'];
   if(
$accion=="grabar")
   {
   
$dia $_POST['dia'];
   
$mes $_POST['mes'];
   
$anno $_POST['anno'];//recibo los valores del formulario
   
$titulo $_POST['titulo'];
   
$resumen $_POST['resumen'];
   
$detalle $_POST['detalle'];



     include(
"conexion-noticia.php");

   
//realizo una consulta para comprobar que los campos existan en la BDD
  
$query ="SELECT f01datos.$databasename4.ntitulo as TITULO,
            f01datos.$databasename4.nresumen as RESUMEN,
            f01datos.$databasename4.ndetalle as DETALLE FROM f01datos.$databasename4
        WHERE f01datos.$databasename4.ndia=$dia and f01datos.$databasename4.nmes=$mes
            and f01datos.$databasename4.nano=$anno"
;


//me conecto y ejecuto la sentencia sql en la BDD
     
$result=odbc_Exec($dbconn,$query);
     
//recorro el resultado de la consulta
$row1 odbc_fetch_array($result);

//si row1 es diferente a 0 es porque los datos existen y puedo modificar
     
if($row1!=0){

             
$mod="UPDATE F01DATOS.$databasename4 SET
             ntitulo='$titulo',
             nresumen='$resumen',
             ndetalle='$detalle'
             WHERE nano=$anno and
             nmes=$mes and
             ndia=$dia"
;
             
$query=odbc_exec($dbconn,$mod);
             include(
"grabar-noticia.php");
                  }
                else
                {
                  
s//si row1 es igual a 0 es porque en la base de datos no se ha ingresado ninguna noticia para ese dia.

if($row1==0){

//la variable estado la utilizo como una bandera,y deberia estar en v,cada vez que se incremente el contador e ingrese un nuevo registro,aqui como no se ha ingresado nada,ingreso por defecto v. 

                
$estado='v';

//esta es la variable hora la cual llevara el registro ,para cada noticia del dia,con esto pretendo que cada noticia sea unica y este asociada a cierta hora,seria como una clave secundaria.tambien por defecto ingreso la hora del sistema pero sin incrementar nada aun.


//la variable hora y estado trabajan internamente ,asi que yo no las ingreso a taves del formulario.

                
$hora=date('h-i-s');

                  
$ing="INSERT INTO F01DATOS.$databasename4
                  values($anno,$mes,$dia,$hora,'$titulo','$resumen','$detalle','$estado')"
;


//el print lo ocupo para verificar que me ingrese bien la hora

                        
print "hora:".$hora;
                        
$query=odbc_exec($dbconn,$ing);
                        include(
"grabar-noticia.php");
                        
odbc_close($dbconn);
                        }
                       
   
//hasta aca funciona todo bien.                    

                   

//este else lo ocupo para utilizar mi tercera funcionalidad del boton,la cual deberia incrementar el contador e ingresar una nueva noticia asociada a una misma fecha

                      
else
                       {


//esta consulta la utilizo para comprobar que el dia,mes y año esten en la base de datos.

              
$query ="SELECT f01datos.$databasename4.ndia,
              f01datos.$databasename4.nmes,
              f01datos.$databasename4.nano FROM f01datos.$databasename4
          WHERE f01datos.$databasename4.ndia=$dia and f01datos.$databasename4.nmes=$mes
              and f01datos.$databasename4.nano=$anno"
;


//me conecto y ejecuto la consulta sql en la BDD

              
$result=odbc_Exec($dbconn,$query);

//recorro el resultado

              
$row2 odbc_fetch_array($result);

 
//este for lo quiero ocupar para que se incremente el contador y me permita ingresar mas de una noticia en la misma fecha
 
             
for($contador=0;$contador<20;$contador++)
              {

//si row2 es diferente a 0 es porque ya se encuentra esa fecha en la base de datos
                  
if($row2!=0)
                  {

//y le asigno v a estado
          
$estado='v';
          
// y a la variable hora le paso la hora del sistema con la funcion date.
          
$hora=date('h-i-s');

//y como la fecha ya esta ingresada,solo deberia ingresarme,la hora,titulo,resumen,detalle y estado de la nueva noticia que se ingresa en la misma fecha.

          
$ing="INSERT INTO F01DATOS.$databasename4
          values($hora,'$titulo','$resumen','$detalle','$estado')"
;

         
//nuevamente los print los utilizo para ver que las variables contengan los valores.

         
print "hora:".$hora;
          
$query=odbc_exec($dbconn,$ing);
          include(
"grabar-noticia.php");
          
odbc_close($dbconn);
          print 
"contador:".$contador;
          }}

       }
       }
       }

?>
ojala se entienda mi explicacion :(
  #2 (permalink)  
Antiguo 22/09/2005, 10:14
 
Fecha de Ingreso: agosto-2003
Mensajes: 272
Antigüedad: 20 años, 6 meses
Puntos: 0
hola

hola, proba esto, en ralidad no te expongo el codigo, pero primero obtene la noticia que ya estaba en la bd luego concatenas con el caracter . la noticia nuevo y recien despues de hacer esto haces la actualizacion.
Saludos
  #3 (permalink)  
Antiguo 22/09/2005, 10:30
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 10 meses
Puntos: 0
No lo he acabado de pensar, pero a primera vista, sería más sencillo si la clave principal fuese otra (idnoticia, por ejemplo, autoincrementable). De esta forma, la fecha sería un dato mas que recogerías en tus consultas, siempre con la idnoticia.

Para actualizar una noticia, la identificas con su idnoticia y listo. Para ver las noticias de un día, usas Where fecha = '$fecha' y todo lo puedes hacer así.

Piénsalo a ver si te parece bien.

Saludos.
  #4 (permalink)  
Antiguo 22/09/2005, 19:08
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
pero no puedo hacerlo de otra forma,porque donde trabajo me lo exigen como lo tengo hecho,pero el problema esta que no entra al ciclo for,como puedo solucionar eso para que comienze a incrementarse ,cada evz que ingrese una noticia con la misma fecha.

gracias
  #5 (permalink)  
Antiguo 23/09/2005, 00:53
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 10 meses
Puntos: 0
Cita:
Iniciado por jak
mi clave principal es la fecha,dia,mes y año
Para que alguien pueda ayudarte, deberías decir cómo está definida esta clave.

Saludos.
  #6 (permalink)  
Antiguo 23/09/2005, 06:21
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
Cita:
Iniciado por javifo
Para que alguien pueda ayudarte, deberías decir cómo está definida esta clave.

Saludos.
hola.
estoy trabajando sobre DB2 que es la base de datos,y los tres son campos claves año,mes y dia.

año:entero largo 4
mes:entero largo 2
dia:entero largo 2

y la hora es la clave secundaria
es un entero de largo 6


el campo hora lo utilizo para identificar que cada noticia sea unica y asociada a una misma fecha.y como explico mas arriba deberia incrementarse con mi ciclo for pero no resulta,porque no entra al ciclo,y solo modifica.

cual puede ser mi error o como deberia hacerlo para que me funcione?
muchas gracias


pd:por favor ayudenme porque tengo que tener terminado esto para el dia martes 27 de septiembre :(:(:(,y es lo unico que me falta para terminar la intranet que desarrolle.

ojala que eso sea lo que me pides sobre la definicion de la clave,si no es eso dime que otra cosa se necesita para que me puedan ayudar.
gracias
  #7 (permalink)  
Antiguo 23/09/2005, 07:39
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
A mi me parece que esto :

$ing="INSERT INTO F01DATOS.$databasename4
values($hora,'$titulo','$resumen','$detalle','$est ado')";

está ingresando un nuevo registro en la bd con valores nulos en algunos campos, tales como el campo fecha, luego si buscas por fecha, ese registro no va a aparecer. Deberia ser asi:

$ing="INSERT INTO F01DATOS.$databasename4
values($año,$mes,$dia,$hora,'$titulo','$resumen',' $detalle','$est ado')";

donde año,mes y dia forman la fecha que ya existe.
  #8 (permalink)  
Antiguo 23/09/2005, 08:02
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
Cita:
Iniciado por claudiovega
A mi me parece que esto :

$ing="INSERT INTO F01DATOS.$databasename4
values($hora,'$titulo','$resumen','$detalle','$est ado')";

está ingresando un nuevo registro en la bd con valores nulos en algunos campos, tales como el campo fecha, luego si buscas por fecha, ese registro no va a aparecer. Deberia ser asi:

$ing="INSERT INTO F01DATOS.$databasename4
values($año,$mes,$dia,$hora,'$titulo','$resumen',' $detalle','$est ado')";

donde año,mes y dia forman la fecha que ya existe.
gracias por responder
intente lo que me dices pero sigue sucediendo lo mismo y no entra al ciclo for,porque si entrara me deberia mostrar el valor de contador,el cual es una de nombre contador y deberia mostrar su valor con la funcion print pero no lo hace.
aqui coloco el codigo donde esta la funcion print

Código PHP:
for($contador=0;$contador<20;$contador++) 
              { 

if(
$row2!=0
                  { 


          
$estado='v'
           

          
$hora=date('h-i-s'); 


          
$ing="INSERT INTO F01DATOS.$databasename4 
          values($hora,'$titulo','$resumen','$detalle','$est  ado')"

          
            print 
"hora:".$hora
          
$query=odbc_exec($dbconn,$ing); 
          include(
"grabar-noticia.php"); 
          
odbc_close($dbconn); 
          print 
"contador:".$contador
          }} 

       } 
       } 
       } 

?> 
  #9 (permalink)  
Antiguo 23/09/2005, 08:31
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Preguntar esto if($row1!=0) no es correcto, ya que $row1 es un array. Debieras preguntar:

Código PHP:
<?php
   
//se ejecutó la consulta
   
if(isset($result))
  {
      
//el conteo de los registros es mayor que cero?
      
if(odbc_num_rows($result)>0)
      {
           
//Hay registros en la bd (existe la noticia)
      
}
      else
      {
          
//no existe la noticia
      
}
  }
?>
  #10 (permalink)  
Antiguo 23/09/2005, 08:38
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
ingrese los datos directamente a la base de datos y funciona bien,pero el problema lo tengo en el ingreso desde php.

esto ingrese en la base de datos,asi deberia quedarme cuando ingrese los datos desde php,pero no me resulta.hay tres noticias en el mismo en la fecha,pero el identificador de cada noticia es la hora(clave secundaria).
Código:
ANO   MES DIA  HORA    TITULO   RESUMEN              DETALLE         estado
2005  09    23   103354  noticia1  resumen noticia1    detalle noticia1    v  
2005  09    23   103423  noticia2  resumen noticia2    detalle noticia2    v 
2005  09    23   103515  noticia3  resumen noticia3    detalle noticia3    v
gracias por seguir ayudandome para solucionar mi problema
  #11 (permalink)  
Antiguo 23/09/2005, 08:54
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
hola,sigo sin poder entrar a mi ciclo for(porque no me muestra el valor de las variable con funcion print,me refiero al contador ni a la variable de ingreso) ,para que funcione el ingreso de mas de una noticia en la misma fecha.

que parte tengo mal en el codigo,no encuentro que puede ser :(:(:(:(,y es lo utlimo que me falta y no me resulta :(:(:

tendre que ocupar otra forma para incrementar las noticias o que modifico en el codigo.
gracias

Código PHP:
                     
else //primer else
                
{
                  if(
$row1==0){

                
$estado='v';
                
$hora=date('his');

                  
$ing="INSERT INTO F01DATOS.$databasename4
                  values($anno,$mes,$dia,$hora,'$titulo','$resumen','$detalle','$estado')"
;


                        print 
"hora:".$hora;
                         print 
"<br>ingreso:".$ing;
                        
$query=odbc_exec($dbconn,$ing);
                        include(
"grabar-noticia.php");
                        
odbc_close($dbconn);
                        }

 else 
//segundo else
                       
{

              
$query ="SELECT f01datos.$databasename4.ndia,
              f01datos.$databasename4.nmes,
              f01datos.$databasename4.nano FROM f01datos.$databasename4
          WHERE f01datos.$databasename4.ndia=$dia and f01datos.$databasename4.nmes=$mes
              and f01datos.$databasename4.nano=$anno"
;


              
$result=odbc_Exec($dbconn,$query);
              
$row2 odbc_fetch_array($result);

         if(isset(
$result))//se ejecuta la consulta
           
{//primer if

            
if(odbc_num_rows($result)>0//si es mayor que cero,deberia ejecutarse el ciclo for,y aumentar el contador i,para ingresar mas de una noticia con la misma fecha

             
//segundo if

            
for($i=0;$i<20;$i++)  { //for
          
          
$estado='v';
          
$hora=date('his');

          
$ing="INSERT INTO F01DATOS.$databasename4
          values($anno,$mes,$dia,$hora,'$titulo','$resumen','$detalle','$estado')"
;

          print 
"hora:".$hora;
          
$query=odbc_exec($dbconn,$ing);
          include(
"grabar-noticia.php");
          
odbc_close($dbconn);
          print 
"contador:".$i;
          print 
"<br>ingreso:".$ing;
          
          }
//cierro primer if
          
}//cierro segundo if
          
}//cierro ciclo for

       
//cierro primer else
       
//cierro segundo else
       
//cierro el primer if donde recibo con el metodo post

?> 

Última edición por jak; 23/09/2005 a las 09:05
  #12 (permalink)  
Antiguo 23/09/2005, 09:09
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
Todos los if ($row algo) cambialos como te indiqué.
Ejemplo:

cambia if($row1==0) por

Código PHP:
<?php
  
if(isset($result))
  {
     if(
odbc_num_rows($result)==0)
     {
         
//no hay registros
     
}
  }
?>
  #13 (permalink)  
Antiguo 23/09/2005, 09:40
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
gracias claudiovega,pero cuando hago lo que me dices no me deja ingresar y solo me actualiza e igualmente sigue sin poder entrar al ciclo for.

aqui coloco el codigo que modifique con lo que tu me dices,esta como comentario,porque tuve que volver con row para que funcione el ingreso y modificado.

que mas puedo hacer?
gracias

Código PHP:
<?
   $accion 
$_POST['Ingreso'];
   if(
$accion=="grabar")       //if que recibe valor con el metodo post
   
{
   
$dia $_POST['dia'];
   
$mes $_POST['mes'];
   
$anno $_POST['anno'];
   
$titulo $_POST['titulo'];
   
$resumen $_POST['resumen'];
   
$detalle $_POST['detalle'];
   
$fecha $dia."-".$mes."-".$anno;



     include(
"conexion-noticia.php");

     
$query ="SELECT f01datos.$databasename4.ntitulo as TITULO,
            f01datos.$databasename4.nresumen as RESUMEN,
            f01datos.$databasename4.ndetalle as DETALLE FROM f01datos.$databasename4
        WHERE f01datos.$databasename4.ndia=$dia and f01datos.$databasename4.nmes=$mes
            and f01datos.$databasename4.nano=$anno"
;


     
$result=odbc_Exec($dbconn,$query);
     
$row1 odbc_fetch_array($result);


     if(
$row1!=0){
  
// if(isset($result))
 //  {
  //     if(odbc_num_rows($result)!=0)
   //         {
             
$mod="UPDATE F01DATOS.$databasename4 SET
             ntitulo='$titulo',
             nresumen='$resumen',
             ndetalle='$detalle'
             WHERE nano=$anno and
             nmes=$mes and
             ndia=$dia"
;
             
$query=odbc_exec($dbconn,$mod);
              print 
"<br>ingreso:".$mod;

             include(
"grabar-noticia.php");
                  }
                  
                  
//}

                
else       //primer else
                
{


                 if(
$row1==0)
                 {
                 
// if(isset($result))
                  // {
                 // if(odbc_num_rows($result)==0)
                 // {
                
$estado='v';
                
$hora=date('his');

                  
$ing="INSERT INTO F01DATOS.$databasename4
                  values($anno,$mes,$dia,$hora,'$titulo','$resumen','$detalle','$estado')"
;


                        print 
"hora:".$hora;
                         print 
"<br>ingreso:".$ing;
                        
$query=odbc_exec($dbconn,$ing);
                        include(
"grabar-noticia.php");
                        
odbc_close($dbconn);
                        
//}
                        
                        
}

                       else     
//segundo else
                       
{

              
$query ="SELECT f01datos.$databasename4.ndia,
              f01datos.$databasename4.nmes,
              f01datos.$databasename4.nano FROM f01datos.$databasename4
          WHERE f01datos.$databasename4.ndia=$dia and f01datos.$databasename4.nmes=$mes
              and f01datos.$databasename4.nano=$anno"
;


              
$result=odbc_Exec($dbconn,$query);
              
$row2 odbc_fetch_array($result);

         if(isset(
$result)) //primer if
           
{
            if(
odbc_num_rows($result)>0//segundo if
             
{
            for(
$i=0;$i<20;$i++)  { //comienzo del ciclo for

          
$estado='v';
          
$hora=date('his');

          
$ing="INSERT INTO F01DATOS.$databasename4
          values($anno,$mes,$dia,$hora,'$titulo','$resumen','$detalle','$estado')"
;

          print 
"hora:".$hora;
          
$query=odbc_exec($dbconn,$ing);
          include(
"grabar-noticia.php");
          
odbc_close($dbconn);
          print 
"contador:".$i;
          print 
"<br>ingreso:".$ing;
          }
//primer if
          
}//segundo if
          
}//for

       
//primer else
       
//segundo else
       
//if donde recibo con el metodo post

?>
  #14 (permalink)  
Antiguo 23/09/2005, 12:36
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
que mas puedo hacer?:(:(:(:(:(
  #15 (permalink)  
Antiguo 26/09/2005, 06:31
jak
 
Fecha de Ingreso: septiembre-2005
Mensajes: 39
Antigüedad: 18 años, 6 meses
Puntos: 0
ayuda
  #16 (permalink)  
Antiguo 26/09/2005, 10:09
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 5 meses
Puntos: 11
haz visto si la consulta sql esta bien?
cuantas filas devuelve?
prueba eso antes en algun programa como mysql query browser
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 07:16.