Inserimento dati nel database tramite form + altre operazioni

AndreaBet

Nuovo Utente
5 Giu 2020
19
0
1
23
Treviso
Salve a tutti,
innanzitutto grazie mille per l'aiuto offerto nel topic precedente.
Sto riscontrando un problema nell'inserimento di dati nel database tramite una form in quanto, seppur sia abbastanza sicuro che il codice sia corretto, non accade nulla. L'inserimento non avviene e non compaiono errori.
Lascio il codice:
PHP:
<html>
 <head>
 </head>
 <body>
 
  <form method="POST">
   IDcliente <input type="text" name="id"/> </br>
   Data <input type="date" name="data"/> </br>
   Bene <select name="nm">
  <?php
    $c = new mysqli("localhost","root","","elaborato");
    $s = "SELECT CodiceBene, Nome FROM Beni";
    $r=mysqli_query($c, $s);
    while ($row=mysqli_fetch_assoc($r)){
        $codice=$row['CodiceBene'];
        $nome=$row['Nome'];
        echo "<option value='$codice'>$nome</option>";
    }
  ?>
   </select> </br>
   Quantit&agrave; <input type="number" name="quan"/> </br>
   Prezzo <input type="number" name="prezzo"/> </br>
   Corriere  <select name="cor">
  <?php
    $s = "SELECT IDcorriere, Nome FROM Corrieri";
    $r=mysqli_query($c, $s);
    while ($row=mysqli_fetch_assoc($r)){
        $id=$row['IDcorriere'];
        $nome=$row['Nome'];
        echo "<option value='$IDcorriere'>$nome</option>";
    }
  ?>
   </select> </br>
   <input type="submit" name="reg" value="Registra"> </br>
  </form>
 
  <?php
    $id = $_POST["id"];
    $data = $_POST["data"];
    $bene = $_POST["nm"];
    $quan = $_POST["quan"];
    $prez = $_POST["prezzo"];
    $cor = $_POST["cor"];
    
    $s = "INSERT INTO Ordini (IDclienteFK, Data, CodiceBeneFK, Quantità, Prezzo, IDcorriereFK) VALUES
          ('$id','$data','$bene','$quan','$prez','$cor')";
    $r=mysqli_query($c, $s);
?>
 </body>
</html>

In secondo luogo stavo pensando ad un'alternativa del codice qui sopra nel quale il prezzo dell'ordine venga calcolato moltiplicando il prezzo del bene per la sua quantità. Lascio il codice creato come prova il quale ovviamente ha come base il form precedente:
Codice:
    $nomebene=$_POST["nm"];
    $quan=$_POST["quan"]:
    $s = "SELECT Prezzo FROM Beni WHERE Nome=$nomebene";
    $r=mysqli_query($c, $s);
    $prezzo1=$r->fetch_assoc();
    $prezzotot=$prezzo1*$quan;
    $s = "INSERT INTO Ordini (IDclienteFK, Data, CodiceBeneFK, Quantità, Prezzo, IDcorriereFK) VALUES
          ('$id','$data','$bene','$quan','$prezzotot','$cor')";
 
$s = "INSERT INTO Ordini (IDclienteFK, Data, CodiceBeneFK, Quantità, Prezzo, IDcorriereFK) VALUES ('$id','$data','$bene','$quan','$prez','$cor')";
Hai già provato a fare un inserimento con valori "manuali" per vedere se è un problema di variabili o di inserimento?
E poi forse sarebbe meglio mettere un isset prima di prendere le variabili per controllare che sia stato inviato
 
L'inserimento manuale avviene senza problemi. Magari il problema ha a che fare con il fatto che prima di 'IDClienteFK' nel database è presente anche 'IDOrdine'? Esso però è autoincrement pertanto non dovrebbe essere un problema non inserirlo.
Per quanto riguarda l'isset dove e come? L'unico modo di utilizzo che abbiamo trattato durante l'anno scolastico è stato il posizionamento di un !isset all'inizio del codice per vedere se era stato premuto il pulsante ma, come da topic precedente, l'ho dovuto rimuovere in quanto mi creava errori e non mi permetteva la creazione del menù a tendina
 
