mancato upload

  • Creatore Discussione Creatore Discussione helpdesk
  • Data di inizio Data di inizio
Ciao borgo, ho corretto così ma non funziona ugualmente
<?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="http://www.nomesito.it/prodotti/";
$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);
?>
 
Ultima modifica:
mi da questo errore nela rinomina oltre a non effettuare l'upload

Warning: rename(,4.jpg) [function.rename]: Permission denied in D:\inetpub\vhosts\beautyluxury.it\httpdocs\e.commerce\php\upload.php on line 28
errore
 
Questo invece mi fa l'upload ma quando inserisco una seconda immagine mi elimina la prima e mi scrive la seconda e non riesco a capire dove è dichiarato il fatto che mi riscriva sempre e solo uan foto sola :( però almeno fa l'upload :(



<?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>";
$percorso= './';
$uploadfile = ''.$percorso.basename( $_FILES['Filedata']['name'] );
$success = move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
$nomefileimmagine=$storage.$foto;
if($success){
if (file_exists($nomefileimmagine)){
unlink($nomefileimmagine);
}
$nuovofile=''.$percorso.$_FILES['Filedata']['name'];
rename($nuovofile,$nomefileimmagine);
echo($nomefileimmagine);
}

mysql_close($connessione);
?>
 
Ragazzi credo di aver capito qual'è il problema l'ultimo script che ho postato mi fa fare l'upload ma quando inserisco la seconda immagine mi rinomina la prima con il nome della seconda esempio:
se faccio l'upload di 1.jpg e poi carico 2.jpg mi carica 2.jpg al posto di 1.jpg ovvero mi rinomina non solo la foto presa dall'hd ma anche quella che c'è nella cartella e non so in quale punto dello script è stato dichiarato questo e quale metodo deve essere eliminato :(

<?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>";
$percorso= './';
$uploadfile = ''.$percorso.basename( $_FILES['Filedata']['name'] );
$success = move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
$nomefileimmagine=$storage.$foto;
if($success){
if (file_exists($nomefileimmagine)){
unlink($nomefileimmagine);
}
$nuovofile=''.$percorso.$_FILES['Filedata']['name'];
rename($nuovofile,$nomefileimmagine);
echo($nomefileimmagine);
}

mysql_close($connessione);
?>
 
Ciao borgo,si infatti l'ho rinominato in percorso ma non è quello il problema mi rinomina la foto e la sostituisce :(

<?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>";
$percorso= './';
$uploadfile = ''.$percorso.basename( $_FILES['Filedata']['name'] );
$success = move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
$nomefileimmagine=$percorso.$foto;
if($success){
if (file_exists($nomefileimmagine)){
unlink($nomefileimmagine);
}
$nuovofile=''.$percorso.$_FILES['Filedata']['name'];
rename($nuovofile,$nomefileimmagine);
echo($nomefileimmagine);
}
 
ciao, anche se è vero che "gallina vecchia fa buon brodo"quasto non è il caso degli script.
arriavato a quasto punto, secondo me, conviene azzerare, prendere matita e carta e ripensare il tutto.
 
Per una volta sono d'accordo con quel vecchio bavoso... ehm, con borgo italia :D
A parte gli scherzi, ormai hai le idee troppo confuse ed iniziano ad esserci troppi script "volanti" che non funzionano. Sai che cosa faccio io in questi casi? Cancello tutto quello che ho scritto e ricomincio da capo. Funziona sempre, garantito!
Come altro consiglio ti posso dire di scrivere codice più ordinato, mi si incrociano gli occhi a leggere quello che scrivi. L'ordine aiuta ad evitare molti errori.
 
ok ecco qua ragazzi ho riscritto tutto.
Tenterò di essere il più chiaro possibile e di farvi capire cosa devo fare e cosa non funziona nel sistema che ho creato.
Praticamente sto creando un upload di immagini prodotto che devono essere prelevate opportunamente e per farlo ho bisogno di associare loro un nome predefinito.
Dato che non so di preciso quanti prodotti saranno ho deciso di assegnare loro un numero crescente ad ogni upload.
Esempio: 0.jpg, 1.jpg, 2.jpg etc etc.
Per fare questo ho creato uno script che si occupa di scrivere il numero nel recordeset del db e quello funziona benissimo, però poi per poter inserire in una cartella del mio web server le immagini con l'esatto nome assegnatoli ovvero il numero esatto ho creato lo script che ho riportato sotto.
Tale script si occupa per prima cosa di intercettare il numero con una query di select, di seguito creo un ciclo whyle dove creo una variabile chiamata $n e la inserisco in un array chiamato memoria che contiene l'id autoincrement del database poi conto il contenuto dell'array con il metodo count.
A questo punto ho creato un array sensibile all'incremnto e al decremento di un immagine, quindi con il primo script scrivo 1.jpg e dopo con il secondo prendo il numero 1 creo la tipologia concatenando la variabile $foto e la variabile $tipologia e passo il nome esatto all'upload.
Il problema è che l'upload ogni tanto fa scherzi e delle volte sovrascrive per esempio la foto chiamata 1.jpg e la rinomina in 4.jpg
e non ho capito proprio perchè e sto diventando pazzo. :(

<?php

////////////////// PARAMETRI DB //////////////////

$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpass = 'dbpassword';
$dbname = 'dbname';

/////////////////// CONNESSIONE DB ////////////

$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.");

////////////////////////// QUERY SELECT ////////////////

$sql=mysql_query("SELECT immagine from prodotti");

////////////////////////////////////////////////////////////

//////////////////// CICLO WHYLE //////////////////////

// il ciclo whyle mi serve per prelevare un numero all'interno del recordeset del db tale numero è ricavato dall'id autoincrement del db e l'ho raggruppato in un array chiamato $memoria che mi servirà
per evidenziare il tracciato del nome di ogni singola immagini con un numero crescente ovvero: 0.jpg , 1.jpg, 2.jpg etc etc.... ///////

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

/////////////////////////////////////////////////////////////////

///// VARIABILE N + ARRAY MEMORIA + TIPOLOGIA "JPG" + CONCATENAMENTO

// queste variabili mi servono per creare il nome della foto da passare all'upload///

$memoria=$n;
$memoria=count($memoria);
$tipologia=".jpg";
$foto=$memoria.$tipologia;

//////////////////////////////// UPLOAD ///////////////////////

/// mia analisi dello script preso dalla rete + mie perplessità: ///

$percorso= './'; // indica il percorso dove immettere la foto

$uploadfile = ''.$percorso.basename( $_FILES['Filedata']['name'] ); // concatenamento di percorso più memorizzazione dell' immagine presa dall'hd///

$sposto=move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile ); // metodo move_uploaded_file per spostare la foto nella cartella //

$nomefileimmagine=$percorso.$foto; //contenitore che raggruppa percorso più foto//

if($sposto){ // perprlessità perchè questa if ?

if (file_exists($nomefileimmagine)){ // questo verifica se l'immagine esiste già //

unlink($nomefileimmagine); // metodo unlink a cosa serve? //

}

$nuovofile=''.$percorso.$_FILES['Filedata']['name']; // Perchè questa variabile ? è lei la disgraziata che rinomina la foto esistente con l'ultimo upload effettuato?//

rename($nuovofile,$nomefileimmagine); // metodo rename per rinominare//

echo($nomefileimmagine); // echo verifica //

}

/////////////////// CONNESSIONE ELIMINATA

mysql_close($connessione);
?>

HELP ME PLEASE :(
 
Ultima modifica:
ciao
ti rinvio lo script con alcune note (sperando che alessandro sia d'accordo con me)

PHP:
<?php 
////////////////// PARAMETRI DB ////////////////// 
//TOLTA PERCHE VA BENE E PORTA VIA SPAZIO
//////////////////// CICLO WHYLE //////////////////////
 
/*il ciclo whyle mi serve per prelevare un numero all'interno del recordeset del db tale numero è ricavato dall'id autoincrement del db e l'ho raggruppato in un array chiamato $memoria che mi servirà 
per evidenziare il tracciato del nome di ogni singola immagini con un numero crescente ovvero: 0.jpg , 1.jpg, 2.jpg  etc etc.... ///////
QUESTO SUCCEDE (PER CASO), COL METODO CHE USI, SOLO SE GLI id SONO CONSECUTIVI 1, 2, 3, ECC...
SE ELIMINI UNA FOTO (ES. QUELLA CON id==2) E VAI AD INSERIRE UNA NUOVA FOTO, IL SUO id DIVENTA 4, PER CUI NELLA tabella
NON AVRAI id CONSECUTIVI MA 1, 3, 4 ECC... RIBADISCO QUELLO CHE FAI, ALLA FIN FINE, E' SOLO CONTARE IL NUMERO DEI RECORD
PER CUI NON OTTERAI 4.jpg MA 3.jpg
AL CONTRARIO SE VUOI CHE LA FOTO ABBIA UN NOME SUCCESSIVO DEVI
FARE UNA SELECT CHE TI ESTRAE IL MAX(id) E NOMINI LA LA NUOVA FOTO CON
$id_successivo=$massimo_id_nella_tabella + 1;
$foto=$id_successivo.".jpg";
*/
while ($mn=mysql_fetch_array($sql)){
 $n[]=$memoria['id_prodotto'];
 }
/////////////////////////////////////////////////////////////////
/////  VARIABILE N + ARRAY MEMORIA + TIPOLOGIA "JPG" + CONCATENAMENTO 
// queste variabili mi servono per creare il nome della foto da passare all'upload///
//CONTINUO A NON CAPIRE PERCHE TU NON FACCIO IL SEMPLICE mysql_num_rows SECONDO ME, PROVA
//$quanti=mysql_num_rows($sql);//riga che conta i record
 $memoria=$n;
 $memoria=count($memoria);// guarda http://www.php.net/manual/en/function.count.php
 $tipologia=".jpg"; 
 $foto=$memoria.$tipologia; //?? E' QUESTO IL NOME CON CUI L'IMMAGINE SARA' ARCHIVIATA??
/* E QUESTO
if($memoria==$quanti){
echo "vedi che i due numeri sono gli stessi?";
}else{
echo "HAI RAGIONE TU, sono diversi";
}
*/
//////////////////////////////// UPLOAD /////////////////////// 
/// mia analisi dello script preso dalla rete + mie perplessità: ///
$percorso= '../';    // indica il percorso dove immettere la foto IO METTEREI UN PUNTO IN PIU' NON SI SA MAI
// A CHE TI SERVE IL CONCATENAMENTO ''.  NELLA RIGA SOTTO ??
$uploadfile = ''.$percorso.basename( $_FILES['Filedata']['name'] );  // concatenamento di percorso più memorizzazione dell' immagine presa dall'hd///
$sposto=move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );   // metodo move_uploaded_file per spostare la foto nella cartella //
$nomefileimmagine=$storage.$foto;  //contenitore che raggruppa percorso più foto//NON DOVEVAESSERE $percorso?
if($sposto){  // perprlessità perchè questa if ? VERIFICA L'AVVENUTO move (TRUE o FALSE)
if (file_exists($nomefileimmagine)){  // questo verifica se l'immagine esiste già //
unlink($nomefileimmagine); // metodo unlink a cosa serve? // CANCELLA L'IMMAGINE CON NOME $nomefileimmagine SE ESISTE DI GIA
}//fine if file_exists
//IO METTEREI basename ANCHE QUI
$nuovofile=''.$percorso.basename($_FILES['Filedata']['name']); // Perchè questa variabile ? è lei la disgraziata che rinomina la foto esistente con l'ultimo upload effettuato?//
rename($nuovofile,$nomefileimmagine);  // metodo rename per rinominare//
echo($nomefileimmagine);  // echo verifica //
}//fine if $sposto
/////////////////// CONNESSIONE ELIMINATA, puoi anche non scriverlo, si chiude autonomamente alla chiusura della pagina
  mysql_close($connessione);
?>
 
Ciao borgo, grazie della risposta.
Unica cosa che non ho capito è perchè credi che il numero della foto possa via via essere differente in base all'id? se facessi il confronto del numero in base all'id autoincrement si perchè se ne tolgo una poi dice esempio ci sono 3 foto ne tolgo una e ne metto un altra dice 4 e ne ho 3 ma io ho messo l'id in un array e ho contato l'array e il numero lo do in base al numero di valori che ci sono nell'array e non in base all'id quindi se l'array contiene 4 valori mi chiama l'ultima foto 4 se la tolgo l'array dichiara 3 valori e poi immettendola ancora mi parte sempre da 4 perchè ho immesso comunque un quarto valore nell'array così facendo ottengo un array dall'id autoincrement sensibile appunto all'incremento e decremento grazie al metodo count

infatti faccio il vuole e muto $n in memoria che ha i numeri id ma è poi un array poi conto memoria e mando all'upload il numero del conteggio di memoria e non l'id del db.

Quindi dovrebbe funzionare tutto bene ora che l'ho riscritto?
non ci trovi nessuna anomalia? :(

/////////////////////////////////////////

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

/////////////////////////////////////////////////////////////////

///// VARIABILE N + ARRAY MEMORIA + TIPOLOGIA "JPG" + CONCATENAMENTO

// queste variabili mi servono per creare il nome della foto da passare all'upload///

$memoria=$n;
$memoria=count($memoria);
 
ciao
hai letto il link sul manuale di php?

$memoria=$n;
in memoria ora hai l'array

$memoria=count($memoria);
ora in memoria hai il numero degli array indipendentemente dal contenuto di ogni singolo $n[]
 
dimenticavo
a prima vista non ci sono anomalie

comunque prova a decommentare (poi le togli) le righe

$quanti=mysql_num_rows($sql);//riga che conta i record

e

if($memoria==$quanti){
echo "vedi che i due numeri sono gli stessi?";
}else{
echo "HAI RAGIONE TU, sono diversi";
}

e guarda cosa ti restituisce
 
Sinceramente ho qualche perplessità, ad esempio perché definisci i parametri di connessione al database se poi con mysql_connect usi gli stessi ma come stringhe e non variabili.

Poi non capisco come faccia a funzionare se nella connessione al database non definisci il nome del database che devi selezionare tra apici singoli o doppi, quindi trattandolo come una costante.

Ti vorrei far anche notare che nei commenti del ciclo while non hai messo le due slash all'inizio della seconda riga, quindi l'interprete PHP ti dovrebbe restituire un errore. Non è forse così?

Sempre nel ciclo while definisci come array che ogni volta dovrà contenere la riga del database $mn, ma quando si tratta di assegnare il valore ad $n ti riferisci a $memoria.

Ancora una volta nel ciclo while, quando selezioni i dati dal database specifichi che deve essere selezionato solamente il campo immagine, quindi nell'array non sarà contenuto il valore id_prodotto.

La mia versione, non testata:
PHP:
<?php
/* PARAMETRI DEL DATABASE */
$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpass = 'dbpassword';
$dbname = 'dbname';

/* CONNESSIONE AL DATABASE */
$connessione = mysql_connect($dbhost, $dbuser, $dbpass) or die('Impossibile connettersi al server host');
mysql_select_db($dbname, $connessione) or die ('Impossibile selezionare il database.');

/* QUERY DI SELEZIONE */
$sql = mysql_query("SELECT immagine from prodotti");

/* CICLO WHILE */
$n = array();
while($mn = mysql_fetch_array($sql))
	$n[] = $memoria['id_prodotto'];

/* CONCATENAMENTO E DEFINIZIONE TIPOLOGIA */
$tipologia = '.jpg';
$foto = count($n) . $tipologia;

/* UPLOAD DELL'IMMAGINE NELLA CARTELLA */
$percorso= './';
$uploadfile = $percorso . basename($_FILES['Filedata']['name']);
$nomefileimmagine = $percorso . $foto;

if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadfile))
{
	if(file_exists($nomefileimmagine))
		unlink($nomefileimmagine);

	/* RINOMINA DEL FILE DI IMMAGINE */
	$nuovofile = $percorso . $_FILES['Filedata']['name'];
	rename($nuovofile, $nomefileimmagine);
	echo($nomefileimmagine);
}

/* CHIUSURA CONNESSIONE */
mysql_close($connessione);
?>
Per borgo italia: la funzione unlink cancella un file.
 

Discussioni simili