mancato upload

  • Creatore Discussione Creatore Discussione helpdesk
  • Data di inizio Data di inizio

helpdesk

Utente Attivo
30 Set 2009
726
0
16
Pesaro
Salve ragazzi dopo 4 giorni di stress sono giunto ad una concluisione per ovviare ad un problemi che mi assillava da giorni e che ha visto alcuni di voi protagonisti "grazie".
Il problema è quello di inviare un percorso specifico di un immagine nel recordes immagine del db.
Il problema è che il numero delle immagini si deve via via incrementare e decrementare in conseguenza dell'immissione e dell'eliminazione di un immagine.
Pertanto ho creato un sistema che comunichi con l'id dell'immagine e che racchiuda l'id autoincrement in un array da contare così facendo sono riuscito ad ottenere un contenitore sensibile all'incremento e al decremento delle immagini e sino a qui perfetto.
Ora ho problemi con l'upload che non mi carica la foto anche se gli invio il numero esatto dell'immagine come nome sotto forma di dato stringa e non so perchè.
Praticamente lo script che ho creato si occupa di intercettare il numero attraverso ad una query di select di seguito la rende disponibile per la rinomina ma pur ottendendo esattamente il numero nell'echo non mi carica la foto in cosa sbaglio?


<?php
$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpass = 'dbpassword';
$dbname = 'dbname';
$connessione = mysql_connect("localhost", "admin_ec_beaty", "dbpassword") or die("Impossibile connettersi al server host");
mysql_select_db(beauyit1_ec, $connessione) or die ("Impossibile selezionare il database.");

$dialogo="risposta=".$dialogo;

$sql=mysql_query("SELECT immagine from prodotti");
while ($mn=mysql_fetch_array($sql)){
$n[]=$m['id_prodotto'];
}
$memoria=$n;
$memoria=count($memoria);
$percorso="prodotti/";
$tipologia=".jpg";
$foto=$memoria.".jpg";
echo"$foto<br>";
$storage = './';
$uploadfile = ''.$storage.basename( $_FILES['Filedata']['name'] );
$success = move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
$nomefileimmagine=$storage.$foto;
if($success){
if (file_exists($nomefileimmagine)){
echo"sono in if";
unlink($nomefileimmagine);
}
$nuovofile=''.$storage.$_FILES['Filedata']['name'];
rename($nuovofile,$nomefileimmagine);
echo($nomefileimmagine);
}else{
}

mysql_close($connessione);
?>
 
ciao
intanto una "piccola" cosa

while ($mn=mysql_fetch_array($sql)){
$n[]=$m['id_prodotto'];
}

deve essere

while ($mn=mysql_fetch_array($sql)){
$n[]=$mn['id_prodotto'];
}

oppure

while ($m=mysql_fetch_array($sql)){
$n[]=$m['id_prodotto'];
}

intanto metti a posto questo poi riprova
 
Cioa borgo grazie per la risposta.
Ho provato ma non funziona ugualmente non mi fa l'upload della foto e non so perchè :(
 
ciao
diventa difficile per me provare lo script, anche perchè dovrei farmi db+tabelle.
ti consiglio di spargere dopo ogni riga un var_dump per vedere cosa ti restituisce. esempio


var_dump($dialogo);
$dialogo="risposta=".$dialogo;
var_dump($dialogo);

da cui vedi cosa contiene $dialogo e che tipo di variabile è

e così via riga per riga, variabile dopo variabile sino a che non scopri quello che non va. fai anche per le query in quanto

$sql=mysql_query("SELECT immagine from prodotti");
var_dump($sql);
ti restituisce TRUE o FALSE se la query ha funzionato o no

quando hai trovato l'errore i var_dump li elimini
 
ok ci provo comunque la query funziona perchè mi da come echo l'esatto numero preso dal database è che non immette fisicamente la foto nella cartella mbhoo
 
ciao, ho notato una cosa, tu fai

1.$sql=mysql_query("SELECT immagine from prodotti");
2.while ($mn=mysql_fetch_array($sql)){
3.$n[]=$m['id_prodotto'];
4.}
5.$memoria=$n;
6.$memoria=count($memoria);
7.$percorso="prodotti/";
8.$tipologia=".jpg";
9.$foto=$memoria.".jpg";

alla riga 1 fai la query che ti estrae "immagine" dalla tabella prodotti
dalla 2 alla 4 fai il while che ti inserisce nell'array $n l'id del prodotto, avendo con la riga 1 selezionato tutti gli n prodotti in $n[0] il primo id e in $[n] l'ultimo id
alla riga 5 attibusisci a $memoria l'array $n, quinidi diventa $n==$memoria (cioè memoria diventa un array uguale n)
alla riga 6 conti i quanti valori hai nell'array, potevi usare direttamente count($n) come risultato, in fondo, tale numero è uguale al numero dei record che hai nella tabella prodotti (tra l'altro $memoria da array diventa intero)
quindi ti bastava fare $memoria=mysql_num_rows($sql); senza tanti passaggi
per ora questo
 
ciao borgo ho provato ma non funziona.
Questi giri comunque mi servono per creare il nome dell'immagine prelevando un valore numerico dal database e con il concatenamento ottengo il numero.jpg che mi serve per rinominare l'immagine esattamente con il numero che prendo dal database quindi la locica è buona ma il problema è che non funziona e non mi sposta nella cartella infatti i var_drum funzionano tutti sino a quello che deve spostare nella cartella il file :(
 
ciao
quindi quello che non funzia è

$uploadfile = ''.$storage.basename( $_FILES['Filedata']['name'] );
$success = move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );

