Problema con Upload immagini

aledero75

Utente Attivo
6 Apr 2012
88
0
0
Lamezia Terme
Buonasera,
ho realizzato una piccola area privata di gestione degli eventi di un sito web attraverso la quale l'utente può gestire l'inserimento degli eventi tra cui anche un'immagine tramite pannello di amministrazione. Tutto è a posto tranne l'upload delle immagini che non riesco ad inviare al database se non la stringa dell'immagine e a visualizzarla tramite pannello di amministrazione. Ho utilizzato il vostro tutorial (http://www.mrwebmaster.it/php/archiviare-immagini-database-usando-php-mysql_7021_4.html)

Secondo voi quale potrebbe essere il problema? Nel momento in cui provo a visualizzare l'immagine mi compare l'errore "id sconosciuto"
Credo che il problema sta proprio nell'invio dell'id che non viene riconosciuto
Ho creato una tabella unica con i seguenti campi:
1) Id_eventi
2) data_eventi
3) titolo_eventi
4)nome
5) type
6) size
7) immagine
8)testo_eventi

Vi posto un po' di codice sperando che riuscite a farmi capire l'errore.
FILE FORM
PHP:
<?php
include("connetti.php");
include("upload.php");

?>
<meta name="viewport" content="width=device-width">
</head>

<body>

<div id="contenitore"> 
    <div id="logo"><img src="img/logo.png" class="logo"></div>
    <h1>INSERIMENTO EVENTI</h1>
 
  <form name="valori" id="modulo" action="inse-database.php" method="post">
  	
    <input type="text" name="data" placeholder="Data Evento" required><br />
  	<input type="text" name="titolo" placeholder="Titolo Evento" required><br />
    <textarea name="desc" placeholder="Inserisci Testo" required></textarea><br />
    <div class="foto">
    	<input name="file" type="file" id="foto">
    </div>
    <input type="submit" value="INVIA" id="submit">
  <input type="hidden" name="MAX_FILE_SIZE" value="30000">
  </form>
     <div class="amministrazione"><a href="eventi-tutti.php">TUTTI GLI EVENTI VIGNALACORTE</a></div>
    </div>
<?php
include("chiudi.php");
?>
FILE LINK
PHP:
<?
include("connetti.php");
$sql = "SELECT Id_eventi, nome FROM eventi ORDER BY Id_eventi DESC";
$result = @mysql_query($sql) or die (mysql_error ());
while ($row = @mysql_fetch_array($result))
{
  $id = $row['Id_eventi'];
  $nome = $row['nome'];
  echo "<a href=\"show.php?id=".$id."\">".$nome."</a><br />";
}
?>
FILE SHOW.PHP
PHP:
<?
if (isset($_GET['id']))
{
include("connetti.php");

  $sql = "SELECT Id_eventi,type,immagine FROM eventi WHERE Id_eventi='$id'";
  $result = @mysql_query($sql) or die(mysql_error ());
  $row = @mysql_fetch_array($result);
  $id = $row['Id_eventi'];
  $type = $row['type'];
  $img = $row['immagine'];
  if (!$id)
  {
    echo "Id sconosciuto";
  }else{
    @header ("Content-type: ".$type);
    echo $img;
  }
}else{
  echo "Impossibile soddisfare la richiesta.";
}
?>
FILE UPLOAD
PHP:
<?
function upload()
{
  $result = false;
  $immagine = '';
  $size = 0;
  $type = '';
  $nome = '';
  $max_size = 300000;
  $result = @is_uploaded_file($_FILES['file']['tmp_name']);
  if (!$result)
  {
    echo "Impossibile eseguire l'upload.";
    return false;
  }else{
    $size = $_FILES['file']['size'];
    if ($size > $max_size)
    {
      echo "Il file è troppo grande.";
      return false;
    }
    $type = $_FILES['file']['type'];
    $nome = $_FILES['file']['name'];
    $immagine = @file_get_contents($_FILES['file']['tmp_name']);
    $immagine = addslashes ($immagine);
    @include 'config.php';
    $sql = "INSERT INTO eventi (nome, size, type, immagine) VALUES ('$nome','$size','$type','$immagine')";
    $result = @mysql_query ($sql) or die (mysql_error());
    return true;
  }
}
?>
 

aledero75

Utente Attivo
6 Apr 2012
88
0
0
Lamezia Terme
Ciao,
adesso ho sistemato il codice però ho due tipi di problemi:
1) non riesco ad archiviare l'immagine nel database tramite il form
2) nel momento in cui clicco un id di un evento per visualizzare la foto di quell'id mi posta l'elenco di tutte le foto e non solo quella all'id selezionato

