Ordine record - Problema con Form

Ciao a tutti,

ho un piccolo problema con i campi di testo di un form. In poche parole ho creato uno script in php che mi permette di ordinare i record. Lo utilizzo per ordinare le sezioni, ma mi permette di ordinarle una per volta.... Vorrei ordinarle tutte quante contemporaneamente ma non ho capito dove sbaglio  :wallbash: :wallbash:

Questo è il codice

Estraggo i dati dalla tabella che mi interessa ordinare

<?php
        include('../../config.inc.php'); 
        mysql_connect($host,$user,$password) or die ("Impossibile connettersi al database");
        mysql_select_db($db) or die ("Impossibile selezionare il db");
        $dati = mysql_query("select  sezione, ordine from sezioni");
        while  ( $array = mysql_fetch_array($dati)) {
        echo ("<form name='form1' method='post' action='sezione8.php'>
  <table width='363' height='30' border='0' cellpadding='0' cellspacing='0'>
    <tr>       <td width='169' height='30'> <input name='sezione' type='text' id='sezione' value='$array[sezione]'></td>
      <td width='194'><input name='ordine' type='text' id='ordine' value='$array[ordine]'></td>
    </tr>
  </table>
  <p> 
    <input type='submit' name='Submit' value='Salva ordine'>
  </p>
</form>");

Modifico i record

<?php
$sezione = $_POST['sezione'];
$ordine = $_POST['ordine'];        
//Connessione al DB
include('../../config.inc.php');
mysql_connect($host,$user,$password) or die ("Impossibile connettersi");
//Selezione DB
mysql_select_db($db) or die ("Impossibile selezionare il DB");
//Modifica dati
mysql_query("update sezioni set  ordine='$ordine' where sezione='$sezione'");
echo "<div align='center'>Ordine modificato con successo!</div>";
//Chiude connessione
mysql_close();
?>

visualizzo i record

<?php      
//Connessione al DB
include('../../config.inc.php');
mysql_connect($host,$user,$password) or die ("Impossibile connetersi");
//Seleziona DB
mysql_select_db($db) or die ("Impossibile selezionare il db");
//Visualizza dati
$dati = mysql_query("select * from sezioni order by ordine");
while ( $array = mysql_fetch_array($dati)) {
echo (" $array[sezione] <br>"); 
}
//Chiude la connessione a mysql
mysql_close();
?>
inviato 11 anni fa
ema85b
X 0 X

Per prima cosa devi fare in modo che venga creato un unico form in cui mostrare le varie sezioni da ordinare. Il codice attuale invece crea un form (ed un pulsante) per ogni sezione. Inoltre i campi input che conterranno l'indicazione dell'ordine devono avere nomi differenti per poter essere poi recuperati dallo script di aggiornamento.

Lo script che gestisce gli aggiornamenti deve poi recuperare tutti i dati inseriti. Attualmente invece recupera solo una coppia di valori ($sezione = $_POST['sezione']; e $ordine = $_POST['ordine']; )

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Per prima cosa devi fare in modo che venga creato un unico form in cui mostrare le varie sezioni da ordinare. Il codice attuale invece crea un form (ed un pulsante) per ogni sezione. Inoltre i campi input che conterranno l'indicazione dell'ordine devono avere nomi differenti per poter essere poi recuperati dallo script di aggiornamento.

Lo script che gestisce gli aggiornamenti deve poi recuperare tutti i dati inseriti. Attualmente invece recupera solo una coppia di valori ($sezione = $_POST['sezione']; e $ordine = $_POST['ordine']; )

 :bye:

Ciao Gianni,

eh si effetivamente mi creava tot form per quante erano le sezioni. Ora ho modificato il codice in questo modo penso vada bene

<?php

        include('../../config.inc.php'); 

        mysql_connect($host,$user,$password) or die ("Impossibile connettersi al database");

        mysql_select_db($db) or die ("Impossibile selezionare il db");

        $dati = mysql_query("select  sezione, ordine from sezioni");        
                   echo "<form name='form1' method='post' action='sezione8.php'>

  <table width='363' height='30' border='0' cellpadding='0' cellspacing='0'>";
while  ( $array = mysql_fetch_array($dati)) {
             echo "<tr><td width='169' height='30'><input name='sezione' type='text' id='sezione' value='$array[sezione]'></td>
                       <td width='194' height='30'> <input name='ordine' type='text' id='ordine' value='$array[ordine]'></tr></td>";

        }

     

   echo " 

  </table>

  <p> 

    <input type='submit' name='Submit' value='Salva ordine'>

  </p>

</form>";

        ?>

Ora non mi resta che recuperare tutti i valori inseriti come hai detto tu, perchè effettivamente ora ne salva solo uno, l'ultima sezione aggiunta...

risposto 11 anni fa
ema85b
X 0 X

Il problema sta sia nel form, più precisamente qui:

<td width='169' height='30'><input name='sezione' type='text' id='sezione' value='$array[sezione]'></td>

<td width='194' height='30'> <input name='ordine' type='text' id='ordine' value='$array[ordine]'></tr></td>

(attento che hai invertito gli ultimi </tr></td>)

come puoi vedere tutti i campi input hanno lo stesso nome (name='sezione' e name='ordine') e quindi valgono solo gli ultimi 2 poiché sovrascrivono tutti gli altri.

Prova a mettere invece name='sezione[]' e name='ordine[]' e poi nello script che effettua l'aggiornamento metti solo un print_r($_POST). Questo non serve ad aggiornare la tabella ma se ti fai visualizare l'HTML prodotto vedrai la struttura dei dati provenienti dal POST e, con un po' di fantasia, capirai come usarli per effettuare l'aggiornamento.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
(attento che hai invertito gli ultimi </tr></td>)

errore corretto grazie.

come puoi vedere tutti i campi input hanno lo stesso nome (name='sezione' e name='ordine') e quindi valgono solo gli ultimi 2 poiché sovrascrivono tutti gli altri.

Prova a mettere invece name='sezione[]' e name='ordine[]' e poi nello script che effettua l'aggiornamento metti solo un print_r($_POST). Questo non serve ad aggiornare la tabella ma se ti fai visualizare l'HTML prodotto vedrai la struttura dei dati provenienti dal POST e, con un po' di fantasia, capirai come usarli per effettuare l'aggiornamento.

Ora cerco di capirci qualcosa, appena riesco a trovare una soluzione...bho poi si vedrà cmq grazie per il consiglio

 O0

risposto 11 anni fa
ema85b
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda