codice di modifica ed eliminazione dati db partendo da codice d'inserimento

ciao, avendo il codice di inserimento dati di un form, quali procedimenti devo prendere in considerazione per semplificarmi le cose dovendo ora implementare la modifica e la cancellazione dei dati?

grazie

inviato 8 anni fa
gabar-el
X 0 X

Sono diverse le cose che potresti riusare del codice precedentemente fatto ed il modo migliore per scoprirle è scrivere il codice della modifica e della cancellazione da zero e poi confrontare i listati e l'HTML.

Una risposta generale al tuo quesito purtroppo non esiste poiché dipende da come hai organizzato il codice dello script che fa la INSERT.

 :bye:

P.S.: in altre parole, anche se hai intuito che si può risparmiare codice, all'inizio fa finta che non sia così.

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok, visto che sto imparando rifaccio il tutto (un pò scopiazzo qua e la perchè la mia testa al momento non è che ha assimilato molto...). ma mi sorge questa domanda: come si implementa una variabile dinamica? (magari ho detto una cavolata), cmq se gli utenti selezioneranno determinati corsi, come dico, tramite php, di cancellare quelli selezionati?

altra cosa: è possibile poi elimare dal server gli allegati che non occorrono più?

grazie.

ovvio che mi bastano 2 dritte, so che chiedo molto, ma un instradamento mi è indispensabile ancora....

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

se ti leggi tutto il corso php/mysql troverai parecchie risposte ai tuoi dubbi:

http://www.phpnews.it/corsi/corso-php-mysql/

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

già, l'avevo anche letta. c'è proprio un capitolo per la cancellazione....

grazie, ora vedo fin dove riesco ad arrivare.... spero lontano....

 ;)

risposto 8 anni fa
gabar-el
X 0 X

ciao,

sto vedendo un pò la guida e altro, ma alcune cose non riesco a capirle.

questo passaggio per es. perchè c'è un get e un post? non posso usare solo post?

if($_POST)  
{  
    $ids = isset($_POST['id']) ? $_POST['id'] : array();  
    elimina_record($ids);  
}  
elseif(isset($_GET['id']))  
{  
    elimina_record(array($_GET['id']));  
}  
else  
    mostra_lista(); 

c'è poi questa funzione che non riesco a decifrare bene.....

function elimina_record($ids)  
{  
    // verifico che almeno un id sia stato selezionato  
    if(count($ids) < 1)  
    {  
        $messaggio = urlencode("Nessun record selezionato!");  
        header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);  
        exit;  
    } 

grazie

risposto 8 anni fa
gabar-el
X 0 X

Quello script serve ad eliminare uno o più record da una tabella. I record vengono mostrati in una lista e per ciascuno di essi c'è una checkbox per selezionarli. E' possibile cancellarne uno direttamente, tramite il link, e questa modalità richiede il passaggio dei parametri via GET. E' anche possibile cancellare un gruppo di record in un sol colpo, selezionando le relative checkbox, ed in questo caso serve POST.

La funzione elimina_record si aspetta un array di ID dei record da cancellare. Se l'array è vuoto effettua un redirect, accodando nell'URL della pagina successiva un messaggio di errore

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok, grazie, ora mi ci metto. ma quindi non necessito per forza di quel passaggio get. posso quindi usare solo post anche nel caso voglia cancellare tramite checkbox solo un record?

risposto 8 anni fa
gabar-el
X 0 X
ok, grazie, ora mi ci metto. ma quindi non necessito per forza di quel passaggio get. posso quindi usare solo post anche nel caso voglia cancellare tramite checkbox solo un record?

si  :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok, a un certo punto il codice in questione usa un mostra_lista che ho letto serve per tornare gli id, ma io ho già fatto con una selest la selezione di quanto mi occorre, e tramite varie checkbox ho implementato il tutto, pronto solo per essere selezionato nelle proprie esigenze. come applico quindi la query se non necessito di quella funzione? o sto dicendo delle cavolate?

 ???

thanks

risposto 8 anni fa
gabar-el
X 0 X

ragionando piano piano per capire bene sono riuscito a (ri)scrivere questo:

if($_POST)
            {
               $ids = isset($_POST['id']) ? $_POST['id'] : array();
               elimina_record($ids);
            }
            
            function elimina_record($ids)
            {
               if(count($ids) < 1)
               {
                  $messaggio = urlencode("Nessuna voce selezionata!");
                  header('location: '.$SERVER['PHP_SELF'].'?msg='.$messaggio);
                  exit;
               }
               
               // per precauzione converto gli ID in interi
               $ids = array_map('intval',$ids);
               
               // creo una lista di ID per la query
               $ids = implode(',',$ids);
               
               // preparo la query
               $sql = "DELETE FROM circolari WHERE id IN ($ids)";
               
               // invio la query
               $result = mysql_query($sql);
               
               // controllo l'esito
               if (!$result) {
                  die("Errore nella query $sql: " . mysql_error());
               }
                 
               // conto il numero di record cancellati
               $num_record = mysql_affected_rows();
               
               // chiudo la connessione a MySQL
               mysql_close($link);
               
               $messaggio = urlencode("Numero voci cancellate: $num_record");
               header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
            }

ho provato a inviare senza selezionare nulla per vedere se ricevevo il messaggio apposito, ma invece ricevo questo errore:

Warning: Cannot modify header information - headers already sent by (output started at C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\cedifar\gestione\elabora_gestione_cancella.php:22) in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\cedifar\gestione\elabora_gestione_cancella.php on line 118

grazie

risposto 8 anni fa
gabar-el
X 0 X

di quell'errore è pieno il forum, fai una ricerca e troverai le spiegazioni che cerchi

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ho cercato e trovato onunque, ho capito il tipo di errore, ma cmq non sono riuscito a risolvere. Soprattutto perchè non sono sicuro che il mio script sia corretto....  :-\

risposto 8 anni fa
gabar-el
X 0 X

indipendentemente dalla correttezza dello script, quando usi la funzione header('location') non puoi mostrare alcun messaggio all'utente. Per messaggio intendo anche uno spazio "bianco" generato dallo script involontariamente, magari perché il tag PHP di apertura dello script non è posto all'inizio del file

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

lo avevo letto in giro (anche da post in cui rispondevi tu), sono giunto alla conclusione che è il mio codice html, ma ho provato a mettere lo script subito dopo il session start e mi rende lo stesso risultato. Ho saputo circa ob_start, dici che può fare al caso mio?

grazie

risposto 8 anni fa
gabar-el
X 0 X

Prima bisogna fare la diagnosi e poi scegliere la cura. Hai individuato qual'è l'output che fa scattare l'errore? Nel messaggio di errore dovrebbe essere presente l'indicazione dello script e della riga in cui è stato generato l'output incriminato.

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

