PHP Update immagine di un utente

Nickname

Utente Attivo
18 Set 2013
122
0
0
Salve a tutti, avrei un problema molto urgente.
Ultimamente ho creato un sito dove ho dato la possibilità agli utenti di caricare una propria immagine del profilo e anche un pdf.

Ora però vorrei che gli utenti, in un secondo momento, potessero modificare quest'immagine con un'altra.
Le immagini, che gli utenti caricano inizialmente, vengono salvate in un database:
id nome foto
1 Luca luca.jpg

E ovviamente in una cartella chiamata uploadimg/
Come posso fare in modo che l'utente possa caricare una nuova immagine e che questa sovrascriva la precedente?
Vi prego è molto urgente, so di aver già fatto questa domanda più volte ma non ho ancora risolto il problema.
Grazie a tutti.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, puoi semplicemente cambiare il campo foto con il nome di una nuova foto caricata
fai prima una SELECT per vedere se l'utente è già presente, se non è presente fai l'INSERT altrimenti FAI un UPDATE
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
Ciao, puoi semplicemente cambiare il campo foto con il nome di una nuova foto caricata
fai prima una SELECT per vedere se l'utente è già presente, se non è presente fai l'INSERT altrimenti FAI un UPDATE

Innanzitutto grazie per avermi risposto; potresti farmi un esempio?
Eventualmente potresti dirmi anche come si può fare in modo che l'utente possa cancellare la propria immagine ?
 

powerflash

Nuovo Utente
28 Apr 2013
11
0
0
www.blooweb.it
come dice criric, fai il SELECT per vedere se ha un'immagine (quindi ne approfitti per prendere anche il nome del file), quindi a quel punto fai l'UPDATE del record con il nuovo nome file e prima di completare rimuovi il vecchio file.

ps: io chiamerei il nome del file con l'id dell'utente (tipo: avatar_[ID_UTENTE].jpg) perché ci potrebbero essere due utenti che caricano una foto con nome "luca.jpg"
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
come dice criric, fai il SELECT per vedere se ha un'immagine (quindi ne approfitti per prendere anche il nome del file), quindi a quel punto fai l'UPDATE del record con il nuovo nome file e prima di completare rimuovi il vecchio file.

ps: io chiamerei il nome del file con l'id dell'utente (tipo: avatar_[ID_UTENTE].jpg) perché ci potrebbero essere due utenti che caricano una foto con nome "luca.jpg"

Grazie anche a te per la risposta :)
No ho fatto direttamente in modo che se nella cartella uploadimg/ è già presente un file con lo stesso nome non lo fa caricare e dice di rinominare il file, poi in seguito farò sicuramente come suggerisci tu ;)
Si ho capito di fare il SELECT e poi UPDATE però io ne so pochissimo di php e non saprei come scrivere il tutto in maniera corretta ;P
Scusatemi
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Una comoda funzione MySql è ON DUPLICATE KEY che esegue un UPDATE se la chiave assegnata alla tabella è già presente
PHP:
<?php

$query = "INSERT INTO immagini
                      SET nome = $nomeUtente,
                          foto = $fotocaricata
          ON DUPLICATE KEY
          UPDATE foto = $fotocaricata";
?>
devi assicurarti la tabella abbia il campo nome come chiave primaria
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
Una comoda funzione MySql è ON DUPLICATE KEY che esegue un UPDATE se la chiave assegnata alla tabella è già presente
PHP:
<?php

$query = "INSERT INTO immagini
                      SET nome = $nomeUtente,
                          foto = $fotocaricata
          ON DUPLICATE KEY
          UPDATE foto = $fotocaricata";
?>
devi assicurarti la tabella abbia il campo nome come chiave primaria

Grazie, questa funzione non la conoscevo per nulla.
Nella mia tabella l'id è impostato come chiave primaria, come faccio ?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ma.l'id è un id che si autoincrementa o è l'id dell'utente?
se si auto incrementa togli la chiave da li e mettila sul nome
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ah Ok, quindi quella è la tabella utenti
allora non ti serve on duplicate key
devi solo creare una pagina che mostra i dati dell'utente in un form foto compresa, un pulsante submit e all'invio del form fai un update su tutti i dati che vuoi modificare. non è difficile prova, al massimo ti correggiamo il codice
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
Ah Ok, quindi quella è la tabella utenti
allora non ti serve on duplicate key
devi solo creare una pagina che mostra i dati dell'utente in un form foto compresa, un pulsante submit e all'invio del form fai un update su tutti i dati che vuoi modificare. non è difficile prova, al massimo ti correggiamo il codice

Ok allora, questo è il form per modificare i dati:

HTML:
<form id="formmodifica" action='update.php' method='POST' enctype='multipart/form-data'>
<table border="0" align="center">

