aggiornamento record combobox e campo foto

Ciao a tutti , ho un problema con una pagina di aggiornamento dati, i campi input di tipo text funzionano perfettamente, invece quelli dove ci sono i combobox per selezionare categoria e sottocategoria si resettano e lo stesso vale anche per il campo file dove si carica la foto.

Come posso risolvere questo problema? grazie.

inviato 6 anni fa
cloude
X 0 X

Ciao,

non ho capito bene il problema, puoi essere più preciso sul quando e il come avviene questo reset e possibilmente postare il codice che ti da problemi?

dovrebbe bastare solo la parte dove si trova il form ed eventualmente il codice php che effettua l'aggiornamento.

risposto 6 anni fa
Giacomov
X 0 X

Grazie mille per la risposta.

Dunque il reset avviene quando cerco di modificare un prodotto, il combobox della categoria e della sottocategoria torna su 'Seleziona Categoria' e il campo file dell'immagine è vuoto, quindi va ricaricata l'immagine altrimenti sul database mi stampa il valore NULL.

il codice che effettua l'aggiornamento è il seguente:

<?php require_once('Connections/conn.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $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 prodotti SET id_menu=%s, id_sottomenu=%s, titolo=%s, codice=%s, lin=%s, foto=%s, varianti=%s WHERE id=%s",
                       GetSQLValueString($_POST['id_menu'], "text"),
                       GetSQLValueString($_POST['id_sottomenu'], "text"),
                       GetSQLValueString($_POST['titolo'], "text"),
                       GetSQLValueString($_POST['codice'], "text"),
                       GetSQLValueString($_POST['lin'], "text"),
                  GetSQLValueString($_FILES['foto']['name'], "text"),
                  GetSQLValueString($_FILES['varianti']['name'], "text"),
                       GetSQLValueString($_POST['id'], "int"));

  mysql_select_db($database_conn, $conn);
  $Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());

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

//upload image 
eliminato per semplificare


mysql_select_db($database_conn, $conn);
$query_rs_menu = "SELECT * FROM menu ORDER BY nome_menu ASC";
$rs_menu = mysql_query($query_rs_menu, $conn) or die(mysql_error());
$row_rs_menu = mysql_fetch_assoc($rs_menu);
$totalRows_rs_menu = mysql_num_rows($rs_menu);

$colname_rs_aggiorna_prodotto = "-1";
if (isset($_GET['id'])) {
  $colname_rs_aggiorna_prodotto = $_GET['id'];
}
mysql_select_db($database_conn, $conn);
$query_rs_aggiorna_prodotto = sprintf("SELECT * FROM prodotti WHERE id = %s", GetSQLValueString($colname_rs_aggiorna_prodotto, "int"));
$rs_aggiorna_prodotto = mysql_query($query_rs_aggiorna_prodotto, $conn) or die(mysql_error());
$row_rs_aggiorna_prodotto = mysql_fetch_assoc($rs_aggiorna_prodotto);
$totalRows_rs_aggiorna_prodotto = mysql_num_rows($rs_aggiorna_prodotto);
?>

e poi questo è il codice del form

<form action="<?php echo $editFormAction; ?>" method="POST" enctype="multipart/form-data" name="form1" id="form1">
      <table width="653" align="center" cellspacing="15">
        <tr valign="baseline">
          <td width="580"><table width="700" align="center" cellspacing="15">
            <tr valign="baseline">
              <td align="right" nowrap="nowrap" class="testoPRODOTTI">&nbsp;</td>
              <td><span class="testoPRODOTTI">Aggiorna Prodotto</span></td>
            </tr>
            <tr valign="baseline">
 <td align="right" nowrap="nowrap" class="testoPRODOTTI">Categoria:</td>               <td width="480"><span id="spryselect1">
                <label>
                  <select name="id_menu" id="id_menu" title="<?php echo $row_rs_aggiorna_prodotto['id_menu']; ?>">
                    <option value="">Seleziona una Categoria</option>
                    <?php
do {  
?>
                    <option value="<?php echo $row_rs_menu['id']?>"><?php echo $row_rs_menu['nome_menu']?></option>
                    <?php
} while ($row_rs_menu = mysql_fetch_assoc($rs_menu));
  $rows = mysql_num_rows($rs_menu);
  if($rows > 0) {
      mysql_data_seek($rs_menu, 0);
     $row_rs_menu = mysql_fetch_assoc($rs_menu);
  }
?>
                  </select>
                </label>
                <span class="selectRequiredMsg">Seleziona una Categoria.</span></span></td> 
          </tr> 
          <tr valign="baseline"> 
            <td align="right" nowrap="nowrap" class="testoPRODOTTI">Tipologia:</td> 
            <td><label for="id_sottomenu"></label>
              <span id="spryselect2">
              <label>
              
                <?php
