[PHP] inserimento su DB da tabella

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao a tutti, ho una griglia generata con il seguente codice:
PHP:
<form method="GET" action="miapagina.php" id="griglia">
<table>
<tr>
<?php
for ( $colonna = 1; $colonna <= 25; ++$colonna ) {
        if ($colonna==1) $num = 1 ; else $num=15*($colonna-1)+1;
echo "<td>
<input type='text' name='nome' value='N ' size='1' maxlength='3'><input type='checkbox' name='$num'>
</td>  ";
        
for ( $riga = 1; $riga <= 14; ++$riga ) {
        $cont = ($colonna-1)*15+$riga+1;   
        echo "<td><br><input type='text' name='nome' value='N ' size='1' maxlength='3'><input type='checkbox' name='$cont'>
 </td>  ";
        }
        echo "</tr>";
      }  echo "</tr>";
?>   
</table>
<button type="submit" >INVIA</button>
</form>
Ora io dovrei inserire sul database tutti i valori . In un campo "attivo" nella tbella del DB dovrei mettere un 1 se la cella della griglia era flaggata altrimenti uno 0.
Non so se sto seguendo la strada giusta o se c'è un modo più semplice.
Mi consigliate un sistema per inserire tutti questi dati nel DB?
Grazie a tutti
 
PHP:
for ( $colonna = 1; $colonna <= 25; ++$colonna ) {
        if ($colonna==1) $num = 1 ; else $num=15*($colonna-1)+1;
echo "<td>
<input type='text' name='nome' value='N ' size='1' maxlength='3'><input type='checkbox' name='check[$num]'>
</td>  ";
       
for ( $riga = 1; $riga <= 14; ++$riga ) {
        $cont = ($colonna-1)*15+$riga+1;  
        echo "<td><br><input type='text' name='nome' value='N ' size='1' maxlength='3'><input type='checkbox' name='$cont'>
 </td>  ";
        }
        echo "</tr>";
      }  echo "</tr>";
Ipitizzando che in $num hai l'ID dell'item sul database:
PHP:
if(isset($_POST['qualcosa'])){

$model_insert=[];

foreach($_POST['qualcosa']['check'] as $items){

//solo se usi librerie e/o framework
$model_insert[]=['id'=>$items,'status'=>1];

//solo non utilizzi librerio o framework
$model_insert=['id'=>$items,'status'=>1];
$conn->query("INSERT INTO TABLE ('id','status') VALUES ($model_insert['id'],$model_insert['status']");

}

//ipotizzando tu stia utilizzando qualche framework e/o libreria mysql
$split_insert=array_chunk($model_insert,10);
foreach($split_insert as $items){
        $this->connection->insert('tabella',$items);
}


}
 
