gallery visualizza la prima immagine

iperboreo

Utente Attivo
21 Giu 2012
126
0
16
Ciao ho un problemino strano, non capisco,
ho un "form" multiplo per l'upload foto e funziona bene, carica le foto nel database.

ma se carico per esempio 2 immagini, (chiaramente diverse) mi visualizza due volte la prima immagine, anche se nel database sono caricate giustamente, diverse.
DA CHE DIPENDE? io estraggo tutte le foto dal db, ma se carico piu foto contemporaneamente mi visualizza solo la prima foto ripetuta tante volte quante sono le foto che ho selezionato per il caricamento.

Grazie se potete darmi il suggerimento.
 
Ciao ecco il form
HTML:
<form method="post" action="upload_foto.php" enctype='multipart/form-data'>
<b>Titolo:<br />
<input name="titolo" type="text" size="25"><br />
<b>Descrizione:<br />
<textarea name="descrizione" cols="20" rows="6"></textarea><br />
<b>Immagine:<br />
<input id="imagefile" name="imagefile[]" type="file" multiple="multiple"><br />
<!-- <input type="file" name="imagefile"    multiple="multiple"  > -->
<input type="submit" name="Submit" value="Carica">
</form>

e il file che visualizza le immagini prese dal db, dove il form sopra, correttamente salva.

PHP:
<?php
session_start();

@include 'configa.php';

// apro la tabella che ci servirà per l'impaginazione
echo "<table>";

// recupero i dati dal DB
$query = "SELECT * FROM images WHERE id_utente='".$_SESSION['id']."' ORDER By id";



$res = mysql_query($query) or die (mysql_error());

// numero delle immagini presenti nel DB
$n_img = mysql_num_rows($res);

// verifico che il DB ospiti almeno un'immagine
if($n_img >= 1 ){
  // stabilisco il numero di righe e colonne della nostra tabella per l'impagninazione
  $colonne = 6;
  $righe=0;


  // ciclo tutti i record recuperati attraverso la nostra query
  while ($f=@mysql_fetch_array($res)){
    $righe++;
    $id = $f['id'];
    $titolo = stripslashes($f['Titolo']);
    $nome = stripslashes($f['Nome']);
    $descrizione = stripslashes($f['Descrizione']);

    // stampo la cella contenente l'immagine
    echo "<td width=\"0%\">\n";
    echo $titolo . "<br />";
    echo "<a href=\"visual.php?id=" . $id . "\">";
    echo "<img src=\"" . $path_img . "tb_" . $nome . "\" border=\"0\"></a>";
    echo "<br />" . $descrizione;
echo "<br />";
    echo "<a href=\"elimina_foto.php?id_Titolo=$id\">Elimina</a><br>";  

    echo "</td>\n";

    // quando il numero di righe equivale al valore impostato nella variabile $righe
    // procedo a chiudere la linea e ad azzerare il valore di $righe
    if ($righe == $colonne){
      echo "</tr><tr>\n";
      $righe = 0;
    }
  }
}else{
  // stampo un messaggio se il DB è vuoto
  echo "Nessuna immagine inserita.";
}
@mysql_close($cn);
echo "</table>";
?>
 
Ultima modifica di un moderatore:
ciao
così a naso nella visualizzazione non vedo errori, ma da quello che dici
io estraggo tutte le foto dal db, ma se carico piu foto contemporaneamente mi visualizza solo la prima foto ripetuta tante volte quante sono le foto che ho selezionato per il caricamento.
probabilmente dipende da come gestisci il nome delle immagini in caso di immagini multiple
ti consiglio di mettere un var_dump dove leggi i dati dal form

PHP:
var_dump($_FILE['imagefile']);

ti accorgi che $_FILE è un array di array quindi se prendi per sapere il nome $_FILE['imagefile']['name'] sbagli
 
Ciao scusa ma non ho capito dove mettere il var_dump nel file di visualizzazione o nel form?

Eppure il form lavora bene, inserisce le immagini nel database, ma poi è il file gallery.php che le visualizza, che mostra solo una foto ripetutamente.

Non capisco il nesso con il form di upload
 
BORGO, MI CORREGGO SCUSA, IN REALTA NEL DATABASE INSERISCE SOLO UNA FOTO, NON TUTTE,

cioè io ne seleziome mettiamo 3, e lui mi inserisce nel database solo una di queste, credo la prima, poi il file di visualizzazione
mi mostra quella foto 3 volte.


