- Home
- Categorie
- Coding e Sistemistica
- PHP
- selezionare solo alcuni parametri da $_get
-
selezionare solo alcuni parametri da $_get
Salve a tutti, magari è banale ma non ci riesco. Non ho trovato nulla di simile nel forum
Mettiamo che ho un una stringa cosi
pagina.php?nome=laura&cognome=v&foto=foto1.jpg&foto2=foto2.jpg&foto3=foto3.jpg
devo contare e prendere solo foto1 foto2 e foto3 per creare le rispettive cartelle e salvarle
come posso fare?
Il numero di foto non è sempre lo stesso
-
Forse ho capito male la domanda, in questi casi basta usare $_GET['foto1'], $_GET['foto2'] ecc.
Ma poi vuoi creare file e cartelle in base ai parametri passati via GET? Occhio che dal punto di vista della sicurezza ti stai buttando in una situazione alquanto complicata..
-
Si ho specificato sotto che non si conosce il numero preciso di foto quindi non posso fare manualmente $_get['foto1'] $get['foto2'] servirebbe uno script che conta in automatico quante variabili che iniziano con "foto" gli sono stati inviati tramite get cosi se sono 3 crea 3 cartelle se sono 56 crea 56 cartelle e in ognuna di esse c è la rispettiva foto
-
Be se solo quei parametri hanno il nome che inizia con "foto" (seguito da numero) puoi fare un ciclo
[php]while(list($chiave,$valore)=each($_GET)){
if(substr($chiave,0,4)=='foto'){
$nome_file = $valore;
//elabora il file
}
}[/php]
-
Grazie, se scendi a caserta birra pagata anche per te
-
Io userei un array:
pagina.php?nome=laura&cognome=v&foto[]=foto1.jpg&foto[]=foto2.jpg&foto[]=foto3.jpgcosì poi nel tuo PHP puoi fare:
[php]foreach ($_GET['foto'] as $nome_file) {
... qui puoi lavorare con $nome_file
}[/php]
-
Birra anche per SEO tanto non le pago.
Provo le due soluzioni e vi faccio sapere. Ciao e grazie
-
[php]
<?php
$percorso = "../foto_mod/";include("../accesso/dati_accesso.php");
include("../accesso/dati_accesso_ftp.php");$query= "SELECT id FROM db_mod ORDER BY id DESC LIMIT 0,1"; $result= mysql_query($query); $row= mysql_fetch_array($result); $cartella = $row[id] + 1;
mkdir($percorso.$cartella, 0777);
$indice_cartella = 1;
foreach ($_GET['foto'] as $nome_file) {
mkdir($percorso.$cartella."/".$indice_cartella."/", 0777);
$file_corrente = $_FILES['foto']['tmp_name'];
$file_da_caricare = $file_corrente;
$dove_caricare = "foto_mod/".$cartella."/".$indice_cartella."/";$upload = ftp_put($ftp_connessione, $dove_caricare, $file_da_caricare, FTP_BINARY); $indice_cartella++; } ftp_quit($ftp_connessione);
?>
[/php]Scusate, ho cercato di applicare le due soluzioni ma ottengo solo delle cartelle vuote, dove sbaglio?
-
Immagino che tu voglia fare l'upload di più di un file, giusto? Allora devi fare nell'HTML:
[html]<input type="file" name="foto[]">
<input type="file" name="foto[]">[/html]tante volte quanti vuoi che siano i campi di input immaginePoi nello script che fa l'upload fai:
[php]
foreach ($_FILES['foto'] as $file) {
$file_corrente = $file['tmp_name'];
... (il resto rimane uguale) ...
}[/php]P.S.: non testata e scritta dopo una lunga giornata fra bimbi e lavoro, ergo ci sono buone possibilità che sia un po' sbagliata, ma la strada è quella...
-
Mi dice
Warning: Invalid argument supplied for foreach() in /web/htdocs/w w w.xxxxxxx.it/home/blu/riservata/upload.php on line 13
La linea 13 è
foreach ($_FILES['foto'] as $file) {
-
La pagina incriminata è online? Possiamo vederla? O puoi postare la parte di pagina HTML dove c'è il form per l'upload delle immagini?
-
In primis mi scuso per il disturbo chesto arrecando, credevo si risolvesse in meno post.
il form html è questo
formula javascript per aggiungere campi:
[html]
<script>
var i=2;
function add(id)
{
campi = document.createElement('div');
campi.id = "mine"; //assegna al div un nome
document.getElementById(id).appendChild(campi);
campi.innerHTML="<tr class="classetd"><td>Foto "+i+"</td><td><input type="file" name="foto[]" /></td></tr>";i++;
}
</script>
[/html]form per il caricamento:
[html]
<form action="upload.php" method="get" enctype="multipart/form-data">
<input type="hidden" name="id" value="1" />
<table align="center">
<tr>
<td colspan="2"><img src="../images/login_up.jpg" /></td>
</tr>
<tr class="classetd">
<td colspan="2"><div align="center"><span class="Stile1">Carica una nuova auto</span></div></td>
</tr>
<tr class="classetd">
<td>Marca</td>
<td><select name="Marca">
<option value='ALFA ROMEO'>ALFA ROMEO</option>
<option value='AUDI'>AUDI</option>
<option value='BMW'>BMW</option>
<option value='CHEVROLET'>CHEVROLET</option>
<option value='CHRYSLER'>CHRYSLER</option>
<option value='CITROEN'>CITROEN</option>
<option value='FIAT'>FIAT</option>
<option value='FORD'>FORD</option>
<option value='HYUNDAI'>HYUNDAI</option>
<option value='JAGUAR'>JAGUAR</option>
<option value='JEEP'>JEEP</option>
<option value='KIA'>KIA</option>
<option value='LANCIA'>LANCIA</option>
<option value='MERCEDES'>MERCEDES</option>
<option value='NISSAN'>NISSAN</option>
<option value='OPEL'>OPEL</option>
<option value='PEUGEOT'>PEUGEOT</option>
<option value='RENAULT'>RENAULT</option>
<option value='SMART'>SMART</option>
<option value='SUZUKI'>SUZUKI</option>
<option value='TOYOTA'>TOYOTA</option>
<option value='VOLKSWAGEN'>VOLKSWAGEN</option>
<option value='VOLVO'>VOLVO</option>
</select></td>
</tr>
<tr class="classetd">
<td>Modello</td>
<td><input name="Modello" type="text" /></td>
</tr>
<tr class="classetd">
<td>Alimentazione</td>
<td><select name="Alimentazione">
<option value='Benzina'>Benzina</option>
<option value='Diesel'>Diesel</option>
<option value='GPL'>GPL</option>
<option value='Metano'>Metano</option>
<option value="'Benzina/GPL'">Benzina/GPL</option>
<option value="'Benzina/Metano'">Benzina/Metano</option>
</select></td>
</tr>
<tr class="classetd">
<td>Cilindrata</td>
<td><input name="cilindrata" type="text" /></td>
</tr>
<tr class="classetd">
<td>Auto</td>
<td><select name="Stato">
<option value="Nuovo">Nuovo</option>
<option value="Usato">Usato</option>
</select></td>
</tr>
<tr class="classetd">
<td>Immatricolazione</td>
<td><input name="Anno" type="text" /></td>
</tr>
<tr class="classetd">
<td>Carrozzeria</td>
<td><input name="carrozzeria" type="text" /></td>
</tr>
<tr class="classetd">
<td>Km Percorsi</td>
<td><input name="km" type="text" /></td>
</tr>
<tr class="classetd">
<td>Colore</td>
<td><input name="colore" type="text" /></td>
</tr>
<tr class="classetd">
<td>Numero Proprietari</td>
<td><input name="proprietari" type="text" /></td>
</tr>
<tr class="classetd">
<td>Prezzo ?</td>
<td><input name="Prezzo" type="text" /></td>
</tr>
<tr class="classetd">
<td>Garanzia</td>
<td><input name="garanzia" type="text" /></td>
</tr>
<tr class="classetd">
<td>Accessori</td>
<td><textarea cols="30" rows="4" name="accessori"></textarea></td>
</tr>
<tr class="classetd">
<td>Foto 1</td>
<td><input type="file" name="foto[]" /></td>
</tr>
<tr>
<td colspan="2">
<div id="prova"> </div>
</td>
</tr>
<tr>
<td colspan=2><input type="button" value="aggiungi" onclick="javascript:add('prova');">
</td>
</tr>
<tr class="classetd">
<td colspan="4"></td>
</tr>
<tr class="classetd">
<td colspan="4"><div align="center">
<input type="submit" value="carica" />
</div></td>
</tr>
<tr>
<td colspan="2"><img src="../images/login_down.jpg" /></td>
</tr>
</table>
</form>
[/html]pagina upload.php[php]
<?php
$percorso = "../foto_mod/";include("../accesso/dati_accesso.php");
include("../accesso/dati_accesso_ftp.php");$query= "SELECT id FROM db_mod ORDER BY id DESC LIMIT 0,1"; $result= mysql_query($query); $row= mysql_fetch_array($result); $cartella = $row[id] + 1;
mkdir($percorso.$cartella, 0777);
$indice_cartella = 1;
foreach ($_FILES['foto'] as $file) {
$file_corrente = $file['tmp_name'];
mkdir($percorso.$cartella."/".$indice_cartella."/", 0777);
$file_da_caricare = $file_corrente;
$dove_caricare = "foto_mod/".$cartella."/".$indice_cartella."/";$upload = ftp_put($ftp_connessione, $dove_caricare, $file_da_caricare, FTP_BINARY); $indice_cartella++; } ftp_quit($ftp_connessione);
?>
<?php
$Alimentazione = $_POST['Alimentazione'];
$Modello = $_POST['Modello'];
$Marca = $_POST['Marca'];
$cilindrata = $_POST['cilindrata'];
$immatricolazione = $_POST['Anno'];
$Stato = $_POST['Stato'];
$Prezzo = $_POST['Prezzo'];
$colore = $_POST;
$carrozzeria = $_POST['carrozzeria'];
$km = $_POST['km'];
$proprietari = $_POST['proprietari'];
$garanzia = $_POST['garanzia'];
$accessori = $_POST['accessori'];
if($Prezzo<=5000){ $cat_prezzo=1;}
elseif($Prezzo>5000 and $Prezzo<=10000){ $cat_prezzo=2;}
elseif($Prezzo>10000 and $Prezzo<=15000){ $cat_prezzo=3;}
elseif($Prezzo>15000 and $Prezzo<=25000){ $cat_prezzo=4;}
elseif($Prezzo>25000 and $Prezzo<=40000){ $cat_prezzo=5;}
else{$cat_prezzo=6;}?>
<?php$query2 = "INSERT INTO db_mod (id, Alimentazione, Modello, Marca, cilindrata, immatricolazione, Stato, Prezzo, colore, carrozzeria, km, proprietari, garanzia, accessori, cat_prezzo) VALUES ('$cartella', '$Alimentazione', '$Modello', '$Marca', '$cilindrata', '$immatricolazione', '$Stato', '$Prezzo', '$colore', '$carrozzeria', '$km', '$proprietari', '$garanzia', '$accessori', '$cat_prezzo')";
$result2 = mysql_query($query2);echo "file corrente: " .$file_corrente. "<br>";
echo "file da caricare: " .$file_da_caricare. "<br>";
echo "dove caricare: " .$dove_caricare. "<br>";
?>[/php]
Gli ultimi tre echo soon delle mie prove per vedere se arrivano bene i valori. Il form non credo abbia problemi perchè quando reindirizza a upload.php vedo che nella barra dell indirizzo c'è upload.php?foto[]=foto.jpg&foto[]=foto2.jpg ecc ecc
-
Ho notato adesso i vari $_post che ho dimenticato di cambiare essendo inviati tramite GET.
Non credo comunque che sia quello l'errore o sbaglio?
-
Invece penso proprio di sì (o quantomento è uno dei problemi...) - le immagini si possono inviare solo tramite "POST", prova a cambiare quello e facci sapere
-
Ho cambiato e i messaggi di errore sono diversi
Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w .xxxx.it/home/blu/riservata/upload.php on line 19
Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w .xxxxx.it/home/blu/riservata/upload.php on line 19
Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w .xxxxx.it/home/blu/riservata/upload.php on line 19
Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w.xxxxxx.it/home/blu/riservata/upload.php on line 19
Warning: ftp_put() expects parameter 3 to be string, array given in /web/htdocs/w w w.xxxxx.it/home/blu/riservata/upload.php on line 19
file corrente: Array
file da caricare: Array
dove caricare: foto_mod/18/5/linea 19:
$upload = ftp_put($ftp_connessione, $dove_caricare, $file_da_caricare, FTP_BINARY);ho provato a caricare solo 2 immagini ma ha creato 5 cartelle
-
Scusa un secondo... guardando bene il tuo codice ho notato una cosa:
[php]
mkdir($percorso.$cartella."/".$indice_cartella."/", 0777);
[/php]assomiglia molto a:
[php]
$dove_caricare = "foto_mod/".$cartella."/".$indice_cartella."/";
[/php]Dato che mkdir crea la cartella in LOCALE, e tu copi il file tramite ftp in un host che non vedo... stai usando le funzioni ftp per spostare i file nel tuo server stesso?
-
PS: quando ti ritrovi array che non sai cosa contengono, prova a farne un printr per mostrarne i contenuti.
Ora, io non ho mai usato la sintassi "campo[]" nei form, sinceramente non sapevo nemmeno che si potesse usare, e per queste cose ho sempre fatto dei workaround in js XD
Tuttavia... potrebbe anche darsi ( non lo so, avanzo un'ipotesi ), che in questi casi, l'array $_FILES non sia strutturato così:
$_FILES['campo'][0]['tmp_name']; ...
ovvero come hai supposto tu, ma in questo modo:
$_FILES['campo']['tmp_name'][0]; ...
In questi casi comunque ti conviene sempre esaminare le cose che non conosci, risparmi un sacco di tempo...
-
Scusa non avevo notato la pagina 2 del post. i file sono caricati dal pc, tramite form in html , sul server. Ma non capisco dove sia l'errore adesso non incrementa più nemmeno $indice_cartella alla fine del ciclo
-
Lo script viene eseguito in locale o sul server?
Nel secondo caso, devi usare la funzione move_uploaded_file per spostare il file, e tutto quell'ambaradan con le ftp non è necessario ( o meglio, non ha senso ).
-
Niente, proprio non ci riesco. Sono arrivata a questo
[php]
<?php
$percorso = "../foto_mod/";include("../accesso/dati_accesso.php");
$query= "SELECT id FROM db_mod ORDER BY id DESC LIMIT 0,1"; $result= mysql_query($query); $row= mysql_fetch_array($result); $cartella = $row[id] + 1;
mkdir($percorso.$cartella, 0777);
for($i=0;$i<count($_FILES['foto']);$i++){
mkdir($percorso.$cartella."/".$i."/", 0777);
$dove_caricare = "foto_mod/".$cartella."/".$i."/";
move_uploaded_file($_FILES['foto']['tmp_name']."['".$i."']", $dove_caricare.$_FILES['foto']['name']."['".$i."']");
echo "cartella: " .$i. "<br>";
}
?>
[/php] ma il risultato è sempre lo stesso, cioè mi crea sempre 5 cartelle anche se carico due foto,e queste cartelle sono vuote.