update file modificati su database

  • Creatore Discussione Creatore Discussione Fabio90
  • Data di inizio Data di inizio

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
Ciao! Sto cercando di modificare il nome e descrizione dei prodotti che vengono caricati dinamicamente da DB.

HTML:
 <table id="table-present-list">
            <tr>
                <th class="list-ID">ID</th>
                <th class="list-NA">Nome</th>
                <th class="list-DE">Descrizione</th>
            </tr>
            <?php 
                // Connection to DB
                include 'db/connect.php';
                include 'db/config.php';
                // Esecuzione della query
                $result = mysql_query($query) or die(mysql_error());
                for ($i=0; $i<mysql_num_rows($result); $i++) { 
                // di volta in volta leggo dalla matrice dei dati le 3 variabili e le assegno
                $row = mysql_fetch_array($result);
                $productID = $row['id'];
                $productNA = $row['nome'];
                $productDE = $row['desc'];
            ?>
                <tr>
                    <td class="list-ID"><?php echo $productID; ?></td>
                    <td class="list-NA">
                        <input class="list-NA" type="text" maxlength="50" style="width:100%;" name="productName<?php echo $productID; ?>" value="<?php echo $productNA;?>" />
                    </td>
                    <td class="list-DE">
                        <input class="list-DE" type="text" maxlength="50" style="width:100%;" name="productDesc<?php echo $productID; ?>" value="<?php echo $productDE;?>" />
                    </td>
                </tr>
            <?php } ?>
        </table>
    </fieldset>
    <div class="center maxSize">
        <button type="submit" name="submit" style="width:150px;" class="center">Submit</button>
    </div>

PHP:
<?php
// richiamo il file di configurazione
include 'db/config.php';

// richiamo lo script responsabile della connessione a MySQL
include 'db/connect.php';

if(isset($_GET['productName'])){
    $id_del=(int) $_POST['submit'];
	$tabella = $_REQUEST['cat'];
    
        $q="INSERT INTO $tabella WHERE id= ".$id_del;
        if(mysql_query($q)){
            $avviso="modifica avvenuta con successo";
        }else{
            $avviso="non è stato possibile modificare la query";
        }
        echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		
		header("Location: ".$_SERVER['HTTP_REFERER']);
		
		
    
}
		
    

?>

Come faccio a richiamare name="productName<?php echo $productID; ?> e name="productDesc<?php echo $productID; ?>
In molte circostanze il buon borgo italia consiglia di usare var_dump. In questo caso dove potrei utilizzarlo per capire l'errore?
Grazie a tutti!
 
ciao
scusa più che capire l'errore con un var_dump, bisognerebbe capire cosa fa quello script php, io non ci riesco (e in parte il form)
 
Mi associo,
non si capisce molto
cmq per modificare un dato esistente si usa UPDATE e non INSERT
questa query non ha senso
PHP:
$q="INSERT INTO $tabella WHERE id= ".$id_del;
al massimo sarà qualcosa del genere
PHP:
$q="UPDATE $tabella SET valore = '" . $nuovo_valore . "' WHERE id= " . $id_del;
in piu se scrivi cosi
PHP:
$id_del=(int) $_POST['submit'];
l'id sara sempre 0,
potrebbe essere invece
PHP:
$id_del=(int) $_POST['input_che_contiene_id'];
 
Ultima modifica:
E' vero il problema sta appunto nel fatto che id è sempre 0. Non capisco cosa intendi con "input_che_contiene_id"
 
devi creare un nuovo input nel form che contenga l'id

PHP:
<input type='hidden' name='list-ID' value='<?php echo $productID; ?>'/>

e poi lo recuperi cosi

PHP:
$id_del=(int) $_POST['list-ID'];
 
Ottimo adesso funziona!! Solo che ho notato un altro problema.
Riesco ad aggiornare soltanto l'ultimo campo presente nel database e non gli altri..
Posto nuovamente il codice con gli aggiornamenti
PHP:
<?php
// richiamo il file di configurazione
include 'db/config.php';

// richiamo lo script responsabile della connessione a MySQL
include 'db/connect.php';

if(isset($_GET['cat'])){	
   $id_del=(int) $_POST['list-ID']; 
	$tabella = $_REQUEST['cat'];
	$productName = $_REQUEST['productName'];    
        $q="UPDATE $tabella SET nome = '$productName' WHERE id= '$id_del'";
		echo $q;
        if(mysql_query($q)){
            $avviso="update avvenuto con successo";
        }else{
            $avviso="non è stato possibile modificare la query";
        }

}

Penso che sia dovuto al fatto che non richiamo correttamente il campo name="productName<?php echo $productID; ?>
Ma come si fa?
 
ciao
non so, io non farei un campo hidden che trasmetta l'id anche perchè così nell'up poi si va ad interessare tutta la tabella.
metterei piuttosto in coda al nome/descrizione un radio

PHP:
<input name="scelta" type="radio" value="<?php echo $productID;?>">

in questo modo ha un controllo su cosa vado a modificare e tramettendo un unico id uppo solo il record interessato
 
adesso selezionando il radio-button la query mi restituisce l'ID giusto però si modifica soltanto l'ultimo campo
 
ciao
guarda che ho schematizzato e messo i nomi dei campi un po' a caso (quindi verificali)
provalo così come è (messo a punto i nomi) e se funzia poi lo sistemi con il tuo css, table ecc...
PHP:
<?php
require_once 'db/connect.php';
require_once 'db/config.php';
if(isset($_POST['invia'])){//verifico se submit
	$id=$_POST['scelta'];//leggo l'id selezionato
	if($id!=""){//se diverso da vuoto uppo
		$nome=$_POST["productName".$id];
		$descr=$_POST["productDesc".$id];
		//ho messo tabella, ma da quello che ho capito devi mettere $tabella
		$query="UPDATE tabella SET prodotto_nome='$nome', prodotto_descr='$descr' WHERE prodotto_id=$id";
		if(mysql_query($query)){
			echo "aggiornato: $nome";
		}else{
			echo "errore nel salvataggio";
		}
	}else{//mi sono dimenticato di selezionare
		echo "non hai fatto una scelta";
	}
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}

//ma la $query dov'è? $query="SELECT......
$result = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($result)> 0){
	echo "<form name=\"form1\" method=\"post\" action=\"".htmlspecialchars($_SERVER['PHP_SELF'])."\">";
	while($riga=mysql_fetch_array($result)){
		$productID = $row['id'];
		$productNA = $row['nome'];
		$productDE = $row['desc'];
		echo "<input  name=\"productName".$productID."\" value=\"$productNA\" />&nbsp;&nbsp;";
		echo "<input  name=\"productDesc".$productID."\" value=\"$productDE\" />&nbsp;&nbsp;";
		echo "<input name=\"scelta\" type=\"radio\" value=\"$productID\"><br><br>"
	}
	echo "<input name=\"invia\" type=\"submit\" id=\"invia\" value=\"invia\"><br><br>";
	echo "</form>";
	
}else{
	echo "non ci sono prodotti";
}
?>
si modifica (dovrebbe) solo il record dove hai selezionato la scelta

p.s.
una domanda da quello che ho capito: fai una tabella per ogni categoria di prodotti? se è così stai facendo un po' di caos
 
grazie sono riuscito a risolver tutto =) cmq no ho solo 5 tabelle e non ne creo una per ogni categoria perchè non avrebbe senso
 

Discussioni simili