mysql_select_db($database_conn, $conn);
$query_rs_sottomenu = "SELECT sottomenu.id, menu.nome_menu, sottomenu.sottomenu FROM menu JOIN sottomenu ON menu.id = sottomenu.id_menu ORDER BY sottomenu ASC" ;
$rs_sottomenu = mysql_query($query_rs_sottomenu, $conn) or die(mysql_error());
?>
                <select name="id_sottomenu" id="id_sottomenu" title="<?php echo $row_rs_aggiorna_prodotto['id_sottomenu']; ?>">
                  <option value="" selected="selected">Seleziona una Tipologia</option>
                  <?php
    while ($row_rs_sottomenu = mysql_fetch_assoc($rs_sottomenu)) {  
        echo "<option value=\"{$row_rs_sottomenu['id']}\">{$row_rs_sottomenu['sottomenu']} >>> {$row_rs_sottomenu['nome_menu']}</option>\n";
    } 
    ?>
                </select>
              </label>
              <span class="selectRequiredMsg">Seleziona una Tipologia</span></span></td>
            </tr>
            <tr valign="baseline">
              <td align="right" nowrap="nowrap" class="testoPRODOTTI">Codice:</td>
              <td><span id="sprytextfield1">
                <input name="codice" type="text" id="codice" value="<?php echo $row_rs_aggiorna_prodotto['codice']; ?>" size="50" />
                <span class="textfieldRequiredMsg">Inserisci un codice</span></span></td>
            </tr>
            <tr valign="baseline">
              <td align="right" nowrap="nowrap" class="testoPRODOTTI">Prodotto:</td>
              <td><span id="sprytextarea1">
              <textarea name="titolo" cols="50" rows="20" id="titolo" type="text" value= />
              <?php echo $row_rs_aggiorna_prodotto['titolo']; ?>
              </textarea>
              <span class="textareaRequiredMsg">Inserisci un prodotto</span></span></td>
            </tr>
            <tr valign="baseline">
              <td align="right" nowrap="nowrap" class="testoPRODOTTI">Lin:</td>
              <td><label for="lin"></label>
                <input name="lin" type="text" id="lin" value="<?php echo $row_rs_aggiorna_prodotto['lin']; ?>" size="50" /></td>
            </tr>
            <tr valign="baseline" class="testoschedaverde">
              <td align="right" valign="baseline" nowrap="nowrap" class="testoPRODOTTI">Foto:</td>
              <td align="left" valign="middle"><label> </label>
                <span id="sprytextfield3">
                  <label>
                    <input type="file" name="foto" value="<?php echo $row_rs_aggiorna_prodotto['foto']; ?>" size="32" />
                  </label>
<span class="textfieldRequiredMsg">Inserisci una Foto</span></span></td>
            </tr>
            <tr valign="baseline">
              <td align="right" nowrap="nowrap" class="testoPRODOTTI"><span class="testoCATEGORIA">Varianti:</span></td>
              <td><input name="varianti" type="file" id="varianti" value="<?php echo $row_rs_aggiorna_prodotto['varianti']; ?>" size="32" /></td>
            </tr>
            <tr valign="baseline">
              <td nowrap="nowrap" align="right">&nbsp;</td>
              <td><input type="submit" value="Aggiorna prodotto" /></td>
            </tr>
          </table>            <label></label></td>
        </tr>
        </table>
        <input type="hidden" name="id" value="<?php echo $row_rs_aggiorna_prodotto['id']; ?>" />
        <input type="hidden" name="MM_update" value="form1" />
      </form>
risposto 6 anni fa
cloude
X 0 X

Quando vai a popolare le select e i campi devi fare un controllo per stampare la stringa 'selected="selected"' all'interno delle option, il problema qui dovrebbe essere solo questo.

Per la foto potrebbe dipendere da come gestisci il salvataggio della foto, perché l'html mi sembra corretto (l'unica cosa che non mi torna è la size settata nella input)

spero di esserti stato utile.

Ciao.

risposto 6 anni fa
Giacomov
X 0 X

Potresti farmi un esempio di come stampare la stringa selected nelle option, te ne sarei davvero grato  ^-^

risposto 6 anni fa
cloude
X 0 X

Ciao, ho ripreso la parte del tuo codice dove tratti la tipologia, io proverei a fare così, ma non so se le variabili che sto considerando sono quelle giuste...

