Pulsante cancella immagini

Monumentale

Utente Attivo
14 Nov 2009
79
0
0
Ciao a tutti, grazie ai vosti precedenti aiuti, ho aggiunto al mio sito "agenzia immobiliare" il form di caricamento immagini che popola una tabella MySQL con i riferimenti e copia le immagini e le loro miniature in apposite cartelle.
Adesso vorrei fare comparire a fianco di tutte le miniature che vedo mentre inserisco anche un pulsante "cancella" capace sia di cancellare la riga del db, ma anche le relative immagini.

Sicuramente ne avrete già discusso ma non ho trovato.
Ho visto che non posso utilizzare il controllo "onclick" associato ad una funzione perché mi da fatal error, dunque penso che la strada giusta sia quella di associare al pulsante un "document.location.href" con file php che faccia il duro lavoro.

Ciao
 
HTML non può interagire direttamente con PHP, ma può avvenire solo il contrario. Il parametro onclick serve per definire la funzione da chiamare quando si clicca su un elemento. Se vuoi fare la stessa cosa con PHP, io ti consiglierei di usare un link o un'immagine, che puoi linkare direttamente. Esempio:
PHP:
<?php
// supponendo che tu sia in un ciclo
// e che $id rappresenti l'ID dell'immagine
echo "<a href=\"cancella.php?id={$id}\">Cancella</a>";
?>
Poi nella pagina cancella.php ti basterà selezionare la relativa riga dal database, cancellare l'immagine e successivamente cancellare anche il record nella tabella.
 
Ho in parte risolto (in parte perché ci sono ancora alcuni dettagli che vorrei migliorare) ma vorrei tuoi/vostri consigli
Innanzitutto ad ogni immagine associo un pulsante così
PHP:
echo "<input type=\"button\" name=\"img\" value=\"cancella\" 
		onclick=\"document.location.href('cancella_immagine.php?act=delete&id=".$id ."');\"> <br />";
    echo "<a href=\"" . $path . "/" . $nome . "\"targhet=\"_blank\">";//collegamento ipertestuale all'immagine
    echo "<img src=\"" . $path . "/tb_" . $nome . "\" border=\"0\"></a>";
il file a cui si fa riferimento è quello sotto riportato, che concludo con una chiamata a tornare alla pagina d'origine condervando l'id dell'immobile (campo codice)
PHP:
<?php
if($_GET['act'] == "delete") 
{   include 'config.php';
    $id = (int)$_GET['id']; 
	$query = "SELECT * FROM immagini WHERE id = '$id' ";
	$risultato = mysql_query($query);
		if ($risultato) 
		{
		$riga = mysql_fetch_array($risultato);
		$codice =stripslashes($riga['codice']);
		$path = stripslashes($riga['path']);
		$nome = stripslashes($riga['nome']);
		unlink($path . "/". $nome ); //cancello l'immagine principale
		unlink($path . "/tb_" . $nome ); //cncello la sua miniatura
		}
		
	
    if($id > 0)   
        { mysql_query("DELETE FROM immagini WHERE id=".$id); }
    else 
       { echo "Id errato"; }
} 
header("Location:Inserisci_Immagine.php?codice=$codice");
//tutto l'altro 
?>
con questo file vado a cancellare in un colpo solo sia la riga della tabella db che i due file immagine e miniatura.
Fatemi sapere cosa ne pensate perché io sono talmente inesperto ed ignorante che magari sto percorrendo strade tortuose senza motivo.
P.S.: ho già scritto un certo numero di pagine in php che lavorano sul db e provando tutto in locale sembra funzionare, non è che portando in remoto ci saranno problemi?
come faccio a copiare la struttura locale di una tabella (phpmyadmin) e ricrearla identica in remoto?

Ciao
 
Mi sembra che il tuo script non presenti nessun errore di logica. L'unica cosa che farei è controllare se l'immagine ancora esiste con file_exists. Dovresti dare per scontato che esista, ma non si sa mai. Sarebbe meglio evitare che l'utente legga informazioni sensibili.

Per quanto riguarda il trasferimento dello script su un server remoto, non penso che ci siano particolari problemi, a meno che il tuo software non usi funzionalità presenti solo in una determinata versione di PHP che il tuo server non supporta, ma non mi sembra.

