- Home
- Categorie
- Coding e Sistemistica
- PHP
- modifica database con php
-
modifica database con php
Salve ragazzi, ho un problema,vorrei modificare la tabella dei post di un blog, ogni post ke viene aggiunto va a inserire nuovi dati nella tabella...questa tabella contiene(oltre alla colonna ID, Autore, ecc) una colonna "Contatore" che ho aggiunto io, e vorrei poter attribuire a questa colonna(per ogni post ke viene inserito) un valore a mio piacimento, in modo da potermi impostare l'ordine di visualizzazione dei post a mio piacimento...tutto questo,anticipo,mi servirà per decidere io in quale ordine(diverso dal cronologico o alfabetico) impostare i post nel mio blog fatto con wordpress.
Allora, questa è l'immagine di una parte della tabella:
Come si vede chiaramente ci sono il campo ID, quello contatore, e il campo ordine.Questi campi sono della tabella dei post del blog.
Il campo "ordine" l'ho creato io...e per ogni post che viene aggiunto gli posso attribuire un numero(nel campo ordine).
Lo script che volevo realizzare è per poter modificare il campo ordine per ognuno dei post..quindi questo è il codice che ho provato:
[PHP]
<?php
$connessione = mysql_connect("localhost", "root", "password")
or die("Impossibile stabilire una connessione.");if ($connessione) {
$msg = "Operazione riuscita!";
echo $msg;
}$database = mysql_select_db('nadir');
$nome_tabella = "wp_posts";
$visua = "select ID, ordine from $nome_tabella ";
$risult = @mysql_query($visua,$connessione) or die ("Non si possono vedere i risultati.");
?>
<table border=0 width="700" align="center">
<tr><td colspan=2><h2>Tabella ID e Contatori</h2></td></tr>
<tr><td>ID</td><td>Ordine</td></tr><form method="POST" action="modificacontatti.php">
<input type="hidden" name="ID" value="<?php echo "$ID";?>">
<?php
while ($row = mysql_fetch_array($risult)) {$ID = $row['ID'];
$ordine = $row['ordine'];echo "<tr><td><h3> ID</h3></td><td><h3>Modifica Ordine</h3></td></tr>"; ?>
<tr><td><h3><?php echo"$ID"?></h3></td><td><h3><?php echo"$ordine"?></h3></td></tr>
<tr><td><input type="text" name="ID" value="<?php echo"$ID"?>" ></td><td><input type="text" name="ordine" value="<?php echo"$ordine"?>" ></td></tr><?php
}
?>
[/PHP]Con questo script creo il form dove ci sono sia l'id che il contatore per ogni post(spero sia giusto).Con il form tramite il metodo "post" mando tutto al file che modificherà il database,e questo file(modificacontatti.php) contiene questo script:
[PHP]
<?php$connessione = mysql_connect("localhost", "root", "password")
or die("Impossibile stabilire una connessione.");if ($connessione) {
$msg = "Operazione riuscita!";
echo $msg;
}$database = mysql_select_db('nadir') or die ("Impossibile selezionare il database.");
$nome_tabella = "wp_posts";
$sele = "select ordine from $nome_tabella";$vai = @mysql_query($sele,$connessione) or die ("Non si può eseguire la query!");
$ordine = $_POST['ordine'];
$avviamodifica = "UPDATE $nome_tabella SET ordine = "$ordine"
WHERE ID = "$ID"
";$modifica = @mysql_query($avviamodifica, $connessione) or die ("Impossibile effettuare la modifica.");
?>
[/PHP]Solo che facendo la prova, questo codice mi modifica solo l'ultimo dei post inseriti, cioè nella visualizzazione li visualizza tutti, ma se modifico(tramite il file di prima) il numero "ordine" in tanti campi, l'unico che prende è l'ultimo.
E' come se il ciclo fosse sbagliato, e di tutti quelli che fa modifica solo l'ultimo della lista.
Dove sbaglio?
P.S. ovviamente i codici che ho postato sono privi della formattazione della tabella che ritenevo di poca importanza.)
-
Questa riga:
<input type="hidden" name="ID" value="<?php echo "$ID";?>">
Viene fatta prima del loop, quindi in ID non c'è niente.
In realtà missà che dovrai modificare leggermente la logica.
I campi text dovranno chiamarsi ordine$ID (quindi ordine1, ordine2, etc...) in modo che tu puoi ritrovarli nel ciclo di lettura. Come hai fatto te non c'è associazione tra i campi ID e i campi ordine.
-
Hai ragione...
eh però come faccio ad associarli dinamicamente man mano ke li va prendendo dal database?
E poi vorrei pure poterli cambiare come si vede dallo script
-
Puoi, ad esempio, fare la stessa query della creazione del form e poi ricavare il campo del form in questo modo:
$nomeOrdine = 'ordine' . $rec['id']; $ordine = $_POST[$nomeOrdine];
Oppure metodi simili che ti possono venire in mente....
-
L'idea l'ho capita..non capisco bene dove mettere il codice
-
nessuno ha qualche idea su come incrementare il valore di ordine quando si va a modificare il database?
-
A grandi linee, ma dovresti provare tu, devi fare come ti ho detto prima nel form. Nella pagina di atterraggio qualcosa di simile a questo:
$nome_tabella = "wp_posts"; $visua = "select ID, ordine from $nome_tabella "; $risult = @mysql_query($visua,$connessione) or die ("Non si possono vedere i risultati."); while ($row = mysql_fetch_array($risult)) { $ID = $row['ID']; $ordine = $row['ordine']; $nomeOrdine = 'ordine' . $ID; $valOrdine = $_POST[$nomeOrdine]; $upd = "UPDATE $nome_tabella SET valore_ordine = '$valOrdine' WHERE id = '$ID'"; $risultUpd = @mysql_query($upd,$connessione) or die ("Non riesco a salvare."); }