<td align="right" nowrap="nowrap" class="testoPRODOTTI">Tipologia:</td> 
<td>
    <label for="id_sottomenu"></label>
    <span id="spryselect2">
        <label>
        
            <?php
                mysql_select_db($database_conn, $conn);
                $query_rs_sottomenu = "SELECT sottomenu.id, menu.nome_menu, sottomenu.sottomenu FROM menu JOIN sottomenu ON menu.id = sottomenu.id_menu ORDER BY sottomenu ASC" ;
                $rs_sottomenu = mysql_query($query_rs_sottomenu, $conn) or die(mysql_error());
            ?>
            <select name="id_sottomenu" id="id_sottomenu" title="<?php echo $row_rs_aggiorna_prodotto['id_sottomenu']; ?>">
            
            <?php // inizio parte modificata // ?>
                <option value="" <?php
                                    // se non esiste l'elemento id_sottomenu della row fetchata lo metto vuoto
                                    if (!isset($row_rs_aggiorna_prodotto['id_sottomenu'])){ $row_rs_aggiorna_prodotto['id_sottomenu']=''; }
                                    // se non hai la tipologia dell'oggetto che stai aggiornando seleziona il value vuoto
                                    if ($row_rs_aggiorna_prodotto['id_sottomenu']==''){ echo 'selected="selected"'; }
                                 ?>
                    >Seleziona una Tipologia</option>
            <?php
                while ($row_rs_sottomenu = mysql_fetch_assoc($rs_sottomenu)) {  
                    echo "<option value=\"{$row_rs_sottomenu['id']}\"";
                    // se l'id dell'oggetto corrisponde all'id del row in esame seleziono questa option
                    if ($row_rs_aggiorna_prodotto['id_sottomenu']==$row_rs_sottomenu['id']){
                        echo 'selected="selected"';
                    }
                    echo ">{$row_rs_sottomenu['sottomenu']} >>> {$row_rs_sottomenu['nome_menu']}</option>\n";
                } 
            ?>
            <?php // fine parte modificata // ?>
            </select>
        </label>
        <span class="selectRequiredMsg">Seleziona una Tipologia</span>
    </span>
</td>
risposto 6 anni fa
Giacomov
X 0 X

Grande funziona ti ringrazio tantissimo!  :D

Ora dovrei fare la stessa cosa anche per la prima categoria, ho provato così però non và.

<select name="id_menu" id="id_menu" title="<?php echo $row_rs_aggiorna_prodotto['id_menu']; ?>">
     <?php // inizio parte modificata // ?>
     <option value="" <?php
                                    // se non esiste l'elemento id_sottomenu della row fetchata lo metto vuoto
                                    if (!isset($row_rs_aggiorna_prodotto['id_menu'])){ $row_rs_aggiorna_prodotto['id_menu']=''; }
                                    // se non hai la tipologia dell'oggetto che stai aggiornando seleziona il value vuoto
                                    if ($row_rs_aggiorna_prodotto['id_menu']==''){ echo 'selected="selected"'; }
                                 ?>
                    >Seleziona una Categoria</option>
     <?php
                while ($row_rs_menu = mysql_fetch_assoc($rs_menu)) {  
                    echo "<option value=\"{$row_rs_menu['id']}\"";
                    // se l'id dell'oggetto corrisponde all'id del row in esame seleziono questa option
                    if ($row_rs_aggiorna_prodotto['id_menu']==$row_rs_menu['id']){
                        echo 'selected="selected"';
                    }
                    echo ">{$row_rs_menu['menu']}</option>\n";
                } 
            ?>
     <?php // fine parte modificata // ?>
   </select>
risposto 6 anni fa
cloude
X 0 X

Funziona adesso! sbagliavo perchè non facevo l'estrazione dal database in questo modo:

<?php
                mysql_select_db($database_conn, $conn);
                $query_rs_menu = "SELECT menu.id, menu.nome_menu FROM menu ORDER BY nome_menu ASC" ;
                $rs_menu = mysql_query($query_rs_menu, $conn) or die(mysql_error());
            ?>

Grazie ancora Giacomo!

già mi hai aiutato tantissimo non vorrei assillare ancora però per le foto come posso fare? questo è l'upload delle immagini

// UPLOAD DEL FILE

$idir = "image_files/"; // Path To Images Directory 
$tdir = "image_files/thumbs/"; // Path To Thumbnails Directory 
$idir2 = "image_files/varianti/"; // Path To Images Directory 
$tdir2 = "image_files/varianti/thumbs/"; // Path To Thumbnails Directory 
$twidth = "120"; // Maximum Width For Thumbnail Images 
$theight = "125"; // Maximum Height For Thumbnail Images 

