Bonjour,
Je rencontre un petit problème avec mon code.
Je cherche à envoyer des données dans une base de donnée
<body>
<h1>Ajouter des données</h1>
<form action="insertionnet.php" method="post">
<!-- 1 question du questionaire choix nom -->
<p>
<label for="id">Nom</label>
<select name="id">
<option>Alain Davi</option>
<option>Léa Damery</option>
</select>
</p>
<!-- Collecte Date et Heure -->
<p>
<label for="cf">Chambre Froide :</label>
<select name="cf">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="pat">Frigo Patisserie :</label>
<select name="pat">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="pcf">Poste Chambre Froide :</label>
<select name="pcf">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="frno">Piano:</label>
<select name="frno">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="tc">Table Chaude :</label>
<select name="tc">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="tcc">Poste Patisserie :</label>
<select name="tcc">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="spat">Plonge :</label>
<select name="spat">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="plg">Remise :</label>
<select name="plg">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<p>
<label for="rem">Sol :</label>
<select name="rem">
<option>Oui</option>
<option>Non</option>
</select>
</p>
<!-- Envoyer -->
<p> <input type="submit" value="Envoyer">
</p>
<?php
//collecte des info + transmission bdd
$user='root';
$pass='';
$host='localhost';
$dbname='net';
$id=$_POST['id'];
$cf=$_POST['cf'];
$pat=$_POST['pat'];
$frno=$_POST['frno'];
$tc=$_POST['tc'];
$tcc=$_POST['tcc'];
$spat=$_POST['spat'];
$plg=$_POST['plg'];
$rem=$_POST['rem'];
$sol=$_POST['sol'];
$conn = new mysqli ($host, $user, $pass, $dbname);
if(mysqli_connect_error()){
die('Connect Error ('.mysqli_connect_errno().')'
.mysqli_connect_error());
}
else{
$sql3 = "INSERT INTO net (id,cf,pat,pcf,frno,tc,tcc,spat,plg,rem,sol) values ('$id','$cf','$pat','$frno','$tc','$tcc','$spat','$plg','$rem','$sol')";
if ($conn->query($sql3)){
echo "Succes";}
else{
echo "Error :".$sql3."<br>".$conn->error;
}
}
$conn->close();
Error :INSERT INTO net (id,cf,pat,pcf,frno,tc,tcc,spat,plg,rem,sol) values ('','','','','','','','','','')
Column count doesn't match value count at row 1
https://drive.google.com/file/d/1Eq5HAZVngmszqb16H9HITLc3PVAy6fSg/view?usp=sharing
Merci de votre aideBonsoir,
Il faudra penser à préparée ta requêtes pour éviter les injections SQL
Ton erreur viens du faite que tes options n'ont pas de "value"
Je rajoute également, que tu as 10 valeurs pour 11 colonnes à modifier. il te manque $pcf, si je comprend bien.
Je me doute bien que ce doit être un test ou un excercice pour tester une connection DB... Mais faites un effort :
Je fais un exemple ici: (non-testé)...
DAO : DatabaseAccessObject.php :
<?php
class DatabaseAccessObject extends \mysqli
{
/**
* Creates a prepared query, binds the given parameters and returns the result of the executed
* {@link \mysqli_stmt}.
* @param string $query
* @param array $args
* @return bool|\mysqli_result
*/
public function queryPrepared($query, array $args)
{
$stmt = $this->prepare($query);
$params = [];
$types = array_reduce($args, function ($string, &$arg) use (&$params) {
$params[] = &$arg;
if (is_float($arg)) $string .= 'd';
elseif (is_integer($arg)) $string .= 'i';
elseif (is_string($arg)) $string .= 's';
else $string .= 'b';
return $string;
}, '');
array_unshift($params, $types);
call_user_func_array([$stmt, 'bind_param'], $params);
$result = $stmt->execute() ? $stmt->get_result() : false;
$stmt->close();
return $result;
}
}
Model : NetModel.php
<?php
class NetModel implements \ArrayAccess
{
private $id;
private $cf;
private $pcf;
private $pat;
private $frno;
private $tc;
private $tcc;
private $spat;
private $plg;
private $rem;
private $sol;
public function __construct(array $properties)
{
foreach ($properties as $key => $property)
{
if(property_exists($this, $key)) {
$this->$key = $property;
}
}
}
public function offsetExists($offset)
{
if(property_exists($this, $offset))
{
return true;
}
return false;
}
public function offsetGet($offset)
{
if(property_exists($this, $offset))
{
return $this->$offset;
}
return null;
}
public function offsetSet($offset, $value)
{
if(property_exists($this, $offset))
{
$this->$offset = $value;
}
}
public function offsetUnset($offset)
{
if(property_exists($this, $offset))
{
$this->$offset = null;
}
}
// Getters & Setters (a faire toi-même)
}
Persistance (insertionnet.php) :
// Cette partie là pourrait se mettre dans un fichier non-accesible par le navigateur. genre un config.php qui n'est pas dans le DocumentRoot.
$user='root';
$pass='';
$host='localhost';
$dbname='net';
try {
$conn = new DatabaseAccessObject($host, $user, $pass, $dbname);
$netInstance = new NetModel($_POST);
$conn->queryPrepared(INSERT INTO net (id,cf,pat,pcf,frno,tc,tcc,spat,plg,rem,sol) values (?), implode(",", $netInstance));
} catch ($e) {
echo $e->getMessage();
} finally {
$conn->close();
}
A tester, mais je ferai un truc dans ce goût là.