[php]icone funzioni tabelle

  • Creatore Discussione Creatore Discussione niuzz0
  • Data di inizio Data di inizio

niuzz0

Nuovo Utente
3 Nov 2016
12
0
1
52
Buonasera a tutti,
sono di nuovo qui a chiedervi un aiutino
Ho creato un motore di ricerca per il mio database ma ora,poichè a fianco ad ogni record trovato ho inserito le 3 icone(modifica,cancella,visualizza) vorrei sapere come posso far si che al click di una delle 3 icone su di una riga(record), questa mi compia l'azione richiesta solo su quella determinata riga.
in poche parole, avrei pensato ad un if che collegherebbe la riga selezionata all'icona di quest'ultima ma le ho provate di tutti i colori.
Potrebbe anche essere usato il metodo della spunta? [Alla spunta di quella determinata riga associo l'id della stessa e quindi nn avrei problemi ad effettualele 3 operazioni]
Il problema che sto riscontrando è proprio nella chiave primaria da utilizzare. Non vorrei mettere nessun menu a tendina per scegliere id o altro campo, mi basterebbe o un check o una spunta.
Confido in voi.
Aspetto vostre notizie
Buona serata
 
ciao
potresti fare in questo modo (ometto tutti gli essenziali controlli)
PHP:
<?php
//dati connessione
//query alla tabella
$ris=mysql_query($conn, $query);
echo "<table>";
while($riga=mysql_fetch_assoc($ris)){
    //a titolo di esempio
    $id=$riga['id'];
    $nome=$riga['nome'];
    echo "<tr>";
    echo "<td>$nome</td><td><a href='file.php?m=$id'>mod</a></td><td><a href='file.php?d=$id'>del</a></td><td><a href='file.php?v=$id'>vis</a></td>";
    echo "</tr>";
    
}
echo "</table>";
//...
?>
e la pagina file.php
PHP:
<?php
//essenziali i vari controlli sui get, ma semplifico
//dati di connessione
if(isset($_GET['m']) || isset($_GET['v'])){//modifico o visualizzo il record
    if(isset($_GET['v'])){
        $id=$_GET['v'];
    }else{
        $id=$_GET['m'];
    }
    $riga=mysqli_fetch_assoc(mysqli_query($conn,"SELECT * FROM tabella WHERE id=$id"));
    $nome=$riga['nome'];
    if(isset($_GET['v'])){//visualizzo il record
        echo "<table>>tr><td>$id</td><td>$nome</td></tr></table>";
        //e un link per tornare dove vuoi
    }
    if(isset($_GET['m'])){//visualizzo il form di modifica
        echo "<form action='".$_SERVER['php_self']."' method='post' name='modifica'>";
        echo "<input name='nome' type='text' value='$nome'>";
        echo "<input name='id' type='hidden' value='$id'>";
        echo "<input name='modifica' type='submit' value='m'>";
    }
}
if(isset($_POST['modifica'])){
    $id=$_POST['id'];
    $nome=$_POST['nome'];
    $ris=mysqli_query($conn,"UPDATE tabella SET nome='$nome' WHERE id=$id");
    if($ris){echo "record aggiornato";}else{echo "ERRORE riprova";}
    //e un link per tornare dove vuoi
}
if(isset($_GET['d'])){
    $id=$_GET['d'];
    $ris=mysqli_query($conn."DELETE FROM tabella WHERE id=$id");
    if($ris){echo "record eliminatoo";}else{echo "ERRORE riprova";}
    //e un link per tornare dove vuoi
}
?>
 
Grazie Borgo per il tuo aiuto.
Ripensandoci stanotte sono riuscito a risolvere 2 dei 3 problemi.
Visualizzazione e Cancellazione funzionano alla perfezione ora mi tocca risolvere l'inghippo della Modifica poichè avrei pensato di utilizzare lo stesso formato della visualizzazione ma aggiungendo a fianco di ogni campo uno vuoto per la modifica

Ti posto il codice per spiegarti meglio:

PHP:
$Query_nome = "SELECT * FROM tabella WHERE id = '$id'";
$rs=mysql_query($Query_nome)
or die("Errore nella query $Query_nome: " . mysql_error());
while ($row=mysql_fetch_array($rs))
{
echo <<<EOM
<form name="nc1" action="mod.php" method="POST">
<p style="text-align: center">ID: <small>$row[id]</small></p>
<p style="text-align: center"><small>$row[owner]</small></p>
<table align='center' border='1' cellpadding='0' cellspacing='0' width='37%'>
        <tr><td width='200'><small><b>Codice Materiale</b></small></td><td width='161' style="text-align: right"><small>$row[cod_mat]</small></td><td><input name="cod_mat" type="text" size="20"></td> </tr>
        <tr><td width='200'><small><b>Descrizione</b></small></td><td width='161' style="text-align: right"><small>$row[descriz]</small></td><td><input name="descriz" type="text" size="20"></td></tr>
</table><hr>
<input type="submit" value="Carica i Dati">
EOM;
}

alla tabella pre-esistente ho aggiunto ad ogni campo un <input name=...> e all'inizio della stessa, un <form...>
Il problema che ho è che quando provo ad inserire un codice materiale, questi non mi si aggiorna ma si azzera su tutti i record.


PHP:
 <?php
session_start();
$ids=$_GET['id'];
.........controlli per la connessione.......
$cod_mat = $_POST['cod_mat'];
    $descriz = $_POST['descriz'];  
    $sql="UPDATE tabella SET cod_mat = '$cod_mat' AND descriz='$descriz' WHERE id='$ids'";
    if($result=mysql_query($sql))
{
    echo "<center><b><br><br><br><br><br>Registrazione effettuata. Esegui nuovo<a href='inserimento.php'> inserimento</a></center></b>";
   }
   else {
   echo "<center><b><br><br><br><br><br>Errore registrazione. Riprovare<a href='inserimento.php'></a></center></b>";
}
?>

spero di esser stato chiaro
 

Allegati

  • Immagine.png
    Immagine.png
    6,5 KB · Visite: 375
ciao
cosi a naso, intanto è sbagliata le query
PHP:
$sql="UPDATE tabella SET cod_mat = '$cod_mat' AND descriz='$descriz' WHERE id='$ids'";
correggi in
PHP:
$sql="UPDATE tabella SET cod_mat = '$cod_mat', descriz='$descriz' WHERE id='$ids'";
poi aggiungi subito dopo un var_dump per vedere se la query visen scritta come dovrebbe
PHP:
$sql="UPDATE tabella SET cod_mat = '$cod_mat', descriz='$descriz' WHERE id='$ids'";
var_dump($sql);
prova poi sappimi dire
dimenticavo
se l'id è un intero non ci vanno gli apici
.... WHERE id=$ids"
 
Codice:
string(60) "UPDATE tabella SET cod_mat = 9867979, descriz='' WHERE id=''"

come vedi mi inserisci il dato cod_mat ma non mi trova l'id. Dimenticavo che non è obbligatorio modificare tutti i campi della tabella. Posso scegliere se modificarne uno o tutti.
 
ciao
guardando meglio il tuo form per la modifica, devo dirti che secondo me c'è un errore concettuale, tu fai tanti form quanti sono i record
tu metti l'echo del form nel while quindi per fare un esempio se hai due record tu ottieni il seguente 'html (tra l'altro senza la chiusura del tag form)
HTML:
<form name="nc1" action="mod.php" method="POST">
<p style="text-align: center">ID: <small>1</small></p>
<p style="text-align: center"><small>PINCO</small></p>
<table align='center' border='1' cellpadding='0' cellspacing='0' width='37%'>
<tr>
<td width='200'><small><b>Codice Materiale</b></small></td>
<td width='161' style="text-align: right"><small>333333</small></td>
<td><input name="cod_mat" type="text" size="20"></td>
</tr>
<tr>
<td width='200'><small><b>Descrizione</b></small></td>
<td width='161' style="text-align: right"><small>VERDE</small></td>
<td><input name="descriz" type="text" size="20"></td>
</tr>
</table><hr>
<input type="submit" value="Carica i Dati">
<!--qui o alla fina manca il tagt </form>-->
<form name="nc1" action="mod.php" method="POST">
<p style="text-align: center">ID: <small>2</small></p>
<p style="text-align: center"><small>PALLO</small></p>
<table align='center' border='1' cellpadding='0' cellspacing='0' width='37%'>
<tr>
<td width='200'><small><b>Codice Materiale</b></small></td>
<td width='161' style="text-align: right"><small>777777</small></td>
<td><input name="cod_mat" type="text" size="20"></td>
</tr>
<tr>
<td width='200'><small><b>Descrizione</b></small></td>
<td width='161' style="text-align: right"><small>ROSSO</small></td>
<td><input name="descriz" type="text" size="20"></td>
</tr>
</table><hr>
<input type="submit" value="Carica i Dati">
<!--chiusura tagt </form>?-->
in questo caso ti ritrovi con due campi che si chiamano emtrambi "cod_mat", due "descriz", due "cod_mat" e due pulsanti di submit anche loro con lo stesso nome, mettiamo che il tutto funzioni, come minimo al submit viene trasmesso slo l'ultimo valore dell'ultimo campo indipendentemente che tu modifichi il primo.
il tutto condito dal fatto che non vedo dove trasmetti il valore dell'id (che risulta vuotoi nella query di upp) e da dove salti fuori quel
$ids=$_GET['id'];
quindi o usi il metodo che ti ho postato se vuoi usare il form devi modificare il tutto (se hai pazienza con calma) ti butto giù un esempio
 
Grazie sempre per la disponibilità.
Accetto con piacere il tuo aiuto e attenderò il tuo esempio in modo da studiarlo e capire gli errori e le possibili modifiche.
Purtroppo il php è un linguaggio che sto imparando da solo e una "mano" come quella che mi stai dando è davvero ben accetta.
Grazie ancora
 
ciao
ti schematizzo, poi css tabelle e mettere tutto in php ci pensi tu
form di modifica:
PHP:
<?php
//dati connessione
$ris=mysqli_query($conn,"SELECT * FROM tabella");
?>
<form name="nc1" action="mod.php" method="POST">
<?php
while($riga=mysqli_fetch_assoc($ris)){
    $id=$riga['id'];
    $owner=$riga['owner'];
    $cod_mat=$riga['cod_mat'];
    $descriz=$riga['descriz'];
    //devi trasmettere anche ownwr?
    echo "<input name='id[]' type='text' value='$id' readonly>";//non modificabile: readonly
    echo "<input name='cod_mat[]' type='text' value='$cod_mat'>";//modificabile
    echo "<input name='descriz[]' type='text' value='$descriz'>";//modificabile
  
}
?>
<input name="m" type="submit" value="m">
</form>
file mod.php
PHP:
//dati connessione
$num_rec=count($_POST['id']);//i vari $_POST sono array di array avendo mess (es.) name='id[]'
for($k=0;$k<$num_rec;$k++){
    $id=$_POST['id'][$k];
    $cod_mat=$_POST['cod_mat'][$k];
    $descriz=$_POST['descriz'][$k];
    $sis=mysqli_query($conn,"UPDATE tabella SET cod_mat='$cod_mat', descriz='$descriz' WHERE id=$id");
    //NOTA: mysql non uppa i campi se vede che i valori dei campi sono uguali a quanto inputato
   //quindi no te preocupe se li passi tutti
}
//e link di ritorno
in questo modo puoi uppare più record contemporaneamente

un suggerimento soprattutto se il lavoro che stai fadendo è importante e deve durare nel tempo: passa alle nuove istruzioni mysqli
 
Grazie ancora ma nada.
Se inserisco solo il cod_mat mi da come risultato string(58) "UPDATE tabella SET cod_mat='4546', descriz='1' WHERE id=68"
Stavo pensando se fosse possibile inserire un bottone di fianco ad ogni campo che se clikkato questi mi rimanda ad una funzione del tipo mod.php?campo=$cod_mat
mod.php?campo=$descriz
ecc...
oppure inserire qualche if di controllo
if(is_null($cod_mat){
cod_mat dovrebbe essere linkato al vecchio cod_mat preso dalla tabella
così come descriz
 
ciao
scusa ma non capisco bene cosa intendi, con lo script che ho postato se ad es. inizialmente hai tre record
Codice:
id    cod_mat    descrizione
60    11111    verde
61    22222    rosso
62    33333    turchino
e vai sul form di modifica vedrai i record (vedi fig. 1)

ora gli unici valori che puoi modificare sono il cod_mat e/o la descrizione
se decidi di modificare la descrizione del record id=61 es. da "rosso" a "a pallini" l'unica cosa che si modifica è il campo descrizione, quindi ti troverai dopo il submit
Codice:
61    22222    a pallini
tornando al form vedrai come fig. 2
se tu avessi modificato anche il codice (prima del sub) o anche un altro record ne form di modifica e in tabella troverai le modifiche fatte
form_modifica.jpg
 
Buongiorno,
con quel semplice form se ho capito bene mi creo una tabella di record modificabili ? Quindi alla pressione del tasto m avvieremo la query di update?
In questo modo salterei il passaggio di linkare un bottone dalla tabella di ricerca ad un form di modifica effettuando tutti i comandi direttamente dalla tabella iniziale con la.semplice pressione dei bottoni ? (io invece di un form ho linkato mod?id=$id )
Grazie per l'aiuto
 
Ultima modifica:
ciao
si, ti presenta i record inizialmente con i valori che sono in tabella, se ne modifichi uno (o più) ti aggiorna i relativi campi/record
si si evita il link
evidentemente se dopo una modifica torni al form ti riporta il valore dopo la modifica (il/i record/s sono stati uppati)
 
Grazie per la tua collaborazione/aiuto.
Sono riuscito a scrivere un codice in php abbastanza funzionale.
Ora sto passando al secondo step: trasformare queste maschere in un vero e proprio software, magari in java.
 

Discussioni simili