$url = $_FILES['foto']['name']; // Set $url To Equal The Filename For Later Use 
if ($_FILES['foto']['type'] == "image/jpg" || $_FILES['foto']['type'] == "image/jpeg" || $_FILES['foto']['type'] == "image/pjpeg") { 
$file_ext = strrchr($_FILES['foto']['name'], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php 
$copy = move_uploaded_file($_FILES['foto']['tmp_name'], "$idir" . $_FILES['foto']['name']); // Move Image From Temporary Location To Permanent Location 
if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location 
print '. <font color="#FFFFFF">';// Was Able To Successfully Upload Image 
$simg = imagecreatefromjpeg("$idir" . $url); // Make A New Temporary Image To Create The Thumbanil From 
$currwidth = imagesx($simg); // Current Image Width 
$currheight = imagesy($simg); // Current Image Height 
if ($currheight > $currwidth) { // If Height Is Greater Than Width 
$zoom = $twidth / $currheight; // Length Ratio For Width 

$newheight = $theight; // Height Is Equal To Max Height 
$newwidth = $currwidth * $zoom; // Creates The New Width 
} else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height) 
$zoom = $twidth / $currwidth; // Length Ratio For Height 
$newwidth = $twidth; // Width Is Equal To Max Width 
$newheight = $currheight * $zoom; // Creates The New Height 
} 
$dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail 
imagetruecolortopalette($simg, false, 256); // Create New Color Pallete 
$palsize = ImageColorsTotal($simg); 
for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image 
$colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used 
ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use 
} 
imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It) 
imagejpeg($dimg, "$tdir" . $url); // Saving The Image 
imagedestroy($simg); // Destroying The Temporary Image 
imagedestroy($dimg); // Destroying The Other Temporary Image 
print 'Prodotto inserito con SUCCESSO <font color="#FFFFFF">'; // Resize successful 
} else { 
print '<font color="#FFFFFF">Errore riprova ad inserire il prodotto</font>'; // Error Message If Upload Failed 
} 
}


$url2 = $_FILES['varianti']['name']; // Set $url2 To Equal The Filename For Later Use 
if ($_FILES['varianti']['type'] == "image/jpg" || $_FILES['varianti']['type'] == "image/jpeg" || $_FILES['varianti']['type'] == "image/pjpeg") { 
$file_ext = strrchr($_FILES['varianti']['name'], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php 
$copy = move_uploaded_file($_FILES['varianti']['tmp_name'], "$idir2" . $_FILES['varianti']['name']); // Move Image From Temporary Location To Permanent Location 
if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location 
print '. <font color="#FFFFFF">';// Was Able To Successfully Upload Image 
$simg = imagecreatefromjpeg("$idir2" . $url2); // Make A New Temporary Image To Create The Thumbanil From 
$currwidth = imagesx($simg); // Current Image Width 
$currheight = imagesy($simg); // Current Image Height 
if ($currheight > $currwidth) { // If Height Is Greater Than Width 
$zoom = $twidth / $currheight; // Length Ratio For Width 

$newheight = $theight; // Height Is Equal To Max Height 
$newwidth = $currwidth * $zoom; // Creates The New Width 
} else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height) 
$zoom = $twidth / $currwidth; // Length Ratio For Height 
$newwidth = $twidth; // Width Is Equal To Max Width 
$newheight = $currheight * $zoom; // Creates The New Height 
} 
$dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail 
imagetruecolortopalette($simg, false, 256); // Create New Color Pallete 
$palsize = ImageColorsTotal($simg); 
for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image 
$colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used 
ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use 
} 
imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It) 
imagejpeg($dimg, "$tdir2" . $url2); // Saving The Image 
imagedestroy($simg); // Destroying The Temporary Image 
imagedestroy($dimg); // Destroying The Other Temporary Image 
print 'Prodotto inserito con SUCCESSO <font color="#FFFFFF">'; // Resize successful 
} else { 
print '<font color="#FFFFFF">Errore riprova ad inserire il prodotto</font>'; // Error Message If Upload Failed 
} 
}

$colname_rs_aggiorna_prodotto = "-1";
if (isset($_GET['id'])) {
  $colname_rs_aggiorna_prodotto = $_GET['id'];
}
mysql_select_db($database_conn, $conn);
$query_rs_aggiorna_prodotto = sprintf("SELECT * FROM prodotti WHERE id = %s", GetSQLValueString($colname_rs_aggiorna_prodotto, "int"));
$rs_aggiorna_prodotto = mysql_query($query_rs_aggiorna_prodotto, $conn) or die(mysql_error());
$row_rs_aggiorna_prodotto = mysql_fetch_assoc($rs_aggiorna_prodotto);
$totalRows_rs_aggiorna_prodotto = mysql_num_rows($rs_aggiorna_prodotto);