SCUSATE IL CASINO ORA HO APPURATO CHE FA COSI
 
Questo è il file upload.php che dovrebbe inserire i file nel database, ma inserisce solo una foto indipendentemente che io ne selezioni tante

GRAZIE ANCORA

PHP:
<?php
session_start();


$id_utente = $_SESSION['id'];

if(isset($_POST['Submit'])){
  // faccio un po' di inclusioni...
  @include 'configa.php';
  @require 'function.php';

  // Creo una array con i formati accettati
  $tipi_consentiti = array("image/gif","image/jpeg","image/png","image/bitmap" );
  //print_r($_FILES);
  $i = 0;
 // $lista = $_FILES['imagefile']['name'];
  foreach($_FILES as $file){
    foreach($file['name'] as $filename){
  // verifico che il formato del file sia tra quelli accettati
  if (@in_array($file['type'][$i], $tipi_consentiti)){ 
    // copio il file nella cartella delle immagini
    @copy ($file['tmp_name'][$i], $path_img . $filename);

    // recupero i dati dal form
    $titolo = @addslashes($_POST['titolo']);
    $descrizione = @addslashes($_POST['descrizione']);
    $nome = @addslashes($filename);
    $path = $path_img . stripslashes($nome);
    $tipo = @addslashes($file['type'][$i]);

    // creo la miniatura
	@makeThumb($path_img,$path,$nome,$tipo,100,100,"tb_");
    @makeThumb($path_img,$path,$nome,$tipo,48,48,"mini_");
    // aggiorno il database


   $query = "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) 

VALUES('$titolo','$descrizione','$nome','$tipo','$id_utente')";

    $res = @mysql_query($query) or die (mysql_error());
    header("location:http://basefull.altervista.org/foto.php");


    // Stampo a video un po' di informazioni

  }else{
    // stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito

@header("Location: foto.php");
  
  }
} 
}
}
?>
 
ciao
prova a mettere un var_dump e commentare l'header per vedere i risultati

PHP:
   $query = "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('$titolo','$descrizione','$nome','$tipo','$id_utente')";
    var_dump($query );echo "<br />;
    $res = @mysql_query($query) or die (mysql_error());
    //header("location:http://basefull.altervista.org/foto.php");
se carichi es. tre foto dovresti vedere tre query diverse, se sono uguali c'è da rivedere probabilmente i foreach
 
ciao,
ho aggiunto il var dump, ma non so bene cosa devo notare adesso, cosa mi aiuta a fare quesa aggiunta?
non so cosa guardare.
grazie
 
ciao
il var dump ti restituisce il valore delle stringa
es se carichi due foto
1) tramonto , descrivo il tramonto, tramonto.jpg , 37
2) alba , decrivo il sorgere del sole , alba.jpg , 37
devi vedere stampate due righe (xyx = quanti caratteri, vedrai un numero)

string(xyz) "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('tramonto','descrivo il tramonto','tramonto.jpg','jpg','37')"
string(xyz) "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('alba','decrivo il sorgere del sole','alba.jpg','jpg','37')"

se vedi come sopra allora bisogna cercare l'errore da qualche altra parte, se invece vedi
string(xyz) "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('tramonto','descrivo il tramonto','tramonto.jpg','jpg','37')"
string(xyz) "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('tramonto','descrivo il tramonto','tramonto.jpg','jpg','37')"

