Ajout d'une ligne dans une base de données (php)

Fermé
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 - Modifié par haikei00X le 21/08/2014 à 18:27
 Utilisateur anonyme - 22 août 2014 à 00:24
Bonjour à tous,
Je suis débutante en php/MySQL et on m'a accordé la tache de gérer une base de données MySQL à partir d'un code php. J'ai trouvé un soucis lors de l'ajout d'une ligne dans ma base.
Voici mon code:


<html>

<?php

$link=mysql_connect("localhost","root","");

if(!$link)
{
die('Erreur connexion'.mysql_error());
}


$Db_Select=mysql_select_db('shop',$link);

if(!$Db_Select)
{
die('Base non trouvée'.mysql_error());
}


$tab=$_POST['Table'];
$val1=$_POST['Value1'];
$val2=$_POST['Value2'];
$val3=$_POST['Value3'];
$val4=$_POST['Value4'];
$val5=$_POST['Value5'];

if( $tab='clients')
{
$sql= "INSERT INTO ".$tab." VALUES (".$val1." ,".$val2." ,".$val3." ,".$val4." ,".$val5." ) " or die ('SQL ERROR'.$sql.mysql_error() );
$req=mysql_query($sql);

if(isset($req) )
{
echo 'Ajout effectue';
}
else
{
echo 'Erreur Ajout non effectue';
}
}

if( $tab='commandes')
{
$sql= "INSERT INTO ".$tab." VALUES (".$val1." ,".$val2." ,".$val3." ) " or die ('SQL ERROR'.$sql.mysql_error() );
$req=mysql_query($sql);

if(isset($req) )
{
echo 'Ajout effectue';
}
else
{
echo 'Erreur Ajout non effectue';
}
}
if( $tab='produits')
{
$sql= "INSERT INTO ".$tab." VALUES (".$val1." ,".$val2." ,".$val3." ) " or die ('SQL ERROR'.$sql.mysql_error() );
$req=mysql_query($sql);

if(isset($req) )
{
echo 'Ajout effectue';
}
else
{
echo 'Erreur Ajout non effectue';
}
}
?>


<form Method="POST" Action="ajout.php">
<input type=submit name=bouton value="Go Back">
</form>

<form Method="POST" Action="connect.php">
<input type=submit name=bouton value=Menu>
</form>

</html>





Le problème c'est que ce code ci-dessus m'a permis d'ajouter des lignes dans certaines bases (celles qui contiennent des int et des float par exemples seulement )et
dans d'autres non (celles où il y a des chaines de caractères).


Je crois que j'ai un problème dans les variables plus précisément la manière avec laquelle je les ai interféré dans le code SQL.

Pouvez-vous s'il vous plaît m'aider sur ce coup là.
Merci d'avance.

2 réponses

Bonjour,

il faut regarder quel est le format des variables pour chacune des colonnes des tables.
Si on donne des chiffres dans une colonne qui doit recevoir du text çà ne pose pas de problème.
Mais l'inverse oui.

Je vois que dans certaines requête insert into tu ne mets pas le nom des colonnes. Il faut aussi faire attention au fait que tes tables n'ont pas forcement le même nombre de colonnes.

A ta place, je ferai une requête insert into pour chaque table.
2
Utilisateur anonyme
22 août 2014 à 00:24
Bonjour

Dans une requête SQL, les valeurs de types texte (VARCHAR et autres TEXT) doivent être mises entre apostrophes ou double quotes.

Quand tu écris
$sql= "INSERT INTO matab VALUES (".$val1.")";

et que $val1 contient toto, ta requête devient
INSERT INTO matab VALUES (toto)
alors qu'il faudrait
INSERT INTO matab VALUES ('toto')

Tu aurais donc dû écrire comme requête :
$sql= "INSERT INTO matab VALUES ('".$val1."')";


Bien sûr, ceci s'applique à tous les champs de ta requête.
Tu peux le faire sans danger pour les valeurs numériques aussi, ce qui t'évite d'avoir à faire attention au type de champ : mets systématiquement ces apostrophes.
Par contre, j'ai bien dit de les mettre autour des valeurs : pas autour des noms de tables ou de champs.
0