?>
risposto 6 anni fa
cloude
modificato 6 anni fa
X 0 X

@cloude

Se è un problema separato apri una discussione specifia  O0

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

L'avevo già specificato nel titolo del topic,combobox e foto, in effetti riguarda sempre la questione aggiornamento, devo comunque aprirne un'altra?

risposto 6 anni fa
cloude
X 0 X

No se è quello che hai chiesto all'inizio. Prossima volta vediamo di mantenere di problemi separati.

Puoi indentare meglio l'ultimo codice che ci hai dato ed usare il tag php di bbcode per colorarlo?

L'immagine viene correttamente caricata sul server?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

ok la prossima volta starò più attento.

Si l'immagine viene caricata correttamente, il problema è identico a quello dei combobox, praticamente quando vado nella pagina di aggiornamento il campo file non lascia il 'path' dell'immagine se già c'è, lo toglie e quindi devo ricaricare la foto.

questo è il codice per l'estrazione

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE prodotti SET id_menu=%s, id_sottomenu=%s, titolo=%s, codice=%s, lin=%s, foto=%s, varianti=%s WHERE id=%s",
                       GetSQLValueString($_POST['id_menu'], "text"),
                       GetSQLValueString($_POST['id_sottomenu'], "text"),
                       GetSQLValueString($_POST['titolo'], "text"),
                       GetSQLValueString($_POST['codice'], "text"),
                       GetSQLValueString($_POST['lin'], "text"),
                  GetSQLValueString($_FILES['foto']['name'], "text"),
                  GetSQLValueString($_FILES['varianti']['name'], "text"),
                       GetSQLValueString($_POST['id'], "int"));

  mysql_select_db($database_conn, $conn);
  $Result1 = mysql_query($updateSQL, $conn) or die(mysql_error());

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

// UPLOAD DEL FILE

$idir = "image_files/"; // Path To Images Directory 
$tdir = "image_files/thumbs/"; // Path To Thumbnails Directory 
$idir2 = "image_files/varianti/"; // Path To Images Directory 
$tdir2 = "image_files/varianti/thumbs/"; // Path To Thumbnails Directory 
$twidth = "120"; // Maximum Width For Thumbnail Images 
$theight = "125"; // Maximum Height For Thumbnail Images 

$url = $_FILES['foto']['name']; // Set $url To Equal The Filename For Later Use 
if ($_FILES['foto']['type'] == "image/jpg" || $_FILES['foto']['type'] == "image/jpeg" || $_FILES['foto']['type'] == "image/pjpeg") { 
    $file_ext = strrchr($_FILES['foto']['name'], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php 
    $copy = move_uploaded_file($_FILES['foto']['tmp_name'], "$idir" . $_FILES['foto']['name']); // Move Image From Temporary Location To Permanent Location 
    if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location 
        print '. <font color="#FFFFFF">';// Was Able To Successfully Upload Image 
        $simg = imagecreatefromjpeg("$idir" . $url); // Make A New Temporary Image To Create The Thumbanil From 
        $currwidth = imagesx($simg); // Current Image Width 
        $currheight = imagesy($simg); // Current Image Height 
        if ($currheight > $currwidth) { // If Height Is Greater Than Width 
            $zoom = $twidth / $currheight; // Length Ratio For Width 

            $newheight = $theight; // Height Is Equal To Max Height 
            $newwidth = $currwidth * $zoom; // Creates The New Width 
        } else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height) 
            $zoom = $twidth / $currwidth; // Length Ratio For Height 
            $newwidth = $twidth; // Width Is Equal To Max Width 
            $newheight = $currheight * $zoom; // Creates The New Height 
        } 
        $dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail 
        imagetruecolortopalette($simg, false, 256); // Create New Color Pallete 
        $palsize = ImageColorsTotal($simg); 
        for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image 
            $colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used 
            ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image     Will Use 
        } 
        imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It) 
        imagejpeg($dimg, "$tdir" . $url); // Saving The Image 
        imagedestroy($simg); // Destroying The Temporary Image 
        imagedestroy($dimg); // Destroying The Other Temporary Image 
        print 'Prodotto inserito con SUCCESSO <font color="#FFFFFF">'; // Resize successful 
    } else { 
        print '<font color="#FFFFFF">Errore riprova ad inserire il prodotto</font>'; // Error Message If Upload Failed 
    } 
}