cioè due righe uguali probabilmente l'errore è nella lettura nel foreach
(hai commentato l'header location? altrimenti non fai in tempo a vederle)

fai quella prova e sappimi dire se le righe sono diverse o sono tutte uguali, se sono uguali do un occhio al foreach
edit
anche se penso che sia li

edit 2
togli tutte quelle @ se qualcosa da errore non viene visualizzato e quindi non capisci dove lo script si pianta
 
Ultima modifica:
Ciao rieccomi,
ho provato a togliere tutte le @ per vedere i resoconti, e ad aggiungere il var_dump,
ma non cambia nulla, non vedo nessuna scritta, mi carica le foto uguali e basta, devo aver sbagliato.

Ho modificato il file upload_foto (a cui punta il form) in questo modo:
PHP:
<?php
session_start();


$id_utente = $_SESSION['id'];

if(isset($_POST['Submit'])){
  // faccio un po' di inclusioni...
  include 'configa.php';
  require 'function.php';

  // Creo una array con i formati accettati
  $tipi_consentiti = array("image/gif","image/jpeg","image/png","image/bitmap" );
  //print_r($_FILES);
  $i = 0;
 // $lista = $_FILES['imagefile']['name'];
  foreach($_FILES as $file){
    foreach($file['name'] as $filename){
  // verifico che il formato del file sia tra quelli accettati
  if (in_array($file['type'][$i], $tipi_consentiti)){ 
    // copio il file nella cartella delle immagini
    copy ($file['tmp_name'][$i], $path_img . $filename);

    // recupero i dati dal form
    $titolo = addslashes($_POST['titolo']);
    $descrizione = addslashes($_POST['descrizione']);
    $nome = addslashes($filename);
    $path = $path_img . stripslashes($nome);
    $tipo = addslashes($file['type'][$i]);

    // creo la miniatura
	makeThumb($path_img,$path,$nome,$tipo,100,100,"tb_");
    makeThumb($path_img,$path,$nome,$tipo,48,48,"mini_");
    // aggiorno il database


   $query = "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('$titolo','$descrizione','$nome','$tipo','$id_utente')";

var_dump($query ); echo "<br />"; 


    $res = mysql_query($query) or die (mysql_error());
    header("location:http://basefull.altervista.org/foto.php");


    // Stampo a video un po' di informazioni

  }else{
    // stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito

header("Location: foto.php");
  
  }
} 
}
}
?>
 
ciao
ho provato l'inserimento multiplo (provato con 2 immagini) e mi sembra che funzi, infatti il var_dump mi restituisce (l'id_utente valorizzato a caso):
string(121) "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('aaaa','bbbbbb','lago_santo-02.jpg','image/jpeg','33')"
string(121) "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('aaaa','bbbbbb','lago_santo-01.jpg','image/jpeg','33')"

quindi per prima cosa verifica e sappimi dire se es. inserisci due immagini
1) con phpmyadmin verifica come sono i record
2) si caricano le due immagini e si creano le tumbs
?

poi per una verifica posta come è strutturata la tabella images
 
Ciao Borgo e grazie,