Ciao e grazie per la cortese risposta.
Dimmi se ho capito.
In questo modo tutti i campi che sono stati flaggati vengono inseriti nel DB con valore status a 1.Giusto ?
Se è cosi non va bene per me, io ho bisogno che vengano inseriti tutti , poi se è flaggato metto lo status a 1 altrimenti a 0.
Quando scrivi :
Codice:
foreach($_POST['qualcosa']['check'] as $items){.......
qui va bene se metto [name] che sarebbe quanto era scritto all'interno dell'input della form (dove era name='check[$num]' )
 
Ti chiedo scusa non ho capito.
La mia considerazione era solo guardando il codice, ora lo provo e vedo se funziona.
Nella riga che ti ho indicato va bene se inserisco
Codice:
foreach($_POST['nome']['check'] as $items)
?
 
mi da questo errore:
Warning: Illegal string offset 'check' on line 68

Warning: Invalid argument supplied for foreach() on line 68

e la riga di codice 68 è
foreach($_POST['nome']['check'] as $items){

 
si ma devi impostare il name del checkbox...
per come hai scritto dovresti avere i checkbox in questo modo:
Codice:
<input type="checkbox" name="nome[check][]" />
 
forse ti basta salvare nel db solo due stringhe ....
PHP:
<?php

$rows  = 25;
$cols  = 15;
$cells = $rows * $cols;

if ( empty($_POST) )
{
    $x     = 0;

    echo "<form method='POST' action='' id='griglia'><table>";

    for ( $r = 1; $r <= $rows; ++$r )
    {
        echo "<tr>";
        for ( $c = 1; $c <= $cols; ++$c )
        {
            ++$x;
            echo "<td><input type='text' name='nome[".$x."]' value='N ' size='1' maxlength='3'><input type='checkbox' name='check[".$x."]'>&nbsp;&nbsp;&nbsp;</td>";
        }
        echo "</tr>";
    }
    echo "</table><br /><button type='submit' >INVIA</button></form>";
}
else
{
    extract($_POST, EXTR_OVERWRITE);
    $_POST = "";

    for ( $x = 1; $x <= $cells; ++$x ) { $checked[$x] = ( isset( $check[$x] ) ? 1 : 0 ); }
    $check = "";

    $jsonNome    = json_encode($nome);
    $jsonChecked = json_encode($checked);

    echo $jsonNome."<br /><br />".$jsonChecked."<br /><br />";
}
?>

esegui lo script così com'è e vedi l'effetto che fa ....
 
si ma devi impostare il name del checkbox...
per come hai scritto dovresti avere i checkbox in questo modo:
Codice:
<input type="checkbox" name="nome[check][]" />

Ciao macus_adi il mio checkbox è cosi:
Codice:
<input type='checkbox' name='check[$num]'>
Lo devo correggere?

forse ti basta salvare nel db solo due stringhe ....
esegui lo script così com'è e vedi l'effetto che fa ....

Ciao marino51 , lo script che mi hai indicato crea perfettamente 2 stringhe , una con il nome e una con il check a 1 oppure 0, però non capisco come faccio poi a recuperare questi dati. Io li devo mettere in una tabella composta da id,nome ,status.

Ciao e grazie a tutti
 
Ultima modifica:
nella tabella si scrive con una sola insert
PHP:
INSERT INTO tabella (id, nome, stato) VALUES ($id, '$jsonNome', '$jsonChecked')

e la si legge con una sola select
PHP:
SELECT id, nome, stato FROM tabella WHERE id = $id

supponendo di ottenere il record in $row, si rigenerano le due array
PHP:
$nome    = json_decode($row['nome']);
$checked = json_decode($row['stato']);

che sono pronte per l'uso
 
Con tutto il rispetto, in caso di manipolazione del DOM, la soluzione risulta inadeguata per sicurezza e inconsistenza di dati.
con tutto il rispetto anche salvando in successione gli indici, il risultato non cambia
sempre inconsistenza si ottiene ...
quando si apportano modifiche, sappiamo tutti che si paga un prezzo, sempre e con qualunque soluzione adottata
 
Vabbè, ho utilizzato la parolina "model", e sicuramente farà qualcosa nel codice....
$model_insert=['id'=>$items,'status'=>1];
No che abbia scritto il modello..... Attenzione, ho richiamato l'attenzione al MODEL.
In ambito di applicazioni reali non è così... Stop, tranquillo, rilassati...
 
@marino51
@macus_adi
Già in diverse discussioni avete e avete avuto battibecchi! Non è il caso di smetterla?
Vi ringrazio tantissimo
ciao.gif
ciao.gif
 
Cattura.JPG
nella tabella si scrive con una sola insert
PHP:
INSERT INTO tabella (id, nome, stato) VALUES ($id, '$jsonNome', '$jsonChecked')

e la si legge con una sola select
PHP:
SELECT id, nome, stato FROM tabella WHERE id = $id

supponendo di ottenere il record in $row, si rigenerano le due array
PHP:
$nome    = json_decode($row['nome']);
$checked = json_decode($row['stato']);

che sono pronte per l'uso
Ciao ragazzi io vi ringrazio per l'entusiasmo ma non ci stò capendo più niente. Provo a seguire una delle 2 strade, una alla volta sennò non ne uscirò più.
marino51 facendo in questo modo ottengo una stringa da inserire nel DB , allora $id cosa rappresenta?
Spero abbiate la pazienza di spiegarmi.
Grazie
 
Ultima modifica:
supponendo di ottenere il record in $row, si rigenerano le due array
PHP:
$nome    = json_decode($row['nome']);
$checked = json_decode($row['stato']);

che sono pronte per l'uso

Esattamente $row cosa rappresenta? Come lo devo utilizzare?
Ti ripeto di scusarmi ancora per queste domande che magari per voi hanno una risposta semplicissima.
 

Discussioni simili