$url2 = $_FILES['varianti']['name']; // Set $url2 To Equal The Filename For Later Use 
if ($_FILES['varianti']['type'] == "image/jpg" || $_FILES['varianti']['type'] == "image/jpeg" || $_FILES['varianti']['type'] == "image/pjpeg") { 
    $file_ext = strrchr($_FILES['varianti']['name'], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php 
    $copy = move_uploaded_file($_FILES['varianti']['tmp_name'], "$idir2" . $_FILES['varianti']['name']); // Move Image From Temporary Location To Permanent Location 
    if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location 
        print '. <font color="#FFFFFF">';// Was Able To Successfully Upload Image 
        $simg = imagecreatefromjpeg("$idir2" . $url2); // Make A New Temporary Image To Create The Thumbanil From 
        $currwidth = imagesx($simg); // Current Image Width 
        $currheight = imagesy($simg); // Current Image Height 
        if ($currheight > $currwidth) { // If Height Is Greater Than Width 
            $zoom = $twidth / $currheight; // Length Ratio For Width 

            $newheight = $theight; // Height Is Equal To Max Height 
            $newwidth = $currwidth * $zoom; // Creates The New Width 
        } else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height) 
            $zoom = $twidth / $currwidth; // Length Ratio For Height 
            $newwidth = $twidth; // Width Is Equal To Max Width 
            $newheight = $currheight * $zoom; // Creates The New Height 
        } 
        $dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail 
        imagetruecolortopalette($simg, false, 256); // Create New Color Pallete 
        $palsize = ImageColorsTotal($simg); 
        for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image 
            $colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used 
            ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use 
        } 
        imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It) 
        imagejpeg($dimg, "$tdir2" . $url2); // Saving The Image 
        imagedestroy($simg); // Destroying The Temporary Image 
        imagedestroy($dimg); // Destroying The Other Temporary Image 
        print 'Prodotto inserito con SUCCESSO <font color="#FFFFFF">'; // Resize successful 
    } else { 
        print '<font color="#FFFFFF">Errore riprova ad inserire il prodotto</font>'; // Error Message If Upload Failed 
    } 
}

$colname_rs_aggiorna_prodotto = "-1";
if (isset($_GET['id'])) {
  $colname_rs_aggiorna_prodotto = $_GET['id'];
}
mysql_select_db($database_conn, $conn);
$query_rs_aggiorna_prodotto = sprintf("SELECT * FROM prodotti WHERE id = %s", GetSQLValueString($colname_rs_aggiorna_prodotto, "int"));
$rs_aggiorna_prodotto = mysql_query($query_rs_aggiorna_prodotto, $conn) or die(mysql_error());
$row_rs_aggiorna_prodotto = mysql_fetch_assoc($rs_aggiorna_prodotto);
$totalRows_rs_aggiorna_prodotto = mysql_num_rows($rs_aggiorna_prodotto);
?>

questo è il form, la parte riguardante le immagini

       <label>
                    <input type="file" name="foto" value="<?php echo $row_rs_aggiorna_prodotto['foto']; ?>" size="32" />
                  </label>
<span class="textfieldRequiredMsg">Inserisci una Foto</span></span></td>
            </tr>
            <tr valign="baseline">
              <td align="right" nowrap="nowrap" class="testoPRODOTTI"><span class="testoCATEGORIA">Varianti:</span></td>
              <td><input name="varianti" type="file" id="varianti" value="<?php echo $row_rs_aggiorna_prodotto['varianti']; ?>" size="32" /></td>
            </tr>
risposto 6 anni fa
cloude
modificato 6 anni fa
Mario Santagiuliana
X 0 X

Se l'upload dell'immagine è avvenuto in modo corretto perchè reinviarla una seconda volta?

Comunque, a me il codice ad occhio sembra corretto. Il valore che ti viene restituito (che sia vuoto o meno) corrisponde al valore presente nel database?

P.S. ti avevo chiesto di indentare un po' il codice...te l'ho fatto io, così è leggermente più leggibile. Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Si quello è il punto, l'immagine viene caricata correttamente, però quando voglio aggiornare un record l'immagine del campo file , non c'è , e quindi devo ricaricarla di nuovo, altrimenti nel database mi stampa un valore NULL, me la cancella in pratica.

p.s. grazie per la modifica.

risposto 6 anni fa
cloude
modificato 6 anni fa
X 0 X

Ripeto:

Il valore che ti viene restituito (che sia vuoto o meno) corrisponde al valore presente nel database?

Il valore che ti viene restituito nel form.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

No perchè quando una volta cliccato su aggiorna record, il path dell'immagine viene cancellato e sostituito con NULL.