hai fatto questa verifica?

var_dump(basename( $_FILES['Filedata']['name'] ));
$uploadfile = ''.$storage.basename( $_FILES['Filedata']['name'] );
var_dump($uploadfile);
$success = move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
var_dump($success);//dovrebbe dare BOOL e TRUE o FALSE

se è giusto, forse commetti un errore sui percorsi, non credo che sia un errore dovuto ai permessi in quanto ti avrebbe dato errore
 
ho modificato il concatenamento e mi carica la foto ma solo quando immetto il file nella cartella all'upload vero e proprio dal form non la carica :(

<?php
$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpass = 'dbpassword';
$dbname = 'dbname';
$connessione = mysql_connect("localhost", "admin_ec_beaty", "dbpassword") or die("Impossibile connettersi al server host");
mysql_select_db(beauyit1_ec, $connessione) or die ("Impossibile selezionare il database.");

$dialogo="risposta=".$dialogo;

$sql=mysql_query("SELECT immagine from prodotti");
while ($mn=mysql_fetch_array($sql)){
$n[]=$memoria['id_prodotto'];
}
$memoria=$n;
$memoria=count($memoria);
$tipologia=".jpg";
$foto=$memoria.$tipologia;

echo"$foto<br>";
$storage = './';
$uploadfile = ''.$storage.basename( $_FILES['Filedata']['name'] );
var_dump($uploadfile);
$success = move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
var_dump($success);
$nomefileimmagine=$storage.$foto;
if($success){
if (file_exists($nomefileimmagine)){
unlink($nomefileimmagine);
var_dump($nomefileimmagine);
}
$nuovofile=''.$storage.$_FILES['Filedata']['name'];
rename($nuovofile,$nomefileimmagine);
var_dump($nuovofile);
echo($nomefileimmagine);
}
mysql_close($connessione);
?>
 
ciao

se il
var_dump(basename( $_FILES['Filedata']['name'] ));
ti restituisce
11.jpg
ed
var_dump($uploadfile);
ti restituisce string(2) "./"

a questo punto è logico che non uploadi (bool FALSE)

l'errore sta nella variabile $uploadfile che non si setta come vuoi tu (sembra che non faccioa il concatenamento), prova a scriverla senza il '' iniziale

$uploadfile = $storage.basename( $_FILES['Filedata']['name'] );



e riprova
 
ciao
non capisco cosa intendi esattamente
... mi carica la foto ma solo quando immetto il file nella cartella all'upload vero e proprio dal form non la carica

con quasto vuoi dire che dal form non legge $_FILE? ma non avevi detto che restituiva 11.jpg?
 
si si sembra funzionare era il mio server dall'ftp non mi aggiornava bene il file "aruba". :) faccio altre prove ma credo sia risolto ti faccio sapee subito. Infinite grazie
 
ciao
credo che tu stia facendo l'errore che facevo io tempo fa
caricavo una pagina
verificavo e mi dava errore
correggevo e ricaricavo
riverificavo e sempre errore
e così via impazzendo
poi dopo varie prove ho azzerato la chache (la cosa si presenta in modo maggiore con ff) e ho risolto
 
Ragazzi credevo di aver risolto invece non è così poichè il problema sembra proprio essere l'upload allora ho modificato l'upload in questa maniera:

<?php
header('Cache-Control: no-cache');
header('Pragma: no-cache');
$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpass = 'dbpassword';
$dbname = 'dbname';
$connessione = mysql_connect("localhost", "admin_ec_beaty", "dbpassword") or die("Impossibile connettersi al server host");
mysql_select_db(beauyit1_ec, $connessione) or die ("Impossibile selezionare il database.");

$dialogo="risposta=".$dialogo;

$sql=mysql_query("SELECT immagine from prodotti");
while ($mn=mysql_fetch_array($sql)){
$n[]=$memoria['id_prodotto'];
}
$memoria=$n;
$memoria=count($memoria);
$tipologia=".jpg";
$foto=$memoria.$tipologia;

echo"$foto<br>";
$percorso="./";
$percorso_temp=$_FILE["nome_file"]["tmp_name"];
$nome_file=$FILES["nome_file"]["name"];
rename($nome_file,$foto);
if(copy($percorso_temp,$percorso.$nome_file)){
echo"File inviato:$nomefile";
}else{
echo"errore";
}
}
mysql_close($connessione);
?>

ma non carica l'immagine dovrebbe rinominarla e caricarla :(
 
ciao
mi è venuto un dubbio e ho fatto una prova elementare con questo scriptino

<?php
if(isset($_POST['carica'])){
$tmp_name = $_FILES["foto"]["tmp_name"];
$nome_nuovo="prova_caricamento.jpg";
move_uploaded_file($tmp_name, $nome_nuovo);
}
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
foto <input name="foto" type="file"><br>
<input type="submit" name="carica" value="carica">
</form>

che avevo messo dentro un cartella, quindi (ragionamento dimostratosi errato) mi sono detto che la foto da caricare l'avrei trovata dentro la stessa cartella non avendo messo il percorso.
ho provato a caricare una foto e sono andato nella cartella per vedere se l'aveva caricata: la foto non c'era. e qui il dubbio.
con esplora risorse ho cercato prova_caricamento.jpg e qui l'ho trovata, in tutt'altra parte (nella cartella apche????) che non c'entrava niente. quindi (deduzione) si tratta di un problema di percorsi.
se stai lavorando in locale fai una prova e con esplora risorse cerca la foto per capire dove (e perchè) è andata a finire
 

Discussioni simili