Intanto prova a modificare così:
PHP:
  <?php
$c = new mysqli("localhost","root","","elaborato");
if(isset($_POST['reg'])){
    $id = $_POST["id"];
$data = $_POST["data"];
$bene = $_POST["nm"];
$quan = $_POST["quan"];
$prez = $_POST["prezzo"];
$cor = $_POST["cor"];

$ins = "INSERT INTO Ordini (IDclienteFK, Data, CodiceBeneFK, Quantità, Prezzo, IDcorriereFK) VALUES
('$id','$data','$bene','$quan','$prez','$cor')";
$ris=mysqli_query($c, $ins);
}
?>
<html>
 <head>
 </head>
 <body>
 
  <form method="POST" action="">
   IDcliente <input type="text" name="id"/> </br>
   Data <input type="date" name="data"/> </br>
   Bene <select name="nm">
  <?php
$s = "SELECT CodiceBene, Nome FROM Beni";
$r=mysqli_query($c, $s);
while ($row=mysqli_fetch_assoc($r)){
$codice=$row['CodiceBene'];
$nome=$row['Nome'];
echo "<option value='$codice'>$nome</option>";
}
?>
   </select> </br>
   Quantit&agrave; <input type="number" name="quan"/> </br>
   Prezzo <input type="number" name="prezzo"/> </br>
   Corriere  <select name="cor">
  <?php
    $s = "SELECT IDcorriere, Nome FROM Corrieri";
$r=mysqli_query($c, $s);
while ($row=mysqli_fetch_assoc($r)){
$id=$row['IDcorriere'];
$nome=$row['Nome'];
echo "<option value='$IDcorriere'>$nome</option>";
}
?>
   </select> </br>
   <input type="submit" name="reg" value="Registra"> </br>
  </form>
 </body>
</html>
 
Grazie veramente per il tuo aiuto Tommy.
Ho provato ad utilizzare il tuo codice ma l'inserimento non va a buon fine. Ho un dubbio: nell'insert io devo inserire il codice del bene. Dal menù a tendina però seleziono il nome. Nonostante questo però una volta che io seleziono il nome del bene dal menù a tendina comunque effettivamente vado a selezionare il suo codice no? Perché se così non fosse potrebbe essere quello il problema. Al posto di inserire il codice sto andando ad inserire il nome e pertanto l'inserimento non avviene
 
No no inserisci il codice, perché è value.
Prova ad aggiungere questo e dì cosa visualizzi:
PHP:
<?php
$c = new mysqli("localhost","root","","elaborato");
if(isset($_POST['reg'])){
$id = $_POST["id"];
$data = $_POST["data"];
$bene = $_POST["nm"];
$quan = $_POST["quan"];
$prez = $_POST["prezzo"];
$cor = $_POST["cor"];
echo "$id<br>$data<br>$bene<br>$quan<br>$prez<br>$cor";
$ins = "INSERT INTO Ordini (IDclienteFK, Data, CodiceBeneFK, Quantità, Prezzo, IDcorriereFK) VALUES
('$id','$data','$bene','$quan','$prez','$cor')";
$ris=mysqli_query($c, $ins);
}
?>
<html>
 <head>
 </head>
 <body>
 
  <form method="POST" action="">
   IDcliente <input type="text" name="id"/> </br>
   Data <input type="date" name="data"/> </br>
   Bene <select name="nm">
  <?php
$s = "SELECT CodiceBene, Nome FROM Beni";
$r=mysqli_query($c, $s);
while ($row=mysqli_fetch_assoc($r)){
$codice=$row['CodiceBene'];
$nome=$row['Nome'];
echo "<option value='$codice'>$nome</option>";
}
?>
   </select> </br>
   Quantit&agrave; <input type="number" name="quan"/> </br>
   Prezzo <input type="number" name="prezzo"/> </br>
   Corriere  <select name="cor">
  <?php
    $s = "SELECT IDcorriere, Nome FROM Corrieri";