Per trasferire una tabella sul server remoto, devi entrare in phpMyAdmin, selezionare il tuo database, cliccare sulla tabella e selezionare la scheda Esporta, quindi cliccare su Esegui. Poi in remoto basterà selezionare il database, cliccare sulla scheda Importa, selezionare il file precedentemente generato e cliccare su Esegui.
 
Mi sembra che il tuo script non presenti nessun errore di logica. L'unica cosa che farei è controllare se l'immagine ancora esiste con file_exists. Dovresti dare per scontato che esista, ma non si sa mai. Sarebbe meglio evitare che l'utente legga informazioni sensibili.

Scusa l'ignoranza, la la verifica la devo fare quando inserisco o quando cancello l'immagine?
Inoltre quando dici che sarebbe meglio evitare che l'utente legga informazioni sensibili, a cosa ti riferisci e come proponi di risolvere?

Infine, che ti risulti ci sono limiti nel numero di campi di una mysql_query("insert into...") VALUES....
perché arrivato al 23° campo non c'è verso che vada a buon fine e mi da sempre:
problema query insert
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'long, descrizione) VALUES (NULL, 'ohlkjd', 'Residenziale', 'Vendita', 'Altro', '' at line 1

Se non c'è soluzione metto gli ultimi 2 campi in una tabella separata, però volevo evitare...

Ciao e grazie
 
Per quanto riguarda l'errore ho risolto, un pò a fortuna, mi sono accorto che il problema altro non era nel nome che avevo dato ai campi 'lat' e 'long' o alla lunghezza di 'lat' che è di soli 3 caratteri. Ho sostituito i nomi e tutto funziona
 
La verifica, chiaramente, la devi fare quando l'utente prova a cancellare l'immagine. Sarebbe utile anche in fase di inserimento, magari eventualmente rinominandola, ma è difficile che due immagini abbiano lo stesso nome.

Per "informazioni sensibili" intendevo proprio quelle che l'utente potrebbe leggere se lo script tenta di cancellare un'immagine inesistente.
 
Non mi è ancora molto chiaro, comunque non ci sono problemi perché le modifiche ai dati del db le posso fare solo io od un mio collaboratore.
Gli utenti si limitano ad accedere al sito ed a interpellare il db per leggere le disponibilità

P.S.: off topic, ho aggiunto la pagina di modifica tabella per quanto riguarda la parte descrittiva (per le foto già risolto), caricando il form di inserimento ma dando come valore quello letto nel db.
Modifico e poi attraverso submit eseguo query UPDATE. Va tutto benissimo, solo che dopo aver premuto il tasto del form, la pagina viene ricaricata con tutti gli errori dovuti al fatto che adesso le variabili usate per le option value sono indefiniti.
La cosa più comoda sarebbe, finito il codice PHP andare ad un'altra pagina, ho provato con head location ma mi da errore:book:
 
Bene, ho risolto anch questo problema, con degli if che verificano l'esistenza di queste variabili e, in caso contrario le settano a "". Poi ho preso un'altra strada ancora più radicale, dopo avere premuto submit e modificato il record della tabella db, la variabile "codice" si svuota. Con un controllo ad inizio pagina dico: se "codice"==vuoto stampa messaggio "modifica eseguita con successo" e permetti di tornare all'elenco immobili.

Ho invece un nuovo problemuccio (non so se solo perché lavoro in locale), tutti i pulsanti creati nelle pagine, ad eccezione di quelli di submit all'interno dei form, funzionano solo con IE e non con FF. Per risolver dovrei sostituirli con delle icone associate a href.
Posto il frammento di codice che non va con FF
PHP:
<input name="inserisci" type="button" value="inserisci immobile" onclick="document.location.href('Inserisci_Immobile.php');" />
<input name="elenco" type="button" value="elenco inseriti" onclick="document.location.href('elenco_immobili.php');" />

Luca
 
Ciao Alessandro1997,
scusa se mi faccio vivo solo adesso, volevo ringraziarti perché col tuo suggerimento funiona tutto a dovere:)
 

Discussioni simili