Upload immagini

  • Creatore Discussione Creatore Discussione maxxjo
  • Data di inizio Data di inizio

maxxjo

Utente Attivo
27 Apr 2013
56
0
0
Ciao!
ho un form php per fare l'upload immagini e quello che vorrei fare e che ogni volta che carico una foto sul database mysql, l'inserimento della foto parta dal ID 1 e non da l'ultimo id inserito, questo perché ho creato una pagina php dove posso cancellare le foto che voglio dal database, ma così facendo mi ritrovo ad avere dei buchi tra l'id esempio: ID 1,2,3,4 se cancello la foro con id 2 mi ritrovo così; 1,3,4.
Invece io vorrei ovviare a questo problema con un nuovo upload di immagini che vada in automatico ad inserire la foto li dove manca , ecco perché partire da Id 1 e non dall'ultimo id inserito.

Pagina Upload php
PHP:
<?php 
// se è stato inviato il file...
if(isset($_POST['invia']))
{
	// se ci sono stati problemi nell'upload del file
	if(!isset($_FILES['file_inviato']) OR $_FILES['file_inviato']['error'] != UPLOAD_ERR_OK)
	mostra_form("errore nell'invio del file. Riprova");

	// connessione e selezione del database
	mysql_connect('localhost', 'root', 'root')
	or die('Connessione non riuscita: ' . mysql_error());

	if(!mysql_select_db('gallery'))
	die('Selezione database fallita!');

	// recupero alcune informazioni sul file inviato
	$nome_file_temporaneo = $_FILES['file_inviato']['tmp_name'];
	$nome_file_vero = $_FILES['file_inviato']['name'];
	$tipo_file = $_FILES['file_inviato']['type'];

	// leggo il contenuto del file
	$dati_file = file_get_contents($nome_file_temporaneo);

	// preparo il contenuto del file per la query
	$dati_file = addslashes($dati_file);

	// query per inserire il file nel DB
	$query = "INSERT INTO tabella_files SET
				nome_file = '$nome_file_vero', 
				tipo_file = '$tipo_file', 
				dati_file = '$dati_file'"; 

	mysql_query($query)
	OR die('Query non valida: ' . mysql_error());

	// mostro nuovamente il form ed un messaggio di successo
	mostra_form("Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente.");
}
else
{
	mostra_form();
}

/**
* Mostra il form per l'upload del file 
* 
*/ 
function mostra_form($messaggio = '')
{
	?><head> 
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
	<title>Carica file nel database</title> 
	</head> 
	 
	 
	 
	<p><?php echo $messaggio?> <br /> Seleziona un file da memorizzare nel database: <p></p> 
	<form name="form1" enctype="multipart/form-data" method="post" action=""> 
	<p> 
	<input type="file" name="file_inviato"> 
	<p></p> 
	<p> 
	<input type="submit" name="invia" value="Invia file"> 
	<p></p> 
	</form> 
	 <input type="hidden" name="MAX_FILE_SIZE" value="30000">

	 
	<?php 
	exit();
}
?>
 
Ultima modifica di un moderatore:
ciao
andare a modificare una chiave primaria autoincrement è un casino. è meglio non farlo.
se non vede l'ultima l'ultima immagine che hai inserito devi modificare il metodo di visualizzazione.