$r=mysqli_query($c, $s);
while ($row=mysqli_fetch_assoc($r)){
$id=$row['IDcorriere'];
$nome=$row['Nome'];
echo "<option value='$IDcorriere'>$nome</option>";
}
?>
   </select> </br>
   <input type="submit" name="reg" value="Registra"> </br>
  </form>
 </body>
</html>
Le variabili le leggi correttamente?
 
Compare questo. Stampa i valori inseriti nel form ma non li inserisce nel database.
E ora che ci faccio caso non stampa il codice del corriere.
 

Allegati

  • Prova.png
    Prova.png
    6,2 KB · Visite: 362
Probabilmente il problema deriva proprio dal fatto che il codice del corriere non viene salvato in quanto si tratta di un'entità "obbligatoria" da inserire nella tabella
 
Si cavolo, l'ho notato anche io non appena ho inviato l'ultimo messaggio. Apparentemente il problema nell'inserimento era proprio quello! Sto diventando fuso e non mi rendo conto nemmeno di queste sciocchezze. Grazie mille!
Per quanto riguarda la seconda domanda del topic? L'idea è correttamente applicata?
 
$s = "SELECT Prezzo FROM Beni WHERE Nome=$nomebene"; $r=mysqli_query($c, $s); $prezzo1=$r->fetch_assoc();
Si, ma questo pezzo devi cambiarlo così:
PHP:
$seleziona = mysqli_query($c, "SELECT Prezzo FROM Beni WHERE Nome='$nomebene'");
while($get_sel=mysqli_fetch_assoc($seleziona)){
    $prezzo1=$get_sel['Prezzo'];
}
 
Perfetto! Funziona! Avevo riscontrato degli errori iniziali ma nulla che la mia piccola mente non riuscesse a risolvere.
Riusciresti brevemente a spiegarmi il funzionamento/significato delle indicazioni presenti nel ciclo while?

In ogni caso tii ringrazio molto per il tuo aiuto. La prossima cosa che punto a fare è quella di rimuovere la merce dal magazzino una volta acquistata ma credo possa bastare un ALTER TABLE (mi sembra sia questa la funzione) con il quale modificare la quantità in magazzino, qualcosa del tipo "quantitàmag - quantitàordinata".
Dopodichè procederò anche alla creazione di una maschera dove invece di rimuovere si inserisce merce nel magazzino ma alla fine si tratta dello stesso procedimento inverso immagino.
 
Sto provando a creare un form con il quale inserire la quantità di merce da aggiungere alle scorte ma quando provo ad estrarre dal database la quantità già esistente non mi salva la variabile.
L'errore che mi da è: Undefined variable: q1 on line 11
Il codice è:
PHP:
<?php
    $c = new mysqli("localhost","root","","elaborato");
    if(isset($_POST['reg'])){
        $id = $_POST["id"];
        $q = $_POST["quan"];

        $s = mysqli_query($c, "SELECT Quantità FROM Scorte WHERE CodiceBeneFK='$id'");
        while($get_sel=mysqli_fetch_assoc($s)){
            $q1=$get_sel['Quantità'];
        }
    $quantitàtot=$q1+$q;

    $alt = "UPDATE Scorte SET 'Quantità'=[$quantitàtot] WHERE CodiceBeneFK='$id'";
    $ris=mysqli_query($c, $alt);
    }
?>

<html>
 <head>
 </head>
 <body>
 
  <form method="POST">
   Scorta <select name="id"/>
  <?php
    $s = "SELECT CodiceBeneFK, Nome FROM Scorte, Beni WHERE CodiceBene=CodiceBeneFK";
    $r=mysqli_query($c, $s);
    while ($row=mysqli_fetch_assoc($r)){
        $id=$row['CodiceBeneFK'];
        $nm=$row['Nome'];
        echo "<option value='$id'>$nm</option>";
    }
    ?>
   </select> </br>
   Quantit&agrave; <input type="number" name="quan" value="inserisci quantit&agrave; da aggiungere alla scorta"/> </br>
   <input type="submit" name="reg" value="Registra"> </br>
  </form>
 </body>