<tr><td align="right">Nuova Password:</td><td><input type='password' id='passwordm' name='passwordm'></td></tr>
<tr><td align="right">Conferma Password:</td><td><input type='password' id='confermapasswordm' name='confermapasswordm'></td></tr>
<tr><td align="right">Email:</td><td width="166"><input type='text' id='email' name='email' value="<?php echo $_SESSION['email2']; ?>"></td></tr>
<tr><td align="right">Indirizzo:</td><td><input type='text' id='indirizzo' name='indirizzo' value="<?php echo $_SESSION['indirizzo2']; ?>"></td></tr>
<tr><td align="right">Telefono:</td><td><input type='text' id='telefono' name='telefono' value="<?php echo $_SESSION['telefono2']; ?>"></td></tr>
<tr><td align="right">Cellulare:</td><td><input type='text' id='cellulare' name='cellulare' value="<?php echo $_SESSION['cellulare2']; ?>"></td></tr>
<tr><td align="right">Fax:</td><td><input type='text' id='fax' name='fax' value="<?php echo $_SESSION['fax2']; ?>"></td></tr>
<tr>
<td colspan="2" align="center">&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center"><span style="color: #F00; font-weight: bold;">Conferma le tue modifiche inserendo:<br />username e password</span></td>
</tr>
<tr><td colspan="2" align="center">&nbsp;</td></tr>
<tr><td align="right">Username:</td><td><input type='username' id='username2' name='username'></td></tr>
<tr><td align="right">Vecchia Password:</td><td><input type='password' id='password2' name='password'></td></tr>
</table>
<br />
<table border="0" align="center">
<tr>
<td><input type='submit' id='submitM' value='Modifica' name='submit'></td>
</tr>
</table>
</form>

E questo è il file update.php

PHP:
<?php
if (isset($_POST['submit'])){
	
$email = addslashes(trim($_POST['email']));
$indirizzo = addslashes(trim($_POST['indirizzo']));
$telefono = addslashes(trim($_POST['telefono']));
$cellulare = addslashes(trim($_POST['cellulare']));	
$fax = addslashes(trim($_POST['fax']));
$foto = addslashes(trim($_POST['foto']));

$password = addslashes(trim($_POST['password']));
$password_cript = md5($password);

if ($password){
	
$exists = mysql_query ("SELECT * FROM utenti WHERE password = '$password_cript'") or die ("Impossibile completare la richiesta");
if (mysql_num_rows($exists) != 0){
		

mysql_query ("UPDATE utenti SET email='$email', indirizzo='$indirizzo', telefono='$telefono', password= MD5('$passwordm'), cellulare='$cellulare', fax='$fax' WHERE username = '$username' AND password = '$password_cript'") or die ("Caricamento dei dati nel database fallito.");
echo "<span style='font-size: 17px; font-weight: bold;'>I dati sono stati modificati correttamente.</br>Per visualizzare le modifiche rieffettuare l'accesso!</span>";
}else echo "<span style='font-size: 17px; font-weight: bold; color: #F00;'>Username o Password sbagliata, inserire il numero della tessera e la password che si usa per accedere nell'area partner.</span>";	
}
 else echo "<span style='font-size: 17px; font-weight: bold; color: #F00;'>Devi inserire l'username e la password per confermare la modifica.</span>";

}
?>

Avevo già provato a fare un update della foto, simile al modo in cui le faccio caricare durante la registrazione, ma non ci sono riuscito, per tutto queste altre cose invece si.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ti basta solo unire i due script e al posto dell INSERT fai un UPDATE
ma chiedi all'utente ogni volta user e password? non hai messo l'id utente in sessione?
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
Ti basta solo unire i due script e al posto dell INSERT fai un UPDATE
ma chiedi all'utente ogni volta user e password? non hai messo l'id utente in sessione?

In che modo unisco i due script ?
Si l'id dell'utente è in sessione però poi chiedo all'ultimo di confermare le modifiche effettuate.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Piu o meno cosi:
PHP:
<?php

if (isset($_POST['submit'])) {

    $email = addslashes(trim($_POST['email']));
    $indirizzo = addslashes(trim($_POST['indirizzo']));
    $telefono = addslashes(trim($_POST['telefono']));
    $cellulare = addslashes(trim($_POST['cellulare']));
    $fax = addslashes(trim($_POST['fax']));
    $foto = addslashes(trim($_POST['foto']));

    $password = addslashes(trim($_POST['password']));
    $password_cript = md5($password);

    if (isset($_FILES["avatar"]["name"]) && !empty($_FILES["avatar"]["name"])) {
        $nomefile = strtolower($_FILES["avatar"]["name"]);
        if (is_uploaded_file($_FILES["avatar"]["tmp_name"])) {
            if (move_uploaded_file($_FILES["avatar"]["tmp_name"], "/immagini/$nomefile")) {
                $connect = new mysqli("localhost", "root", "", "database");
                $query = "UPDATE utenti SET foto = '$nomefile' WHERE id = " . $_SESSION['idUtente'];
                $connect->query($query);
                $connect->close();
            }
        }
    }
// etc
}
?>
non so che script usi per l'upload delle immagini
nel form aggiungi l'input per caricare l'immagine
Abbandona l'estensione mysql e passa mysqli
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
Piu o meno cosi:
PHP:
<?php

