• User

    Form upload immagine e modifica

    Ciao a tutti,
    volevo chiedervi spiegazioni riguardo ad un problema che ho con un form in particolare quando sono in modifica.
    Ho una tabella mysql in cui salvo i dati che contiene i campi
    fornitore - articolo - immagine
    e i record vengono inseriti tramite un form
    method="post" enctype="multipart/form-data
    che mi presenta per immagine input type="file" che mi apre la finestra per scegliere l'immagine da caricare. OK va tutto bene! Fa anche upload! 🙂
    Ma se richiamo un record della tabella per modificarlo come devo gestire input type="file" ? Se non inserisco una nuova immagine vorrei che restasse quella vecchia e vorrei avere la possibilità di sceglierne tramite sfoglia un'altra!
    Son qui che penso da un po' :mmm:
    Ciao Grazie

    Patpat


  • User Attivo

    Ciao Patpat,

    è sufficiente che in fase di caricamento dell'immagine tu faccia un semplice test:

    $file_immagine = $_FILES['file'];
    if (isset($file_immagine['name'])){
    //aggiorna l'immagine
    }else{
    //non fare nulla
    }

    In soldoni vai a verifcare che il campo sfoglia contenga veramente qualcosa prima di aggiornare, in caso contrario non fai nulla.

    Non ricordo esattamente in php se l'if che ho scritto matcha correttamente nel caso in cui il campo sfoglia sia vuoto... in caso negativo basta spostare il controllo su qualcosa del tipo:

    if ($file_immagine['name']!=''){...

    Occhio anche alla variabile: $file_immagine['error'], che può risultare molto comoda.

    Per avere un quadro completo di ciò che hai e che puoi utilizzare, fatti stampare a monitor:

    var_dump($_FILES['file']);

    :ciauz:


  • User

    Caspita mille grazie! Ora è tutto ok, se viene inserita una nuova immagine registro il cambio altrimenti non devo fare proprio nulla!

    Ciao
    Patpat


  • User Newbie

    @ceccus said:

    Ciao Patpat,

    è sufficiente che in fase di caricamento dell'immagine tu faccia un semplice test:

    $file_immagine = $_FILES['file'];
    if (isset($file_immagine['name'])){
    //aggiorna l'immagine
    }else{
    //non fare nulla
    }

    In soldoni vai a verifcare che il campo sfoglia contenga veramente qualcosa prima di aggiornare, in caso contrario non fai nulla.

    Non ricordo esattamente in php se l'if che ho scritto matcha correttamente nel caso in cui il campo sfoglia sia vuoto... in caso negativo basta spostare il controllo su qualcosa del tipo:

    if ($file_immagine['name']!=''){...

    Occhio anche alla variabile: $file_immagine['error'], che può risultare molto comoda.

    Per avere un quadro completo di ciò che hai e che puoi utilizzare, fatti stampare a monitor:

    var_dump($_FILES['file']);

    :ciauz:

    Hmmmm .... io ho lo stesso prob. pero' non ce la faccio ad uscirne nemmeno con la tua soluzione..
    il mio prob. e il seguente:

    <form action="<? echo $editFormAction; ?>" method="post" name="form1" id="form1" enctype="multipart/form-data">
    <p><b>Titolo:</b><br />
    <input type="text" name="titolo" value="<? echo htmlentities($row_modifica_opinioni['titolo'], ENT_COMPAT, 'utf-8'); ?>" size="120" />
    <p><b>Sottotitolo:</b><br />
    <textarea name="testo_breve" cols="100"><? echo htmlentities($row_modifica_opinioni['testo_breve'], ENT_COMPAT, 'utf-8'); ?></textarea>
    <p><b>Testo intero:</b><br />
    <textarea name="testo_intero" cols="100" rows="30"><? echo htmlentities($row_modifica_opinioni['testo_intero'], ENT_COMPAT, 'utf-8'); ?></textarea>
    </p>
    <img src="../foto/<?php echo $row_modifica_opinioni['foto_a']; ?>" width="150"/>
    <p><b>Cambia foto:</b><br />
    <input type="file" name="foto_a"></p>
    <p><b>Cambia foto:</b><br />
    <input type="file" name="foto_b"></p>
    <input type="submit" value="Salva modifiche" />
    <input type="hidden" name="MM_update" value="form1" />
    <input type="hidden" name="id" value="<?php echo $row_modifica_opinioni['id']; ?>" />
    </form>

    ora... dove dovrei inserire quel tuo if?
    :tongueout:


  • User Attivo

    Ti conviene usare i parametri get, anche...
    se la pagina si chiama file.php, quando la richiamerai, per effettuare un nuovo upload, la richiamerai cosi:
    www . iltuosito. it/file.php?action=upload
    <?php
    if(!isset($_GET['action']) ||($_GET['action'] == "upload")){
    if(!isset($_FILES['file]['name'])){
    ?>
    <form action="<? echo $editFormAction; ?>" method="post" name="form1" id="form1" enctype="multipart/form-data">
    <p><b>Titolo:</b><br />
    <input type="text" name="titolo" value="<? echo htmlentities($row_modifica_opinioni['titolo'], ENT_COMPAT, 'utf-8'); ?>" size="120" />
    <p><b>Sottotitolo:</b><br />
    <textarea name="testo_breve" cols="100"><? echo htmlentities($row_modifica_opinioni['testo_breve'], ENT_COMPAT, 'utf-8'); ?></textarea>
    <p><b>Testo intero:</b><br />
    <textarea name="testo_intero" cols="100" rows="30"><? echo htmlentities($row_modifica_opinioni['testo_intero'], ENT_COMPAT, 'utf-8'); ?></textarea>
    </p>
    <img src="../foto/<?php echo $row_modifica_opinioni['foto_a']; ?>" width="150"/>
    <p><b>Cambia foto:</b><br />
    <input type="file" name="foto_a"></p>
    <p><b>Cambia foto:</b><br />
    <input type="file" name="foto_b"></p>
    <input type="submit" value="Salva modifiche" />
    <input type="hidden" name="MM_update" value="form1" />
    <input type="hidden" name="id" value="<?php echo $row_modifica_opinioni['id']; ?>" />
    </form>
    <?php
    }
    }else{
    //qui il codice che vuoi!
    }
    ?>


  • User Newbie

    Ok ho fatto come mi hai detto tu... ho aggiunto ?action=upload alla pagina che si collega a questa pagina di modifica:

    <?php require_once('../connections/ZilliDB.php'); ?>

    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
    {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

    switch ($theType) {
    case "text":
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
    break;
    case "long":
    case "int":
    $theValue = ($theValue != "") ? intval($theValue) : "NULL";
    break;
    case "double":
    $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
    break;
    case "date":
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
    break;
    case "defined":
    $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
    break;
    }
    return $theValue;
    }
    }

    $editFormAction = $_SERVER['PHP_SELF'];
    if (isset($_SERVER['QUERY_STRING'])) {
    $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
    }

    if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
    $updateSQL = sprintf("UPDATE opinioni SET titolo=%s, testo_breve=%s, testo_intero=%s, foto_a=%s, foto_b=%s WHERE id=%s",
    GetSQLValueString($_POST['titolo'], "text"),
    GetSQLValueString($_POST['testo_breve'], "text"),
    GetSQLValueString($_POST['testo_intero'], "text"),
    GetSQLValueString($_FILES['foto_a']['name'], "text"),
    GetSQLValueString($_FILES['foto_b']['name'], "text"),
    GetSQLValueString($_POST['id'], "int"));

    $cartella = '../foto/';
    $percorso = $_FILES['foto_a']['tmp_name'];
    $nome = $_FILES['foto_a']['name'];
    
    move_uploaded_file($percorso, $cartella . $nome);
    

    mysql_select_db($database_ZilliDB, $ZilliDB);
    $Result1 = mysql_query($updateSQL, $ZilliDB) or die(mysql_error());

    $updateGoTo = "../admin/admin_opinioni.php";
    if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
    }
    header(sprintf("Location: %s", $updateGoTo));
    }

    $colname_modifica_opinioni = "-1";
    if (isset($_GET['id'])) {
    $colname_modifica_opinioni = $_GET['id'];
    }
    mysql_select_db($database_ZilliDB, $ZilliDB);
    $query_modifica_opinioni = sprintf("SELECT * FROM opinioni WHERE id = %s", GetSQLValueString($colname_modifica_opinioni, "int"));
    $modifica_opinioni = mysql_query($query_modifica_opinioni, $ZilliDB) or die(mysql_error());
    $row_modifica_opinioni = mysql_fetch_assoc($modifica_opinioni);
    $totalRows_modifica_opinioni = mysql_num_rows($modifica_opinioni);
    ?>

    <head>

    <title>// AMMINISTRAZIONE SITO </title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    </head>
    <body>
    <div id="content">
    <table width="100%" border="0" cellpadding="2">
    <tr>

    </tr>
    <tr>
        <td valign="top">
            <?php
              include ("menu_admin.php");
              ?>
            
        </td>
      <td valign="top" id="main" width="81%" rowspan="2"><br />
    

    <?php
    if(!isset($_GET['action']) ||($_GET['action'] == "upload")){
    if(!isset($_FILES['file']['name'])){
    ?>

    <form action="<? echo $editFormAction; ?>" method="post" name="form1" id="form1" enctype="multipart/form-data">
    <p><b>Titolo:</b><br />
    <input type="text" name="titolo" value="<? echo htmlentities($row_modifica_opinioni['titolo'], ENT_COMPAT, 'utf-8'); ?>" size="120" />
    <p><b>Sottotitolo:</b><br />
    <textarea name="testo_breve" cols="100"><? echo htmlentities($row_modifica_opinioni['testo_breve'], ENT_COMPAT, 'utf-8'); ?></textarea>
    <p><b>Testo intero:</b><br />
    <textarea name="testo_intero" cols="100" rows="30"><? echo htmlentities($row_modifica_opinioni['testo_intero'], ENT_COMPAT, 'utf-8'); ?></textarea>
    </p>
    <img src="../foto/<?php echo $row_modifica_opinioni['foto_a']; ?>" width="150"/>
    <p><b>Cambia foto:</b><br />
    <input type="file" name="foto_a"></p>
    <p><b>Cambia foto:</b><br />
    <input type="file" name="foto_b"></p>
    <input type="submit" value="Salva modifiche" />
    <input type="hidden" name="MM_update" value="form1" />
    <input type="hidden" name="id" value="<?php echo $row_modifica_opinioni['id']; ?>" />
    </form>
    <?php
    }
    }else{
    //qui il codice che vuoi!
    }
    ?>
    </td>
    </tr>
    <tr>
    <td width="19%">
    <ul>
    <li><a href="opinioni_inserisci.php">Inserisci nuova opinione</a></li>
    <li><a href="admin_opinioni.php">Lista delle opinioni</a></li>
    </ul> </td>
    </tr>
    </table>
    </div>
    </body>
    </html>

    <?php
    mysql_free_result($modifica_opinioni);
    ?>

    pero' mi da un error nella stringa:
    }
    header(sprintf("Location: %s", $updateGoTo));
    }

    e non mi rimanda alla pagina deffinita updateGoTo admin_opinioni

    😞

    se qualcuno mi puo' aiutare... gli sarei grato
    GRAZIE


  • User Attivo

    Sono sicuro che ti dà il famoso errore degli header...prova cosi:
    [PHP]
    <?php
    ob_start();
    require_once('../connections/ZilliDB.php');

    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
    {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

    switch ($theType) {
    case "text":
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
    break;
    case "long":
    case "int":
    $theValue = ($theValue != "") ? intval($theValue) : "NULL";
    break;
    case "double":
    $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
    break;
    case "date":
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
    break;
    case "defined":
    $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
    break;
    }
    return $theValue;
    }
    }

    $editFormAction = $_SERVER['PHP_SELF'];
    if (isset($_SERVER['QUERY_STRING'])) {
    $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
    }

    if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
    $updateSQL = sprintf("UPDATE opinioni SET titolo=%s, testo_breve=%s, testo_intero=%s, foto_a=%s, foto_b=%s WHERE id=%s",
    GetSQLValueString($_POST['titolo'], "text"),
    GetSQLValueString($_POST['testo_breve'], "text"),
    GetSQLValueString($_POST['testo_intero'], "text"),
    GetSQLValueString($_FILES['foto_a']['name'], "text"),
    GetSQLValueString($_FILES['foto_b']['name'], "text"),
    GetSQLValueString($_POST['id'], "int"));

    $cartella = '../foto/';
    $percorso = $_FILES['foto_a']['tmp_name'];
    $nome = $_FILES['foto_a']['name'];
    
    move_uploaded_file($percorso, $cartella . $nome);
    

    mysql_select_db($database_ZilliDB, $ZilliDB);
    $Result1 = mysql_query($updateSQL, $ZilliDB) or die(mysql_error());

    $updateGoTo = "../admin/admin_opinioni.php";
    if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
    }
    header(sprintf("Location: %s", $updateGoTo));
    }

    $colname_modifica_opinioni = "-1";
    if (isset($_GET['id'])) {
    $colname_modifica_opinioni = $_GET['id'];
    }
    mysql_select_db($database_ZilliDB, $ZilliDB);
    $query_modifica_opinioni = sprintf("SELECT * FROM opinioni WHERE id = %s", GetSQLValueString($colname_modifica_opinioni, "int"));
    $modifica_opinioni = mysql_query($query_modifica_opinioni, $ZilliDB) or die(mysql_error());
    $row_modifica_opinioni = mysql_fetch_assoc($modifica_opinioni);
    $totalRows_modifica_opinioni = mysql_num_rows($modifica_opinioni);
    ob_end_flush();
    ?>
    [/PHP]


  • User Newbie

    si, esatto.. prima mi dava l'errore per il header... Pero' ora nacora non funziona... mi salva la prima volta la foto/immagine pero' appena vadfo la seconda volta per fare delle correzioni al testo.. do "salva modifiche" di nuovo mi salva "spazio vuoto" nel db 😞

    dai che forse ce la facciamo...
    Comunque grazie per l'impegno...