Nel mio caso però ho "selectRequiredMsg" per forzare il caricamento dell'immagine obbligatoria, però se la tolgo e imposto sul database il campo foto come 'null' , se non carico l'immagine di nuovo, appunto mi stampa il valore NULL, ed elimina il path dell'immagine, invece nel mio caso avendo la richiesta di immagine obbligatoria, va ricaricata di nuovo per procedere con l'aggiornamento.

Non so se è quello a cui ti riferivi.

risposto 6 anni fa
cloude
modificato 6 anni fa
X 0 X

No, non hai capito.

Compili il form, invii i dati, i dati vengono inseriti nel database, il form viene ricompilato dal php.

I dati presenti nel form ricompilato e quelli presenti nel database corrispondono o sono sempre nulli?

Hai detto che i file vengono correttamente caricati nel server dunque cosa viene salvato nel database?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Dunque quando apro la pagina di aggiornamento i dati presenti nel form ricompilato dal php, sono tutti uguali a quello del database, titolo, codice, ed anche la categoria e sottocategoria come mi aveva spiegato precedentemente Giacomo,che ringrazio ancora, questi ultimi quando effettuo l'aggiornamento se non vengono modificati restano intatti, invece il campo file no, richiede di nuovo il caricamento della foto altrimenti stampa il valore NULL, ma solo in questo campo qui, gli altri vanno perfettamente.

risposto 6 anni fa
cloude
X 0 X

Nel database il campo è corretto?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Scusami se sono di coccio  ::)   che intendi per  'nel database il campo è corretto?" . Se la foto non la ricarico, quando clicco su aggiorna record ,nel campo 'foto' del database viene scritta la parola NULL.  

risposto 6 anni fa
cloude
X 0 X

No quando fai l'aggiornamento!!!

Invii i tuoi dati e fin qui è tutto ok, nel database i campi dei file sono corretti?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

che ottuso proprio non capivo ;D  si si va tutto bene, la foto la carica correttamente, nel database nel campo foto mi stampa correttamente il path, e nel sito la foto la vedo, sia il miniatura che quella normale.

risposto 6 anni fa
cloude
X 0 X

Oh bene. Nella tabella "prodotti" c'è un campo "foto" e un campo "varianti"?

Il codice html che viene prodotto è esattamente così?

        <label>
                    <input type="file" name="foto" value="" size="32" />
                  </label>
<span class="textfieldRequiredMsg">Inserisci una Foto</span></span></td>
            </tr>
            <tr valign="baseline">
              <td align="right" nowrap="nowrap" class="testoPRODOTTI"><span class="testoCATEGORIA">Varianti:</span></td>
              <td><input name="varianti" type="file" id="varianti" value="" size="32" /></td>
            </tr>
risposto 6 anni fa
Mario Santagiuliana
X 0 X