Qualcuno puo' aiutarmi?
Grazie
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Cioa, riposta il codice aggiornato e il dump della tabella
 

aledero75

Utente Attivo
6 Apr 2012
88
0
0
Lamezia Terme
Grazie per la risposta,
ecco i codici delle pagine:

1) PAGINA CHE VISUALIZZA GLI EVENTI TRA CUI L'IMMAGINE

PHP:
<?php
$richiesta = "select Id_eventi, data_eventi, titolo_eventi, nome, testo_eventi from eventi order by Id_eventi";


$dati = mysql_query ($richiesta);
echo ("<table>");
echo ("<tr class='testata'>
		<td>IDENTIFICATIVO</td>
		<td>DATA EVENTO</td>
		<td>TITOLO</td>
		<td>DESCRIZIONE</td>
		<td>FOTO</td>
		<td>MODIFICA</td>
		<td>CANCELLA</td>
		<td>IMMAGINI</td>
		
	  </tr>");

while ($riga=mysql_fetch_array($dati)) 
{ 
	echo ("<tr class='testata2'>
		<td>" . $riga ["Id_eventi"] . "</td>
		<td>" . $riga ["data_eventi"] . "</td>
		<td>" . $riga ["titolo_eventi"] . "</td>
		<td>" . $riga ["testo_eventi"] . "</td>
		<td>" . $riga ["nome"] . "</td>
		<td><a href=\"Modifica_eventi.php?id=$riga[Id_eventi]\">Modifica</a></td>
		<td><a href=\"Cancella_eventi.php?id=$riga[Id_eventi]\">Cancella</a></td>
		<td><a href=\"link.php?id=$riga[Id_eventi]\">Foto</a></td>
	     </tr>" );
}

echo ("</table>");
include('chiudi.php');
?>
2 - PAGINA LINK
PHP:
<?
include("connetti.php");
$sql = "SELECT Id_eventi, nome FROM eventi ORDER BY Id_eventi DESC";
$result = @mysql_query($sql) or die (mysql_error ());
while ($row = @mysql_fetch_array($result))
{
  $id = $row['Id_eventi'];
  $nome = $row['nome'];
  echo "<a href=\"show.php?id=".$id."\">".$img."</a><br />";
}
?>
3- PAGINA SHOW.PHP

PHP:
<?
if (isset($_GET['id']))
{
include("connetti.php");

  $sql = "SELECT * FROM eventi WHERE Id_eventi='$id'";
  $result = @mysql_query($sql) or die(mysql_error ());
  $row = @mysql_fetch_array($result);
  $id = $row['Id_eventi'];
  $type = $row['type'];
  $img = $row['immagine'];
  if (!$id)
  {
    echo "Id sconosciuto";
  }else{
    @header ("Content-type: ".$type);
    echo $img;
  }
}else{
  echo "Impossibile soddisfare la richiesta.";
}
?>
4- PAGINA UPLOAD

PHP:
<?
function upload()
{
  $result = false;
  $immagine = '';
  $size = 0;
  $type = '';
  $nome = '';
  $max_size = 300000;
  $result = @is_uploaded_file($_FILES['file']['tmp_name']);
  if (!$result)
  {
    echo "Impossibile eseguire l'upload.";
    return false;
  }else{
    $size = $_FILES['file']['size'];
    if ($size > $max_size)
    {
      echo "Il file è troppo grande.";
      return false;
    }
    $type = $_FILES['file']['type'];
    $nome = $_FILES['file']['name'];
    $immagine = @file_get_contents($_FILES['file']['tmp_name']);
    $immagine = addslashes ($immagine);
  	include("connetti.php");
    $sql = "INSERT INTO eventi (nome, size, type, immagine) VALUES ('$nome','$size','$type','$immagine')";
    $result = @mysql_query ($sql) or die (mysql_error());
    return true;
  }
}
?>
5 - PAGINA FORM CHE INCLUDE L'UPLOAD

PHP:
 <form name="valori" id="modulo" action="inse-database.php" method="post">
  	
    <input type="text" name="data" placeholder="Data Evento" required><br />
  	<input type="text" name="titolo" placeholder="Titolo Evento" required><br />
    <textarea name="desc" placeholder="Inserisci Testo" required></textarea><br />
    <div class="foto">
    	<input name="file" type="file" id="foto">
    </div>
    <input type="submit" value="INVIA" id="submit">
  <input type="hidden" name="MAX_FILE_SIZE" value="30000">
  </form>
6 - TABELLA PHP MYADMIN
PHP:
CREATE TABLE IF NOT EXISTS `eventi` (
  `Id_eventi` int(11) NOT NULL AUTO_INCREMENT,
  `data_eventi` varchar(10000) NOT NULL,
  `titolo_eventi` varchar(1000) NOT NULL,
  `nome` varchar(50) NOT NULL,
  `size` varchar(25) NOT NULL,
  `type` varchar(25) NOT NULL,
  `immagine` blob NOT NULL,
  `testo_eventi` varchar(1000) NOT NULL,
  PRIMARY KEY (`Id_eventi`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non è molto chiaro
nella pagina 1 manca la connessione al database
nella pagina 2 la variabile $img non è valorizzata, forse volevi scrivere $nome
nella pagina 3 $id non è valorizzato nella query devi usare il GET
PHP:
$sql = "SELECT * FROM eventi WHERE Id_eventi=" . $_GET['id'];
nel form non hai messo enctype='multipart/form-data'

Il sistema più semplice comunque è salvare l'immagine in una cartella del server e nel database solamente il percorso per raggiungerla
 

aledero75

Utente Attivo
6 Apr 2012
88
0
0
Lamezia Terme
Ok adesso sembra andare perché mi visualizza le immagini però non me le fa più caricare dal form. Mi spieghi meglio come salvare l'immagine in una cartella dal form? E solo il percorso nel database?

Grazie mille
 

aledero75

Utente Attivo
6 Apr 2012
88
0
0
Lamezia Terme
Buongiorno,
sto ancora combattendo con questo problema. Ho fatto un passo avanti nel senso che adesso sono riuscita ad impostare l'area dinamica in modo che la foto viene visualizzata dinamicamente tramite la stampa della stringa della foto inserita tramite form mentre l'immagine è presente in una cartella del sito.

Il problema è che il cliente non capisce niente di codice e quindi non sarebbe in grado di inserire l'immagine nella cartella. Per questo mi sarebbe molto utile fare in modo che il cliente la inviasse tramite form. Come posso fare? È così complicato?

Per piacere aiutatemi . Riposto i codici così potete dare un'occhiata


CODICE FORM

HTML:
<?php
include("connetti.php");

?>
<meta name="viewport" content="width=device-width">
</head>

<body>

<div id="contenitore"> 
    <div id="logo"><img src="img/logo.png" class="logo"></div>
    <h1>INSERIMENTO EVENTI</h1>
 
  <form name="valori" id="modulo" action="inse-database.php" method="post">
  	
    <input type="text" name="data" placeholder="Data Evento" required><br />
    <textarea name="desc" placeholder="Inserisci Testo" required></textarea><br />
    <div class="foto">
    	 <input type="text" name="nomefoto" placeholder="Foto" required><br />
    </div>
    <input type="submit" value="INVIA" id="submit">
  </form>
 
     <div class="amministrazione"><a href="eventi-tutti.php">TUTTI GLI EVENTI VIGNALACORTE</a></div>
    </div>
<?php
include("chiudi.php");
?>
CODICE INSERIMENTO DATABASE

PHP:
<?php
$id = $_POST["Id_eventi"];
$nomefoto = $_POST["nomefoto"];
$ladata = $_POST["data"];
$ladesc = $_POST["desc"];

include ("connetti.php");
//query che serve ad aggiornare il database

mysql_query("INSERT INTO `vignalacorte`.`Eventi-vigna`(`data`, `text`, `nome-foto`) values ('$ladata','$ladesc', '$nomefoto')");
$ultimo_id = mysql_insert_id();
?>
CODICE VISUALIZZAZIONE AREA DINAMICA SUL SITO

PHP:
 <?php
 include('connetti.php');
$richiesta = "select * from `Eventi-vigna` order by Id_eventi";

$dati = mysql_query ($richiesta);


while ($riga=mysql_fetch_array($dati)) 
{ 
	echo ("<div class='evento'>
			<div class='foto-ev'><img src='img_eventi/{$riga ['nome-foto']}'> </div>	
			<div class='data'><span class='small'><br />" . $riga ["data"] . "</span></div>
			<div class='commento'><p>" . $riga ["text"] . "</p></div>
			
	     </div>" );
}

echo ("</div>");
include('chiudi.php');
?>
Vi prego aiutatemi