Inserimento query Errore 1366

  • Creatore Discussione Creatore Discussione Kiko74b
  • Data di inizio Data di inizio

Kiko74b

Nuovo Utente
26 Giu 2022
19
2
3
Salve eccomi nuovamente a rompere con le mie banalissime domande
ho questa query :
PHP:
if(isset($_POST['add']))
{
$diabeticoid=$_POST['iddiabetico'];
$strisce=$_POST['strisce'];
$lancette=$_POST['lancette'];
$aghi=$_POST['aghi'];
$statoerogazione=1;
$sql="INSERT INTO tblerogazioni(Iddiabetico,ProductId1,ProductId2,ProductId3) 
      VALUES(:iddiabetico,:strisce,:lancette,:aghi);
      UPDATE tbldiabetici set StatoErogazione=:statoerogazione where id=:iddiabetico;";
$query = $dbh->prepare($sql);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$query->bindParam(':iddiabetico',$diabeticoid,PDO::PARAM_STR);
$query->bindParam(':strisce',$strisce,PDO::PARAM_STR);
$query->bindParam(':lancette',$lancette,PDO::PARAM_STR);
$query->bindParam(':aghi',$aghi,PDO::PARAM_STR);
$query->bindParam(':statoerogazione',$statoerogazione,PDO::PARAM_STR);
$query->execute();

E questo form di inserimento:
PHP:
<form role="form" method="post">

<div class="col-md-6">  
<div class="form-group">
    
<label> Seleziona Diabetico<span style="color:red;">*</span></label>
<select class="form-control" name="iddiabetico" required="required">
<option value=""> Seleziona Diabetico</option>
<?php
$sql = "SELECT * from  tbldiabetici where statoerogazione!=1 AND PianoTerapeutico > NOW() ORDER BY CognomeNome ASC";
$query = $dbh -> prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
foreach($results as $result)
{               ?>  
<option value="<?php echo htmlentities($result->id);?>"><?php echo htmlentities($result->CognomeNome);?></option>
 <?php }} ?> 
</select>
</div></div>

<div class="col-md-6">  
<div class="form-group">
<label> Seleziona Strisce<span style="color:red;">*</span></label>
<select class="form-control" name="strisce">
<option value=""> Seleziona Striscia</option>
<?php
$sql = "SELECT * from  tblbooks where CatId='7'";
$query = $dbh -> prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
foreach($results as $result)
{               ?>  
<option value="<?php echo htmlentities($result->id);?>"><?php echo htmlentities($result->BookName);?></option>
 <?php }} ?> 
</select>
</div></div>

<div class="form-group">
<span id="get_student_name" style="font-size:16px;"></span> 
</div>

<div class="col-md-6">  
<div class="form-group">
    
<label> Seleziona Lancette<span style="color:red;">*</span></label>
<select class="form-control" name="lancette">
<option value=""> Seleziona Lancette</option>
<?php
$sql = "SELECT * from  tblbooks where CatId='8'";
$query = $dbh -> prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
foreach($results as $result)
{               ?>  
<option value="<?php  echo htmlentities($result->id);?>"><?php echo htmlentities($result->BookName);?></option>
 <?php }} ?> 
</select>
</div></div>

<div class="col-md-6">  
<div class="form-group">
<label> Seleziona Aghi<span style="color:red;">*</span></label>
<select class="form-control" name="aghi">
<option value=""> Seleziona Aghi</option>
<?php 
$sql = "SELECT * from  tblbooks where CatId='9'";
$query = $dbh -> prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
foreach($results as $result)
{               ?>  
<option value="<?php echo htmlentities($result->id);?>"><?php echo htmlentities($result->BookName);?></option>
 <?php  }} ?> 
</select>
</div></div>
<button type="submit" name="add" id="submit" class="btn btn-info">
Inserisci Erogazione </button>

                                    </form>
Se il form viene popolato completamente tutto funziona se invece ometto di inserire gli aghi mi da questo errore indicando che sto cercando di inserire una stringa in un campo integer. Quello che ho trovato è questo codice
PHP:
if ($_POST['value'] === '') {
    $_POST['value'] = null; // or 'NULL' for SQL
}
attraverso il quale dovrei risolvere il problema nel senso che se il valore passato è esattamente vuoto deve convertirlo in null.
Secondo voi è la strada giusta oppure dovrei modificare la mia query? premetto che la tblerogazioni ha un solo valore autoincrement che è stato giustamente omesso dalla query.
 
io preferisco avere numeri nei campi numerici non il valore null
suggerisco

PHP:
$strisce  = !empty($_POST['strisce'])  ? $_POST['strisce']  : 0;
$lancette = !empty($_POST['lancette']) ? $_POST['lancette'] : 0;
$aghi     = !empty($_POST['aghi'])     ? $_POST['aghi']     : 0;
 
da qui nn posso testare domani proverò il tuo suggerimento. da quanto ho capito e perdona la banalità, le tre variabili in questo modo se sono vuote perche dal form non ho selezionato alcun articolo, inseriranno il numero zero, che è diverso da null, nel mysql db questi valori (strisce,lancette e aghi) assumono valore null predefinito. Questo è compatibile con la soluzione che mi suggerisci?
Inoltre nel momento in cui ottengo un valore numerico dovrei sostituire nel binding PDO::PARAM_STR con PDO::PARAM_INT?
 
ho capito che si tratta di campi numerici, il default dovrebbe essere 0 non null,
null potrebbe creare problemi quando si riutilizza il dato memorizzato nel db

di nuovo se i campi sono interi, giusto mettere ": param int"
 

Discussioni simili