if (isset($_POST['submit'])) {

    $email = addslashes(trim($_POST['email']));
    $indirizzo = addslashes(trim($_POST['indirizzo']));
    $telefono = addslashes(trim($_POST['telefono']));
    $cellulare = addslashes(trim($_POST['cellulare']));
    $fax = addslashes(trim($_POST['fax']));
    $foto = addslashes(trim($_POST['foto']));

    $password = addslashes(trim($_POST['password']));
    $password_cript = md5($password);

    if (isset($_FILES["avatar"]["name"]) && !empty($_FILES["avatar"]["name"])) {
        $nomefile = strtolower($_FILES["avatar"]["name"]);
        if (is_uploaded_file($_FILES["avatar"]["tmp_name"])) {
            if (move_uploaded_file($_FILES["avatar"]["tmp_name"], "/immagini/$nomefile")) {
                $connect = new mysqli("localhost", "root", "", "database");
                $query = "UPDATE utenti SET foto = '$nomefile' WHERE id = " . $_SESSION['idUtente'];
                $connect->query($query);
                $connect->close();
            }
        }
    }
// etc
}
?>
non so che script usi per l'upload delle immagini
nel form aggiungi l'input per caricare l'immagine
Abbandona l'estensione mysql e passa mysqli

Allora.. per l'upload delle immagini uso questo:

PHP:
$uploadpath = 'uploadimg/';
$max_size = 2000;
$alwidth = 205;
$alheight = 205;
$allowtype = array('bmp', 'gif', 'jpg', 'jpe', 'png');

if(isset($_FILES['foto']) && strlen($_FILES['foto']['name']) > 1) {
  $uploadpath = $uploadpath . basename( $_FILES['foto']['name']);
  $sepext = explode('.', strtolower($_FILES['foto']['name']));
  $type = end($sepext);
  list($width, $height) = getimagesize($_FILES['foto']['tmp_name']);
  $err = "";


  if(!in_array($type, $allowtype)) $err .= "Questo formato non è consentito";
  if($_FILES['foto']['size'] > $max_size*1000) $err .= "<br/>L'immagine può pesare massimo 2 MB";
  if(isset($width) && isset($height) && ($width >= $alwidth || $height >= $alheight)) $err .= "<br/>La grandezza dell'immagine deve essere massimo 200X200 px";
  
  if(file_exists('uploadimg/' . $_FILES['foto']['name'])) $err .= "<br/>File già presente nel sito, rinominare l'immagine.";


  if($err == "") {
move_uploaded_file($_FILES['foto']['tmp_name'], $uploadpath);

}

  else die ($err);
}

Comunque ora ho inserito il tuo script nella pagina update, solo che non funziona bene, ovvero l'immagine viene caricata nella cartella uploadimg/ ma non viene associata all'utente nella tabella del database.

Il tutto è impostato così:

Modifica.php

HTML:
<form id="formmodifica" action='update.php' method='POST' enctype='multipart/form-data'>
<table border="0" align="center">

<tr><td align="right">Nuova Password:</td><td><input type='password' id='passwordm' name='passwordm'></td></tr>
<tr><td align="right">Conferma Password:</td><td><input type='password' id='confermapasswordm' name='confermapasswordm'></td></tr>
<tr><td align="right">Email:</td><td width="166"><input type='text' id='email' name='email' value="<?php echo $_SESSION['email2']; ?>"></td></tr>
<tr><td align="right">Indirizzo:</td><td><input type='text' id='indirizzo' name='indirizzo' value="<?php echo $_SESSION['indirizzo2']; ?>"></td></tr>
<tr><td align="right">Telefono:</td><td><input type='text' id='telefono' name='telefono' value="<?php echo $_SESSION['telefono2']; ?>"></td></tr>
<tr><td align="right">Cellulare:</td><td><input type='text' id='cellulare' name='cellulare' value="<?php echo $_SESSION['cellulare2']; ?>"></td></tr>
<tr><td align="right">Fax:</td><td><input type='text' id='fax' name='fax' value="<?php echo $_SESSION['fax2']; ?>"></td></tr>
<tr><td width="113" align="right" id="gestione" for="foto">Foto</td> <td width="239" align="center"><input type="file" name="foto" enctype='multipart/form-data' id="foto" /></td></tr>
<tr>
<td colspan="2" align="center">&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center"><span style="color: #F00; font-weight: bold;">Conferma le tue modifiche inserendo:<br />username e password</span></td>
</tr>
<tr><td colspan="2" align="center">&nbsp;</td></tr>
<tr><td align="right">Username:</td><td><input type='username' id='username2' name='username'></td></tr>
<tr><td align="right">Vecchia Password:</td><td><input type='password' id='password2' name='password'></td></tr>
</table>
<br />
<table border="0" align="center">
<tr>
<td><input type='submit' id='submitM' value='Modifica' name='submit'></td>
</tr>
</table>