si, ho guardato. se lo metto subito dopo la session (e tolgo ogni spazio che anticipa l'inizio codice) va bene, ma non ricevo il messaggio di errore circa il fatto che non è stato selezionato nessun campo (checkbox)

questo il codice:

if($_POST)
            {
               $ids = isset($_POST['id']) ? $_POST['id'] : array();
               elimina_record($ids);
            }
            
            function elimina_record($ids)
            {
               if(count($ids) < 1)
               {
                  $messaggio = urlencode("Nessuna voce selezionata!");
                  header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
                  exit;
               }
               
               // per precauzione converto gli ID in interi
               $ids = array_map('intval',$ids);
               
               // creo una lista di ID per la query
               $ids = implode(',',$ids);
               
               // preparo la query
               $sql = "DELETE FROM circolari WHERE id IN ($ids)";
               
               // invio la query
               $result = mysql_query($sql);
               
               // controllo l'esito
               if (!$result) {
                  die("Errore nella query $sql: " . mysql_error());
               }
                 
               // conto il numero di record cancellati
               $num_record = mysql_affected_rows();
               
               // chiudo la connessione a MySQL
               mysql_close($link);
               
               $messaggio = urlencode("Numero voci cancellate: $num_record");
               header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
            }

grazie

risposto 8 anni fa
gabar-el
X 0 X

up....

 :'(

risposto 8 anni fa
gabar-el
X 0 X

ho risolto il problema circa spazi bianchi ed altro, ma mi rimane sempre il fatto che se non seleziono nulla (giusto per cominciare con cose semplici) mi rende un errore che a mio avviso dipende ovviamente dagli id. Forse il mio codice manca di qualcosa circa la lista degli id?

il codice del form è questo:

$sql = "SELECT id, titolo, DATE_FORMAT(data_corso_1, '%d-%m-%Y') data_corso_1, DATE_FORMAT(data_corso_2, '%d-%m-%Y') data_corso_2, DATE_FORMAT(data_corso_3, '%d-%m-%Y') data_corso_3, DATE_FORMAT(data_corso_3, '%d-%m-%Y') data_corso_4, data_inserimento
                  FROM circolari
                  ORDER by data_inserimento desc";
         
         $circolari_corsi = mysql_query($sql)
            or die(mysql_error());
            
            while ($row = mysql_fetch_array($circolari_corsi))
               {
                  $ids = $row['id'];
                  $titolo = $row['titolo'];
                  $data_corso_1 = $row['data_corso_1'];
                  $data_corso_2 = $row['data_corso_2'];
                  $data_corso_3 = $row['data_corso_3'];
                  $data_corso_4 = $row['data_corso_4'];
                  
                  echo "
                     <tr>\n
                        <td class=\"titolo\">$titolo</td>
                        <td class=\"data_cancella\">"
                        if ($data_corso_1 != "")
                           echo "<br />$data_corso_1";
                        if ($data_corso_2 != "")
                           echo "<br />$data_corso_2";
                        if ($data_corso_3 != "")
                           echo "<br />$data_corso_3";
                        if ($data_corso_4 != "")
                           echo "<br />$data_corso_4";
                        echo "
                     </td><td class=\"flag_cancella\"><input type=\"checkbox\" name=\"id[]\" value=\"".$row['id']."\"/></td></tr>
                     ";
                  
                  }
                  mysql_close($link);

mentre quello che elabora la pagine è questo:

error_reporting(E_ALL); 
ini_set('display_errors', 1);
var_dump($_POST['id']);
            if($_POST)
            {
               $ids = isset($_POST['id']) ? $_POST['id'] : array();
               elimina_record($ids);
            }
            
            function elimina_record($ids)
            {
               if(count($ids) < 1)
               {
                  $messaggio = urlencode("Nessuna voce selezionata!");
                  header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
                  exit;
               }
               
               // per precauzione converto gli ID in interi
               $ids = array_map('intval',$ids);
               
               // creo una lista di ID per la query
               $ids = implode(',',$ids);
               
               // preparo la query
               $sql = "DELETE FROM circolari WHERE id IN ($ids)";
               
               // invio la query
               $result = mysql_query($sql);
               
               // controllo l'esito
               if (!$result) {
                  die("Errore nella query $sql: " . mysql_error());
               }
                 
               // conto il numero di record cancellati
               $num_record = mysql_affected_rows();
               
               // chiudo la connessione a MySQL
               mysql_close($link);
               
               $messaggio = urlencode("Numero voci cancellate: $num_record");
               header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
            }

questo codice non lo capisco ancora molto bene, ci sono passaggi a me sconosciuti.....

cmq, mi torna come dicevo senza selezionare nessuna flag, questo errore:

Notice: Undefined index: id in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\elabora_gestione_cancella.php on line 29
NULL

grazie per qualsiasi info che possa aiutarmi ad andare avanti e capire qualcosa in più....

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

qual'è la riga 29?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
var_dump($_POST['id']);
risposto 8 anni fa
gabar-el
X 0 X

allora quel notice significa semplicemente che $_POST['id'] non esiste  :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

cioè vorrebbe dire che nel form io non ho settato un campo per l'id? ma sono le checkbox il campo id. A me pare che ci sia....

 :wallbash:

risposto 8 anni fa
gabar-el
X 0 X

ok, ho fatto un pò di verifiche e provato il codice. funziona, ma a parte questo mi rimangono molti dubbi:

  • sto var_dump($_POST['id']); l'ho eliminato, ma alla fine della fiera non ho capito perchè mi diceva che non esiste....
  • questa parte di codice che controlli fa?

    error_reporting(E_ALL); 
    ini_set('display_errors', 1);
  • e questa? non controlla che se ids è minore di 1 deve restituire un messaggio che non  è stata selezionata alcuna voce?

    if(count($ids) < 1)
    {
    $messaggio = urlencode("Nessuna voce selezionata!");
    header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
    exit;
    }
  • infine, se volessi mettere un messaggio per dire che non è stata selezionata alcuna voce?
  • e questo? io pensavo anche qui si trattasse di un messaggio di riepilogo...

    $messaggio = urlencode("Numero voci cancellate: $num_record");
  • del resto, devo fare qualche controllo particolare in ambito di sicurezza?

grazie

risposto 8 anni fa
gabar-el
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda