- Home
- Categorie
- Coding e Sistemistica
- PHP
- Form upload immagine e modifica
-
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'
Ciao GraziePatpat
-
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']);
-
Caspita mille grazie! Ora è tutto ok, se viene inserita una nuova immagine registro il cambio altrimenti non devo fare proprio nulla!
Ciao
Patpat
-
@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']);
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?
-
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!
}
?>
-
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
-
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]
-
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...