p.s.
racchiudi sempre il codice tra gli appositi tag (seconda riga formattazione post, ultime tre iconcine nell'ordine CODE, HTML, PHP)

p.s. al p.s.
le immagini le carichi solo tu o le possono caricare anche altri?
perchè se le possono caricare anche altri stai correndo dei grossi rischi, qualche maleintenzionato potrebbe caricarti un file .exe, quindi devi verificare il tipo di file caricato prima di caricarlo e se non è un'immagine impedire il caricamento
 
imamgine

grazie per l'immediata risposta..
L'ultima immagine che carico la vedo, il mio problema è che se cancello un qualsiasi id all'interno del database poi non posso più vedere quella foto, ecco perché mi sarebbe piaciuto poter inserire la foto partendo sempre da id1 e non dall'ultimo id inserito che chiaramente fà auto_increment, così che si possa inserire l'immagine nel id mancante e non lasciare buchi come: ID 1,2,4,7 ecc.. io vorrei invece che fosse crescente 1,2,3,4,5,6,7
Le foto le caricano più persone..
 
ciao
....se cancello un qualsiasi id all'interno del database poi non posso più vedere quella foto...
è logico se la cacelli non la puoi più vedere.
se vuoi continuarre a vederla potresti aggingere un campo alla tabella (es)
Codice:
id
nome_file 
tipo_file 
dati_file
visibile tipo set('S','N') default 'S'
quando le fai vedere nella query metti nel WHERE
....AND visibile='S'...
per eliminarla non fai il delete ma l'UPDATE mettendo il campo visibile al valore 'N'
se poi vuoi eliminarle fisicamente in seguito fai il delete WHERE visibile='N' (e/o altre condizioni)
poi per verificare che il file sia ammesso potresti fare (io faccio così)
PHP:
<?php
//.......
$ammessi=array('jpg','png','gif');//o altre estenzioni che ti interessano
$estensione=pathinfo($_FILES['file_inviato']['name'], PATHINFO_EXTENSION); ;
if(!in_array($estensione,$ammessi)){
	echo "file non ammesso";
	//e rimandi al form
}
//....
?>
 
delete foto

quando facci il delete della foto mi compare questo se inserisco il codice che mi hai dato..
Errore nella query DELETE FROM tabella_files WHERE visibile='N': Unknown column 'visibile' in 'where clause'


ecco la pagina php per il delete foto dal database.
PHP:
<?php
//input data
$mysql_host='localhost';
$mysql_user='root';
$mysql_password='root';
$my_database='gallery';

//connecting,selecting database
$link=mysql_connect ($mysql_host, $mysql_user, $mysql_password)
or die ('Could not connect: ' . mysql_error());
mysql_select_db($my_database) or die('Could not select database');

if($_POST)
{
	$ids = isset($_POST['id']) ? $_POST['id'] : array();
	elimina_record($ids);
}
elseif(isset($_GET['id']))
{
	elimina_record(array($_GET['id']));
}
else
	mostra_lista();

function mostra_lista()
{
	// mostro un eventuale messaggio
	if(isset($_GET['msg']))
		echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

	// preparo la query
	$query = "SELECT * FROM tabella_files";

	// invio la query
	$result = mysql_query($query);

	// controllo l'esito
	if (!$result) {
		die("Errore nella query $query: " . mysql_error());
	}

	echo '
	<form name="form1" method="post" action="">
	<table border="1">
		<tr>
			<th>&nbsp;</th>
			<th>Nome</th>
			<th>&nbsp;</th>
		</tr>';

	while ($row = mysql_fetch_assoc($result))
	{
	
// in questa stringa devi inserire il titolo per visualizzare il nome da cancellare
$nome = htmlentities($row['nome_file']);

		// preparo il link per la modifica dei dati del record
		$link = $_SERVER['PHP_SELF'].'?id=' . $row['id'];

		echo "<tr>
				<td><input name=\"id[]\" type=\"checkbox\" value=\"$row[id]\" /></td>
				<td>$nome</td>
				<td><a href=\"$link\">elimina</a></td>
			</tr>";
	}

	echo '</table>
		<br />
		<input type="submit" name="Submit" value="Elimina record selezionati" />
		</form>';

	// libero la memoria di PHP occupata dai record estratti con la SELECT
	mysql_free_result($result);

	// chiudo la connessione a MySQL
	mysql_close();
}

function elimina_record($ids)
{
	// verifico che almeno un id sia stato selezionato
	if(count($ids) < 1)
	{
		$messaggio = urlencode("Nessun record selezionato!");
		header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
		exit;
	}

	// per precauzione converto gli ID in interi
	$ids = array_map('intval',$ids);

	// creo una lista di ID per la query
	$ids = implode(',',$ids);

	// preparo la query
	$query = "DELETE FROM tabella_files WHERE visibile='N'";

	// invio la query
	$result = mysql_query($query);

	// controllo l'esito
	if (!$result) {
		die("Errore nella query $query: " . mysql_error());
	}

	// conto il numero di record cancellati
	$num_record = mysql_affected_rows();

	// chiudo la connessione a MySQL
	mysql_close();

	$messaggio = urlencode("Numero record cancellati: $num_record");
	header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}

//closing connection
mysql_close($link);

?>
 
Ultima modifica di un moderatore:

Discussioni simili