ayuda con ciclo if y for

5381 visitas 2 respuestas

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 :?

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.

<?

//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 :(

por xxjakxx desde Zambia

Registrado desde: 02 Sep 05

Respuestas

0 0

Buenas, si te he entendido bién, ¿Puedes usar una clava distinta para cada noticia, no? Luego si quieres contar las notícias de una determinada fecha, hacer un select count... Saludos

por catongura desde Andorra

Registrado desde: 23 Feb 04
0 0

No me queda demasiado claro, sobre todo la tabla de la base de datos que tienes.

Buenos días xxjakxx

Dices que el campo principal de la tabla es el dia,mes y año. Luego tienes hora, titulo,etc.

Si tienes una noticia en el día 1, mes 1, año 1 a la hora x, no vas a poder tener otra noticia para el día 1, mes 1, año 1 aunque la hora sea la y.

Por eso no me ha quedado demasiado claro si es así como tienes definida la tabla.

Saludos

por Erzengel desde España

Registrado desde: 30 Aug 05