Visualizzazione dei risultati da 1 a 8 su 8

Discussione: problema if

  1. #1

    problema if

    ciao a tutti.. io ho sto codice

    for($i=1; $i<=3; $i++) {
    $fle = "fleImage".$i;
    if ((isset($_FILES['fleImage'.$i.''])) AND ($_FILES['fleImage'.$i.''] !='')) {

    $nome = uploadImage($fle, SRV_ROOT . NEWS_IMAGE_DIR);
    $sql_foto = "insert into notizia_foto (notizia_id_fk,img_anteprima,img_grande)
    values ('$ltId','$nome','$nome')";
    $result_foto =& dbQuery($sql_foto) or die('Impossibile inserire le foto della news' . mysql_error());
    }
    }

    dovrebbe fare l'upload e l'inserimento solo se mi arriva qualcosa... invece lo fa sempre!
    dov'è che sbaglio ?
    Kalton
    -------------------
    www.kalton.it - www.kalton.cavarzere.it

  2. #2
    Hai provato ad usare l'IF al contrario con la direttiva !isset?

    Codice PHP:

    if ((!isset($_FILES['fleImage'.$i.''])) {
     
    // nessun file uploadato => messaggio di errore
    } else {
      
    // file uploadato => codice per eseguire tutto il resto

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    no.. nn funzia neanche cosi.. mi inserisce lo stesso 3 record senza il nome dell'immagine!
    Kalton
    -------------------
    www.kalton.it - www.kalton.cavarzere.it

  4. #4
    help me
    Kalton
    -------------------
    www.kalton.it - www.kalton.cavarzere.it

  5. #5
    Scusa per la mia prima risposta, ma avevo capito che il tuo problema fosse nel fatto che la query fosse eseguita anche se il contenuto di $_FILES era nullo!

    Controllando lo script più attentamente ho notato una serie di cose... passo ad elencartele.

    È normale che la query ti inserisca tre record: è all'interno di un ciclo di FOR!!!! Peraltro, ti aggiunge record perchè con INSERT vai a fare proprio quello: se vuoi aggiornare un record già esistente devi fare UPDATE!

    Io farei così.
    Innanzi tutto farei un controllo su $_FILES, se arriva vuoto allora non faccio nessuna query.

    Una volta controllato che ci sia dentro qualcosa, allora si passa all'UPDATE del record.

    Noto infatti che nella query ci sono anche dei riferimenti ad una colonna notizia_id_fk che nel tuo script non sono menzionati.
    Suppongo quindi che te, come prima cosa, fai una query di INSERT per inserire una news, poi vuoi aggiungere (eventualmente) fino ad un massino di 3 foto nell'articolo appena inserito.

    Peraltro, noto che le colonne che andranno ad ospitare il nome delle foto sono solo 2: in questo modo, ciclando con il for, il nome dell'ultima foto uploadata si sovrascriverà a quello predentemente insertito.
    Devi quindi prevedere due cose (scegli una o l'altra):
    1) Fai 6 campi nel DB (foto1, thumb1, foto2, thumb2, foto3, thumb3 ) che accettino valori NULL;
    2) Lasci un solo campo per le foto ed uno per le miniature e prevedi di inserire lì i nomi delle immagini uniti da un particolare carattere jolly => In fase di estrapolazione dal DB, però, devi prevedere un explode() al fine di recuperare i singoli nomi delle immagini.

    Ultima annotazione, ma questa è solo una questione di performance: nella query che te hai scritto vedo che l'immagine inserita viene salvata sia come miniatura, sia come foto. Che senso ha?
    Se non prevedi un rimpicciolimento automatico (via librerie GD) o l'inserimento di una miniatura già ridimensionata, tanto vale non sprecare spazio e risorse di MySQL per estrarre 2 volte lo stesso valore. No???

    Non ti scrivo codice perché suppongo che prima devi elaborare il metodo che reputi migliore per gestire quanto ti ho specificato sopra.

    Se hai altri problemi, fatti risentire.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  6. #6
    ma guarda che io voglio fare l'INSERT solo se il campo nn è vuoto!
    Kalton
    -------------------
    www.kalton.it - www.kalton.cavarzere.it

  7. #7
    Si, ma forse non hai capito cosa intendo io.... o forse io non ho capito cosa serve a te.

    Se vuoi aggiornare il record di una news, non devi fare l'INSERT, ma l'UPDATE.

    Suppongo che ci sia una pagina con una form per linserimento della news.
    Oltre ai campi classici (titolo, testo) ci sono anche quelli per la scelta e l'upload delle foto.
    La pagina cui punta l'action della form riceve le variabili (presumibilmente via POST) e le mette nel DB.

    Ergo il tuo script dovrebbe essere qualcosa tipo:

    Codice PHP:

    // ricavo le variabili passate dalla form
    $titolo $_POST['titolo'];
    $testo $_POST['testo'];


    // query per inserire i testi della news
    $sql "INSERT INTO tabella SET(titolo, testo) VALUES($titolo$testo) ";
    $query mysql_query($sql) OR DIE ('Messaggio di errore');

    // ricavo l'ID del record appena creato
    $id mysql_insert_id(); 
    Ora devi andare ad aggiornare il record con le foto relative (ammesso che siano state inserite).

    Codice PHP:
    if ((!isset($foto1) AND $foto1 =='' OR (!isset($foto2) AND $foto2 =='' OR (!isset($foto3) AND $foto3 =='' ) { 
    // nessun file uploadato => messaggio di cortesia (opzionale)
    } else { 
      
    // almeno un file è stato uploadato per cui passo all'update del record 

    $cartella_foto "nome/cartellla";

    for (
    $i 1$i <= 3$i++) {

    $file $_FILES['foto.$i'];
    $nome_foto $_FILES['foto.$i']["tmp_name"];

    // salvo il file nella cartella
    @copy($file"$nome_foto/$nome_foto") or die("Messaggio di errore che blocca lo script");

    // definisce una nuova variabile (vedrai poi a cosa serve)
    if ($i == 1) {
     
    $set .= " foto1 = '$file' ";
    } else {
     
    $set .= ", foto".$i." =  '$nome_foto' ";
    }

    // si esce dal ciclo di FOR
    }

    $sql_update "
         UPDATE tabella
         SET 
    $set
         WHERE id = 
    $id
    "
    ;

    $query mysql_query($sql_update) OR DIE ("Messaggio di errore");


    Qui rientrano, però, le osservazioni che ti ho fatto nel mio precedente post riguardo la struttura della tua tabella MySQL.
    Devi strutturarla diversamente se vuoi agire con questo metodo (dove peraltro ho evitato di crearti un record per una miniatura che - di fatto - non esiste). Sostanzialmente, le colonne che devi avere nel tuo DB dovrebbero essere chiamate foto1 , foto2 , foto3 .

    Avendo scritto il codice qui senza provarlo, c'è la seria possibilità che abbia fatto qualche errore.
    Spero che sia abbastanza chiaro, così puoi apportare le dovute correzioni.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Un errore me lo sono trovato da solo.
    Ti posto il codice corretto:

    Codice PHP:
    // definisce una nuova variabile (vedrai poi a cosa serve) 
    if ($i == 1) { 
    $set .= " foto1 = '$nome_foto' "
    } else { 
    $set .= ", foto".$i." =  '$nome_foto' "

    Scusami
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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.