</html>
 
<?php $c = new mysqli("localhost","root","","elaborato"); if(isset($_POST['reg'])){ $id = $_POST["id"]; $q = $_POST["quan"]; $s = mysqli_query($c, "SELECT Quantità FROM Scorte WHERE CodiceBeneFK='$id'"); while($get_sel=mysqli_fetch_assoc($s)){ $q1=$get_sel['Quantità']; } $quantitàtot=$q1+$q; $alt = "UPDATE Scorte SET 'Quantità'=[$quantitàtot] WHERE CodiceBeneFK='$id'"; $ris=mysqli_query($c, $alt); } ?>
1. la variabile $quantitàtot devi cambiarla senza accento (tipo $quantita)
2. la somma va dentro al while
3. l'UPDATE non può funzionare perché prelevi più record, quindi $quantita ha più valori
4.se il tuo obiettivo è sommare la quantità del form alla quantità del database ti conviene fare cosi:
PHP:
<?php
    $c = new mysqli("localhost","root","","elaborato");
if(isset($_POST['reg'])){
$id = $_POST["id"];
$q = $_POST["quan"];
$alt = "UPDATE Scorte SET Quantità=Quantità+$q WHERE CodiceBeneFK='$id'";
$ris=mysqli_query($c, $alt);
}
?>
 
  • Like
Reactions: AndreaBet
Cavolo proprio stupido l'errore della variabile accentata, non sai quante volte mi è stato ripetuto durante il terzo anno di non fare errori simili durante la programmazione in c++.
Grazie per la risoluzione, ci sarei dovuto arrivare da solo ma è da un bel po' che non tocchiamo più questi temi quindi mi sono un po' perso
 
Ultima domanda della serata lo prometto, cosa c'è che non va qui? Sto provando ad effettuare il controllo per vedere se la quantità richiesta/ordinata è maggiore di quella in magazzino
PHP:
<?php
    $c = new mysqli("localhost","root","","elaborato");
    if(isset($_POST['reg'])){
        $id = $_POST["id"];
        $data = $_POST["data"];
        $codbene = $_POST["nm"];
        $qordine = $_POST["quan"];
        $cor = $_POST["cor"];

        $s = mysqli_query($c, "SELECT Quantità FROM Scorte WHERE CodiceBeneFK='$id'");
        while($get_sel=mysqli_fetch_assoc($s)){
            $qscorta=$get_sel['Quantità'];
        }
        
        if("$qscorta"<"$qordine")
            echo "Impossibile procedere all'ordine, quantit&agrave; di merce insufficiente";
        else{       
            $s = mysqli_query($c, "SELECT Prezzo FROM Beni WHERE CodiceBene='$codbene'");
            while($get_sel=mysqli_fetch_assoc($s)){
                $prezzo1=$get_sel['Prezzo'];
            }
            $prezzotot=$prezzo1*$quan;

            $i = "INSERT INTO Ordini (IDclienteFK, Data, CodiceBeneFK, Quantità, Prezzo, IDcorriereFK) VALUES
                ('$id','$data','$codbene','$quan','$prezzotot','$cor')";
            $ris=mysqli_query($c, $i);
    
            alt = "UPDATE Scorte SET Quantità=Quantità-$qordine WHERE CodiceBeneFK='$id'";
            $r=mysqli_query($c, $alt);
        }
    }
?>
 
Grazie.
Il controllo però sul se la quantità ordinata sia maggiore di quella disponibile non funziona ancora.
Quando infatti provo ad ordinare 999 beni seppur ce ne siano solo 30 me lo fa fare tranquillamente
 

Discussioni simili