Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    340

    Codeigniter 3 ho un ciclo for che raddoppia l'inserimento.

    Salve, ancora qui a sbattere la testa, col vs. aiuto spero di sbloccare la situazione non so più cosa provare.
    Ho un errore che da due giorni non mi dà pace, ci giro intorno, ho riscritto il ciclo decine di volte ma nel database mi ritrovo l'esatto doppio di quanto dovrei avere.
    l'utente sceglie per quante settimane deve ripetere lo stesso appuntamento, orari uguali ma date ovviamente diverse, se per esempio è di venerdi e lo vuole per 10 settimane sempre il venerdi, eseguo la funzione duplica() da una chiamata ajax portando con GET, id_evento e il numero di settimane da ripetere.

    Mi spiego meglio se scrivo codice.

    Codice PHP:
    public function duplica(){
             
                 
                
    $id_events   $_GET['id_evento'];
                
    $ciclo       $_GET['ciclo'];
                
    // prelevo il singolo evento e ne prelevo i dati.
                
                
    $event =$this->model->r_1_event($id_events); 

                
    $istruttore  $event[0]->istruttore   ;
                
    $start       $event[0]->start   ;
                
    $end         $event[0]->end;
                
    $daora       $event[0]->daora;
                
    $adora       $event[0]->adora;
                
    $sala        $event[0]->sala;
                
    $istruttore  $event[0]->istruttore;
                
    $corsi       $event[0]->corsi;
                
    $persone     $event[0]->persone;
                
    $admin       $event[0]->admin;
                
    $id_admin    $event[0]->id_admin;
                
    $info        $event[0]->info;
                
    $title       $event[0]->title;
               
                
    $datadate('Y-m-d'strtotime($start)) ;
                
                
                for (
    $i 0$i 2$i++) {           // ho messo a due per testare, nel DB ne ha inserito 4
                 
                
    $newdate strtotime '+1 week' strtotime $data ) ) ; //   l'operazione aggiunge 7 giorni

                            
    $newdate date 'Y-m-d' $newdate );
                            
    $data $newdate;

                            
                            
    $giorno date('d'strtotime($data) );;
                            
    $mese date('m'strtotime($data) );
                            
    $anno date('Y'strtotime($data) );

                              
                                
    $datadispon = array(
                                         
    'start'        => date('Y-m-d',strtotime($data) ),
                                         
    'end'          => date('Y-m-d',strtotime($data) ),
                                         
    'daora'        => $daora,
                                         
    'adora'        => $adora,
                                         
    'sala'         => $sala,
                                         
    'istruttore'   => $istruttore,
                                         
    'corsi'        => $corsi,
                                         
    'persone'      => $persone,
                                         
    'admin'        => $admin,
                                         
    'id_admin'     => $id_admin,
                                         
    'info'         => $info,
                                         
    'title'        => $title,
                                         
    'created_date' => date('Y-m-d'),
                                         
    'status'       => 1
                                         
    );

                                 
    // duplica la lezione  e restituisce il numero relativo
                               
                                    
    $this->model->c_object('events'$datadispon);
                
                                    if(
    $this->db->affected_rows() > 0)
                                      {
                                           
    $insert_id $this->db->insert_id();
                                           echo 
    ' inserito '.$insert_id.'<br>';
                                      }    

                        }     
    //  ciclo for
                
                           
                            
    show_error('proc finita ');

     
    // nel model questa funzione inserisce nella tabella l'array passato 

    function c_object($table$data) {
             
    $this->db->insert($table$data);
                                           

    Ho provato tutti i modi, tutte le prove mi stampano un numero esatto di cicli ma nella tabella
    ho sempre il doppio di quello richiesto.

    Mi sembra di impazzire, tutto sembra esatto ma non lo vedo, c'è per forza un errore ma non lo vedo!!!!
    Qualcuno riesce a vedere se mi sfugge e cosa mi sfugge ??

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    192
    Se uso due cicli quale sarà il risultato? se il primo ciclo itera 3 volte e il secondo ciclo itera 2 volte farò 6 iterazioni in totale. Mentre se il primo ciclo itera 2 volte farò 4 iterazioni in totale.

    Codice PHP:
    <?php

    error_reporting
    (PHP_INT_MAX);
    if(!isset(
    $z)) {
    $z 0;
    }
    while(
    != $z) {
    if(isset(
    $y)) {
    $y $y 1;
    } else {
    $y 0;
    }
    for (
    $iarr[$y] = 0$iarr[$y] < 2$iarr[$y]++) {
    }
    $z++;
    if(
    == $z) {
    var_dump($iarr);
    }
    }

    ?>
    Anche richiesta Ajax è un percorso url specifico che può non coincidere con la pagina proposta al browser ma se coincide sono due cicli. Credo devi creare un modello ajax a parte ma non so come fare con Codeigniter.
    Se togli il ciclo while avendo cura di mantenere il codice integro, incluso $z++; e sostituendo 3 con 2 che risultato ti da $iarr compreso con il tuo codice?
    Ulteriori consigli imposta il fuso orario è usa invece la classe DateTime invece delle funzioni native poiché osservano le impostazioni locali del server.
    Contrariamente come riportato non dovresti utilizzare date https://www.codeigniter.com/userguid...te_helper.html strano non abbia pieno supporto per DateTime.
    Ultima modifica di darbula; 12-09-2022 a 20:27

  3. #3
    Io guarderei a valle....
    Come richiami la funzione duplica?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.