Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28

    [PHP]Loop che inserisce i dati troppe volte

    Ciao a tutti, sto imparando il php da poce settimane e quindi mi sto letteralmente scervellando con questo problema, vediamo se mi potete aiutare voi:

    Creo un' array e poi gli dico di scrivere nel database tutti i valori uno per uno.
    Se nell'array ci sono 5 valori dovrebbe scrivere 5 record...
    il risultato è che con un'array di 4 valori ne inserisce 7 ripetuti.

    questo è il codice:

    Codice PHP:
    <?php 
    function view($dirname){
            
    $cartella opendir($dirname);
            while (
    $file readdir($cartella)) {
            
    $file_array[] = $file;
            }
            
            foreach (
    $file_array as $file) {
            
    # se il file inizia con .. lo tralascio
            
    if ( $file == ".." || $file == ".") {
            continue;
            }
            
    #trovo i file e creo il link
            
    $e=substr(strrchr($file"."), 0); // azzero l'estensione
            
    $a=""//sostituisco lo spazio vuoto con il relativo codice html
            
    $b=" ";
            
    $nome1=ereg_replace($e$a$file); // sostituisco codice 1
            
    $nome=ereg_replace("_""$b"$nome1); //sostituisco  codice 2
            
    ?>
            <div style="float:left;margin:10px;"><a href="<?php echo $dirname?>/<?php echo $file?>" title="<?php echo $nome?>">[img]<?php echo $dirname?>/<?php echo $file?>[/img]" height="100px" border="0px">
    [b]<?php echo $nome?>[/b]</a></div>
    <?
    $NomiFiles 
    $NomiFiles $file ';';
    }
    $NomiFiles substr($NomiFiles,0,strlen($NomiFiles)-1);
    $arrayNomiFiles explode(';'$NomiFiles);
    $countFiles count($arrayNomiFiles);

    $con mysql_connect("HOST","USER");

    if (!
    $con)
      {
      die(
    'Could not connect: ' mysql_error());
      }

    mysql_select_db("NOMEDB"$con);
      
    foreach (
    $arrayNomiFiles as $value)
    {
    // Execute query
    mysql_query($sql,$con);
    $sql "INSERT INTO File (FileName, FileFiles, FileNumber)
    VALUES(
    '
    $dirname.zip', '$value', '$countFiles'
    )"
    ;

    mysql_query($sql,$con);
      }
    mysql_close($con);

    }
    il tutto è uno scriptino dove si caricano immagini in archivi .zip ed in automatico vengono decompresse e si crea la galleria.
    La funzione in questione è quella che dovrebbe inserire nel DB i dati inerenti lo zip e mostrare a video le immagini dell'archivio decompresso.

    CARICANDO IL FILE 01.ZIP COMPOSTO DA 4 FILE AL SUO INTERNO (01.JPG,02.JPG,03.JPG,04.JPG) IL RISULTATO NEL DB E' QUESTO:

    FileName___FileFIles____FileNumber
    01.zip_____04.jpg______4
    01.zip_____01.jpg______4
    01.zip_____01.jpg______4
    01.zip_____03.jpg______4
    01.zip_____03.jpg______4
    01.zip_____02.jpg______4
    01.zip_____02.jpg______4

    Perchè il file 04.jpg è l'unico a non venire duplicato?
    Come faccio ad avere una tabella pulita senza inutili doppioni?

    Io vorrei questo risultato qui:

    FileName___FileFIles____FileNumber
    01.zip_____01.jpg______4
    01.zip_____02.jpg______4
    01.zip_____03.jpg______4
    01.zip_____04.jpg______4

    Se mi aiutate ve ne sarò mega grato! grazie!!!!!!

  2. #2
    Ho modificato un po il tuo codice, prova così:
    Codice PHP:
    <?php
    function view($dirname) {
        
    $cartella opendir $dirname );
        while ( (
    $file readdir $cartella )) !== false ) {
            
    $file_array [] = $file;
        }
        
    $NomiFiles '';
        foreach ( 
    $file_array as $file ) {
            
    # se il file inizia con .. lo tralascio 
            
    if ($file == ".." || $file == ".") {
                continue;
            }
            
    #trovo i file e creo il link 
            
    $e substr strrchr $file"." ), ); // azzero l'estensione 
            
    $a ""//sostituisco lo spazio vuoto con il relativo codice html 
            
    $b " ";
            
    $nome1 str_replace $e$a$file ); // sostituisco codice 1 
            
    $nome str_replace "_""$b"$nome1 ); //sostituisco  codice 2 
            
    ?>
    <div style="float: left; margin: 10px;"><a
        href="<?php
            
    echo $dirname?>/<?php
            
    echo $file?>"
        title="<?php
            
    echo $nome?>"><img
        src="<?php
            
    echo $dirname?>/<?php
            
    echo $file?>"
        title="<?php
            
    echo $nome?>" height="100px" border="0px">

    [b]<?php
            
    echo $nome?>[/b]</a></div>
    <?
            $NomiFiles 
    .= $file ';';
        }
        
    $NomiFiles substr $NomiFiles0strlen $NomiFiles ) - );
        
    $arrayNomiFiles explode ';'$NomiFiles );
        
    $countFiles count $arrayNomiFiles );
        
        
    $con mysql_connect "HOST""USER" );
        
        if (! 
    $con) {
            die ( 
    'Could not connect: ' mysql_error () );
        }
        
        
    mysql_select_db "NOMEDB"$con );
        
        foreach ( 
    $arrayNomiFiles as $value ) {
            
    // Execute query 
            
    $sql "INSERT INTO File (FileName, FileFiles, FileNumber) 
    VALUES( 
    '
    $dirname.zip', '$value', '$countFiles
    )"
    ;
            
    mysql_query $sql$con );
        }
        
    mysql_close $con );
    }
    al posto di ereg_replace è meglio usare str_replace se non ti servono le espressioni regolari,
    al posto di opendir e readdir, potresti usare la classe DirectoryIterator, se hai php5. cmq cos' dovrebbe funzionare.
    il problema era che facevi mysql_query sia prima di dichiarare $sql sia dopo, così ti inseriva i dati 2 volte

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28
    funziona perfettamente!!!!

    GRAZIE MILLE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


    davvero magari il problema ewra una cazzata... però sono alle prime armi con php non sai che aiutone mi hai fornito!!!!!! obbligato!

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.