si sono entrambi 'campi file' ,perciò è scocciante, sarebbero due le foto che andrebbero ricaricate.  :(

il codice html si è quello.

risposto 6 anni fa
cloude
X 0 X

Allora se il nome dei campi delle tabelle sono foto e varianti l'output dovrebbe avvenire in modo corretto.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Non vorrei dire una sciocchezza, ma non è dovrebbe esserci un codice tipo come per i combobox, che deve prima verificare se il campo contiene qualcosa?

risposto 6 anni fa
cloude
X 0 X

Te l'ho chiesto prima...se hai già inserito delle immagini perchè dover fare di nuovo l'upload?

Piuttosto verificherei se l'utente non ha inserito un path differente da quello che era impostato prima e in tal caso eseguo l'aggiornamento anche dei file, se no niente.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Hai ragione l'upload non lo dovrei far di nuovo però se volessi stampare solo il path non fa la stessa cosa?

Però poi c'è un problema, se elimino la parte dell'upload, se il cliente vuole aggiornare l'immagine? mi cambierebbe solo il path senza caricare la foto.

Spiego meglio il problema:

Dunque se io ho il form di dati inserimento ed inserisco:

codice:          001

menu:          combobox seleziono: bottoni

sottomenu:  combobox seleziono: bottoni >>> madreperla

titolo:           bottone in madreperla 10mm

foto:            001.jpg (carico la foto)

variante:      001var.jpg (carico la seconda foto)

e clicco inserisci record, va tutto alla perfezione.

ora se il prodotto lo voglio aggiornare , ad esempio cambiare alcune cose nel titolo

il form mi restituisce

codice:          campo input resta selezionato: 001

menu:          combobox resta selezionato: bottoni

sottomenu:  combobox resta selezionato: bottoni >>> madreperla

titolo:           bottone in madreperla 5mm - 10mm - 15mm

foto:            

variante:

il problema sta che il path non c'è più e se non ricarico la foto,l'immagine non si vedrà, e nel database il path verrà sostituto con un valore NULL.

spero di essermi spiegato meglio.

risposto 6 anni fa
cloude
modificato 6 anni fa
X 0 X

Nel database semplicemente eviti di fare l'aggiornamento del campo, non assumerà così il valore null, aggiorni tutto il resto.

Ora quello che continuo a domandarmi, nel tuo database tabella prodotti campo foto c'è 001.jpg? Se si mi chiedo come mai il tuo output non presenta tale valore estratto. (idem per quanto riguarda variante).

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ho capito cosa intendi, praticamente dovrei proprio toglierlo l'aggiornamento della foto,così non mi cancella il path.

Al limite poi potrei fare una pagina a parte dove è possibile aggiornare le foto, se l'utente ha l'intezione di cambiarle.

Si nel database c'è ad esempio 001.jpeg però nell'output non presenta il valore, questo appunto non riesco a spiegarmelo, però c'è da dire una cosa, se sostituisco il 'campo file' con un campo input, il valore esce.

risposto 6 anni fa
cloude
X 0 X

Ho provato ad eliminare l'aggiornamento delle foto, però nel database mi stampa comunque un valore vuoto, eliminandomi il path.  :(

risposto 6 anni fa
cloude
X 0 X

Che pirla...non ci ho pensato. Per forza non ti viene il valore: non si possono impostare dei valori predefiniti nell'input di tipo file.

Ti consiglio di fare una cosa: nella creazione del form per l'aggiornamento, prima dell'input del percorso del file da caricare visualizza il vecchio path e indica all'utente che se vuole aggiornarlo basta che lo inserisce nuovamente, altrimenti che lasci il campo vuoto.

Quando ricevi i tuoi dati dal form fai i dovuti controlli delle cose che hai ricevuto. Nel caso il path di foto e variante sia nullo semplicemente nella tua query eviti di aggiornare quei due campi, aggiorni tutti gli altri e basta. (In altre parole costruisci la tua query in base ai campi che devi aggiornare e poi la esegui).

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Sicuramente il metodo come hai detto sarà più professionale, però non saprei nemmeno da dove cominciare  ;D

Diciamo che ho risolto diversamente, forse nel modo più grezzo che c'è  ::)

Comunque voglio ringraziarVi per l'aiuto siete stati gentilissimi!.

risposto 6 anni fa
cloude
X 0 X

Non è il metodo più professionale, è un metodo e secondo me segue una logica. Non è nemmeno di difficile attuazione, si tratta semplicemente di tradurre il linguaggio logico in linguaggio php e sql, niente di più niente di meno.

ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Capito, però per me quello che per te è semplice da fare, per me è una cosa complicatissima, diciamo che dilettante è dir poco  :-\

Comunque ho risolto in questo modo:

quando l'utente effettua la ricerca del prodotto da aggiornare:

cerca: 001

la ricerca da i seguenti risultati:

prodoto trovato 001     >> e qui  ho messo due submit, il primo 'aggiorna prodotto'

                                    >> il secondo submit, 'aggiorna prodotto e foto'

nel primo ho lasciato i campi come 'input' in modalità 'solo lettura'

e nel secondo ho lasciato i campi file per poter effettuare di nuovo l'upload delle foto.

risposto 6 anni fa
cloude
X 0 X
per me è una cosa complicatissima

Se fare due semplici controlli sui dati in ricezione è difficile, stiamo freschi...si tratta semplicemente di ragionare e sfruttare gli strumenti che si hanno a disposizione...non mi sembra complicato.

Comunque una soluzione vale l'altra.

 :bye:

risposto 6 anni fa
Mario Santagiuliana
X 0 X

potrei essermi perso nelle ultime due pagine e dire una cavolata...

non conviene stampare sempre valore nullo nelle input delle immagini e andare a mettere un controllo al momento dell'update che effettua l'aggiornamento dei campi del file solo se il valore non è vuoto?

risposto 6 anni fa
Giacomov
X 0 X

@giacomov

Io fare la stessa identica cosa. Non ne vedo l'utilità di salvare il path in cui si trova il file dell'utente sul suo pc.

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ma il path a cui mi riferivo che mi stampa nel database non è il percorso completo del pc dell'utente, tipo c:\programmi\images\001.jpg   ma mi stampa solo l'estensione della foto cioè 001.jpg

risposto 6 anni fa
cloude
X 0 X

non credo che all'utente serva sapere come viene chiamato il file, non ha quindi senso riportare il dato e ciò ti facilita il lavoro, poiché invece che controllare se il campo 'nomefile' è lo stesso che hai in database ti basta controllare che non sia vuoto per fare l'aggiornamento.

risposto 6 anni fa
Giacomov
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda