Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    Aggiungere n valori in loop con php ad un database mysql

    Salve a tutti, sono qui con una nuova domanda!
    Sto riempendo un database con un calendario e lo riempio in questa maniera (se c'� un modo migliore ditemelo):
    codice:
    $anno = "2017";
    $primadatadellanno = date("$anno-01-01");
    $ultimadatadellanno = date("$anno-12-31");
    $sommagiornidellanno = floor((strtotime($ultimadatadellanno) - strtotime($primadatadellanno)) / 86400);  
    
    $x = 0;
    while($x <= $sommagiornidellanno) {
    $date = date('Y-m-d', strtotime($primadatadellanno. ' + '. $x .' days'));
    $query = $pdo->query("INSERT INTO $calendario (Data) VALUES ('$date')");
    $x++;
    }
    Fin qui tutto bene.
    --------------------------------------------------------
    Ora dovrei associare, alla singola data ed in un altro campo, un array che si ripeta per i 365 giorni dell'anno (sono 10 elementi)

    codice:
    $elementi[] = [$n1,$n2,$n3,$n4,$n5,$n6,$n7,$n8,$n9,$n10];
    
    foreach($elementi as $nomi) {
     $elementi[] = $nomi;
    }
    
    
    $x = 0;
    while($x <= $sommagiornidellanno) {
    $date = date('Y-m-d', strtotime($primadatadellanno. ' + '. $x .' days'));
        for ($n=0; $n<10; $n++)
    $query1 = $pdo->query("INSERT INTO $tabella_calendario (Data,Elementi) VALUES ('$date','$nomi[$n]')");
    $x++;}
    }
    In questa maniera i nomi vengono scritti ordinatamente ma mi riscrive la data per ogni elemento: ES.
    01-01-2017 elemento 1
    01-01-2017 elemento 2
    ecc........

    Io avrei bisogno invece che gli elementi vengano inseriti 1 per data
    01-01-2017 elemento 1
    02-01-2017 elemento 2
    ecc....

    Come potrei risolvere?
    PS. vi piace il calendario scritto cos�? grazie

  2. #2
    Non mi fa modificare il testo ovviamente la variabile $tabella_calendario e $calendario è errata ma nn ha importanza... Potrei anche usare UPDATE e dividere le query e fare un WHERE id="$x" (ovviamente x è ciclato per i 365 giorni dell'anno) ma nn ci riesco lo stesso

  3. #3
    Ho risolto da solo: non conoscevo l'esistenza di reset() cmq ho fatto due cicli diversi

    codice:
    $x = 0;
    while($x <= $sommagiornidellanno) {
    $date = date('Y-m-d', strtotime($primadatadellanno. ' + '. $x .' days'));
    $query1 = $pdo->query("INSERT INTO calendario (Data) VALUES ('$date')");
    $x++;}
    }
    
    
    $x1=1;
    while($x1 <= $sommagiornidellanno) {	
    for ($n=0; $n<10; $n++){
    $query2 = $pdo->query("UPDATE $calendario SET elementi='$nomi[$n]' WHERE id='$x1'");
    if($n==9) reset($nomi);
    $x1++;}
    }
    Ah sono sempre curioso di sapere come avreste inserito voi tutte le date in un database :P

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ho sempre molte difficoltà per capire quello che vuoi fare.
    Il tuo codice non funzionerà nel 2018 visto che aggiorni da un id ( autoincrement suppongo) che con un secondo anno partirà da 366.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Ho sempre molte difficoltà per capire quello che vuoi fare.
    Il tuo codice non funzionerà nel 2018 visto che aggiorni da un id ( autoincrement suppongo) che con un secondo anno partirà da 366.
    Beh ovviamente l'anno successivo svuoterò la tabella...non ne avrò più bisogno!

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Salvo che l’autoincrement partirà sempre da 366.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Gentilmente, potresti postare i primi 30 record del risultato ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Salvo che l’autoincrement partirà sempre da 366.
    Nono riparte da 1 (TRUNCATE tabella)
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Gentilmente, potresti postare i primi 30 record del risultato ?
    Adesso non sono a casa! Ma in qualunque caso il risultato sarà
    Id Data Elementi
    1 2017-01-01 elemento 1
    2 2017-01-02 elemento 2
    Ecc.....
    Sarà così fino a 10
    poi all'id nº 11 ci sarà di nuovo l'elemento 1 e così via!
    Ovviamente l'indice $n parte da 0 per l'array degli elementi quindi n deve essere massimo mionore di 10
    Ultima modifica di supersqualo; 21-10-2017 a 18:59

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova questo (che è indipendente dalla lunghezza dell'array degli elementi).

    Codice PHP:
    <?php
    $pdo    
    = new PDO('mysql:host=127.0.0.1; dbname=tests','root','', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
     
    $elementi = array('elemento 1''elemento 2''elemento 3''elemento 4''elemento 5''elemento 6''elemento 7''elemento 8''elemento 9''elemento 10');
    $x 0;
    $date date('Y-m-d'strtotime("17-01-01"));
     
    while(
    $x <= 364
    {
     
    $elemento $elementi[$x count($elementi)];
     
    $query1 $pdo->query("INSERT INTO calendario (Data,elementi) VALUES (DATE_ADD('$date', INTERVAL $x DAY),'$elemento')");
     
    $x++;
    }


    Capture20171021_001b.JPG

    Per il TRUNCATE non lo sapevo.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Ottimo! Però probabilmente non hai tenuto conto degli anni bisestili!
    Io ho fatto così per ovviare al problema:
    codice:
    $anno = "2017";
    $primadatadellanno = date("$anno-01-01");
    $ultimadatadellanno = date("$anno-12-31");
    $sommagiornidellanno = floor((strtotime($ultimadatadellanno) - strtotime($primadatadellanno)) / 86400);
    e quindi impostando il ciclo:
    codice:
    while($x <= $sommagiornidellanno)
    Automaticamente terrà conto degli anni bisestili!
    E anche per questo che chiedevo come avreste fatto voi!


    Quindi all'inizio di ogni anno:
    1 Svuoterò la tabella
    2 Cambierò l'anno alla variabile $anno
    3 Metterò in ordine gli elementi in base a ciò che mi serve
    Ovviamente basterebbe scrivere così:
    codice:
    $sommagiornidellanno = floor((strtotime("$anno-12-31") - strtotime("$anno-01-01")) / 86400);

    Si può fare di meglio (giusto per curiosità)?
    Ultima modifica di supersqualo; 21-10-2017 a 22:09

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.