qui la tabella "images"
PHP:
CREATE TABLE IF NOT EXISTS `images` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_utente` int(11) NOT NULL,
  `Titolo` varchar(255) NOT NULL DEFAULT '',
  `Descrizione` varchar(255) NOT NULL DEFAULT '',
  `Nome` varchar(255) NOT NULL DEFAULT '',
  `Tipo` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=308 ;

e qui RIALLEGO il file precedente che fa l'upload, ma che invece su due foto ne carica solo una nel database mysql,
e poi ti allego in ultimo il file gallery che visualizza le immagini, e invece di due foto, mi mostra due volte la foto l'unica inserita.

PHP:
<?php
session_start();


$id_utente = $_SESSION['id'];

if(isset($_POST['Submit'])){
  // faccio un po' di inclusioni...
  include 'configa.php';
  require 'function.php';

  // Creo una array con i formati accettati
  $tipi_consentiti = array("image/gif","image/jpeg","image/png","image/bitmap" );
  //print_r($_FILES);
  $i = 0;
 // $lista = $_FILES['imagefile']['name'];
  foreach($_FILES as $file){
    foreach($file['name'] as $filename){
  // verifico che il formato del file sia tra quelli accettati
  if (in_array($file['type'][$i], $tipi_consentiti)){ 
    // copio il file nella cartella delle immagini
    copy ($file['tmp_name'][$i], $path_img . $filename);

    // recupero i dati dal form
    $titolo = addslashes($_POST['titolo']);
    $descrizione = addslashes($_POST['descrizione']);
    $nome = addslashes($filename);
    $path = $path_img . stripslashes($nome);
    $tipo = addslashes($file['type'][$i]);

    // creo la miniatura
	makeThumb($path_img,$path,$nome,$tipo,100,100,"tb_");
    makeThumb($path_img,$path,$nome,$tipo,48,48,"mini_");
    // aggiorno il database


   $query = "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('$titolo','$descrizione','$nome','$tipo','$id_utente')";

var_dump($query ); echo "<br />"; 


    $res = mysql_query($query) or die (mysql_error());
    header("location:http://basefull.altervista.org/foto.php");


    // Stampo a video un po' di informazioni
  }else{
    // stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito

header("Location: foto.php");
  
  }
} 
}
}
?>

file gallery.php che estrae le foto e le visualizza, anche se tutte scompigliate, non riuscendo a "tagliarle tutte uguali":
PHP:
<?php
session_start();

@include 'configa.php';

// apro la tabella che ci servirà per l'impaginazione
echo "<table>";

// recupero i dati dal DB
$query = "SELECT * FROM images WHERE id_utente='".$_SESSION['id']."' ORDER By id";



$res = mysql_query($query) or die (mysql_error());

// numero delle immagini presenti nel DB
$n_img = mysql_num_rows($res);

// verifico che il DB ospiti almeno un'immagine
if($n_img >= 1 ){
  // stabilisco il numero di righe e colonne della nostra tabella per l'impagninazione
  $colonne = 6;
  $righe=0;


  // ciclo tutti i record recuperati attraverso la nostra query
  while ($f=@mysql_fetch_array($res)){
    $righe++;
    $id = $f['id'];
    $titolo = stripslashes($f['Titolo']);
    $nome = stripslashes($f['Nome']);
    $descrizione = stripslashes($f['Descrizione']);

    // stampo la cella contenente l'immagine
    echo "<td width=\"0%\">\n";
    echo $titolo . "<br />";
    echo "<a href=\"visual.php?id=" . $id . "\">";
    echo "<img src=\"" . $path_img . "tb_" . $nome . "\" border=\"0\"></a>";
    echo "<br />" . $descrizione;
echo "<br />";
    echo "<a href=\"elimina_foto.php?id_Titolo=$id\">Elimina</a><br>";  

    echo "</td>\n";

    // quando il numero di righe equivale al valore impostato nella variabile $righe
    // procedo a chiudere la linea e ad azzerare il valore di $righe
    if ($righe == $colonne){
      echo "</tr><tr>\n";
      $righe = 0;
    }
  }
}else{
  // stampo un messaggio se il DB è vuoto
  echo "Nessuna immagine inserita.";
}
@mysql_close($cn);
echo "</table>";
?>
 
ciao Borgo,
hai detto che a te funziona tutto? hai provato?
cosi com'è non va, continua a caricare una sola foto nel db

grazie
 
ciao
ecco ho visto, se non erro, dove hai l'inghippo
dentro il secondo foreach hai l'istruzione
header("location:http://basefull.altervista.org/foto.php");
questa ti fa uscire dopo il primo inserimento, quindi i successivi non vengono inseriti.
prima prova a commentarla, poi spostala fuori dai forheac
 
header pagina tolto

Ciao Borgo grazie,
in effetti se tolgo il primo header.... mi carica tutto, ma non ritorna nella pagina foto del sito, resta nella pagina del file upload.php.

Come devo fare? grazie

PHP:
<?php
session_start();


$id_utente = $_SESSION['id'];

if(isset($_POST['Submit'])){
  // faccio un po' di inclusioni...
  include 'configa.php';
  require 'function.php';

  // Creo una array con i formati accettati
  $tipi_consentiti = array("image/gif","image/jpeg","image/png","image/bitmap" );
  //print_r($_FILES);
  $i = 0;
 // $lista = $_FILES['imagefile']['name'];
  foreach($_FILES as $file){
    foreach($file['name'] as $filename){
  // verifico che il formato del file sia tra quelli accettati
  if (in_array($file['type'][$i], $tipi_consentiti)){ 
    // copio il file nella cartella delle immagini
    copy ($file['tmp_name'][$i], $path_img . $filename);

    // recupero i dati dal form
    $titolo = addslashes($_POST['titolo']);
    $descrizione = addslashes($_POST['descrizione']);
    $nome = addslashes($filename);
    $path = $path_img . stripslashes($nome);
    $tipo = addslashes($file['type'][$i]);

    // creo la miniatura
	makeThumb($path_img,$path,$nome,$tipo,100,100,"tb_");
    makeThumb($path_img,$path,$nome,$tipo,48,48,"mini_");
    // aggiorno il database


   $query = "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,id_utente) VALUES('$titolo','$descrizione','$nome','$tipo','$id_utente')";

var_dump($query ); echo "<br />"; 

    $res = mysql_query($query) or die (mysql_error());

        header ????????????????

    // Stampo a video un po' di informazioni
  }else{
    // stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito

header("Location: foto.php");
  
  }
} 
}
}
?>
 
ciao
spostalo appena dopo la fine del primo foreach, cioe quando hai finito di ciclare tutto il $_FILES, quando ha finito torna alla pagina che vuoi
 

Discussioni simili