E questo è il file update.php

PHP:
<?php if(isset($_SESSION['utente'])){ ?>
<div id="main">


<br><br><br><br><br>

<?php
if (isset($_POST['submit'])){
	
$email = addslashes(trim($_POST['email']));
$indirizzo = addslashes(trim($_POST['indirizzo']));
$telefono = addslashes(trim($_POST['telefono']));
$cellulare = addslashes(trim($_POST['cellulare']));	
$fax = addslashes(trim($_POST['fax']));
$foto = addslashes(trim($_POST['foto']));
$foto = mysql_real_escape_string($_FILES["foto"]["name"]);

$password = addslashes(trim($_POST['password']));
$password_cript = md5($password);



if (isset($_FILES["foto"]["name"]) && !empty($_FILES["foto"]["name"])) {
        $nomefile = strtolower($_FILES["foto"]["name"]);
        if (is_uploaded_file($_FILES["foto"]["tmp_name"])) {
            if (move_uploaded_file($_FILES["foto"]["tmp_name"], "uploadimg/$nomefile")) {
                $connect = new mysqli("", "", ""); // qui ovviamente ho riempito tutto
                $query = "UPDATE utenti SET foto = '$nomefile' WHERE id = " . $_SESSION['utente']; // non so se il problema è qui
                $connect->query($query);
                $connect->close();
            }
        }
    }
	
if ($password){
	
$exists = mysql_query ("SELECT * FROM utenti WHERE password = '$password_cript'") or die ("Impossibile completare la richiesta");
if (mysql_num_rows($exists) != 0){
		

mysql_query ("UPDATE utenti SET email='$email', indirizzo='$indirizzo', telefono='$telefono', password= MD5('$passwordm'), cellulare='$cellulare', fax='$fax' WHERE username = '$username' AND password = '$password_cript'") or die ("Caricamento dei dati nel database fallito.");
echo "I dati sono stati modificati correttamente.</br>Per visualizzare le modifiche rieffettuare l'accesso!";
}else echo ">Numero tessera o Password sbagliata, inserire il numero della tessera e la password che si usa per accedere nell'area partner.";	
}
 else echo "Devi inserire il numero della tessera e la password per confermare la modifica.";

}
?>



</div>
<?php } 
else 
echo "Per visualizzare questa pagina devi fare il login."; ?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
cambia questo
PHP:
$connect->query($query);
in questo modo
PHP:
if (!$connect->query($query)) {
       echo "Errore query :" . $connect->error;
}
se ci sono errori te li dovrebbe stampare a video
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
allora qui manca qualcosa
PHP:
$connect = new mysqli("localhost", "root", "password", "database");
o forse non hai abilitata l'estensione mysqli ma mi pare strano
 
Discussioni simili
Autore Titolo Forum Risposte Data
elpirata Update dinamico informazioni scritte in una pagina php jQuery 11
L update tabelle in php mysql [risolto] PHP 6
M [PHP] Query UPDATE che non mi aggiorna campi seconda tabella PHP 3
P [PHP] INSERT e UPDATE PHP 1
Monital [PHP] query update e select insieme ma frazionando l'arrray PHP 12
D [PHP] Update non trasferisce condizione where PHP 1
L [PHP] Errore UPDATE su tabella DB PHP 22
giancadeejay [PHP] istruzione UPDATE SQL PHP 2
giancadeejay [PHP] UPDATE DATO , SE ESISTE IN DB .. PHP 14
giancadeejay [PHP] Update tabella da file csv PHP 3
webmachine [PHP] SELECT, UPDATE VERIFICARNE IL RISULTATO PHP 2
cris8380 [PHP] Update in search. PHP 16
R Update PHP dalla 5.3.3 alla 5.3.4 PHP 0
Komix Errore sintassi SQL "UPDATE" in file PHP PHP 10
G [PHP/MySQL] Pagina di UPDATE PHP 2
D [PHP-MySql] Update che non mi funziona PHP 2
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4

Discussioni simili