Probleme avec mon code php et ma base de donnée mysql

Fermé
roland999 Messages postés 32 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 18 février 2014 - 27 oct. 2013 à 12:47
roland999 Messages postés 32 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 18 février 2014 - 4 nov. 2013 à 18:04
salut je suis amateur dans la programmation php. j'ais écrire un code php qui me permet d'enregistrer un formulaire dans ma base de donnée... voici le code du formulaire

<form id="form1" name="form1" method="post" action="reponse.php" enctype="multipart/form-data">
<table width="77%" border="0" align="center" cellpadding="3" cellspacing="3">
<tr>
<th height="50" colspan="4" valign="middle" bgcolor="#999999"><h2><span class="Style6">FICHE RENSEIGNEMENT POUR REGLEMENT PAR CHEQUE</span></h2></th>
</tr>
<tr>
<th height="24" colspan="4" valign="middle" bgcolor="#FFFFFF"><input type="hidden" name="id" id="id" /></th>
</tr>
<tr>
<td width="36%" bgcolor="#CCCCCC">Nom</td>
<td width="64%" colspan="3" bgcolor="#CCCCCC"><label>
<input type="text" name="nom" id="nom" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Prénoms</td>
<td colspan="3" bgcolor="#CCCCCC"><label>
<input type="text" name="prenom" id="prenom" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Nationalité</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="nation" id="nation" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Numéro pièce d'identité</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="numpiece" id="numpiece" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Adresse postale </td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="adresse" id="adresse" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Lieu d'habitation</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="commune" id="commune" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Téléphone</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="tel" id="tel" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Bureau</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="buro" id="buro" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Céllulaire</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="cel" id="cel" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Profession</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="profession" id="profession" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Banque</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="bank" id="bank" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">N° de compte</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<input type="text" name="compte" id="compte" />
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Date</td>
<td bgcolor="#CCCCCC"><label>
<input type="text" name="jour" id="jour" />
JJ</label></td>
<td bgcolor="#CCCCCC"><label>
<input type="text" name="mois" id="mois" />
MM</label></td>
<td bgcolor="#CCCCCC"><label>
<input type="text" name="annee" id="annee" />
AAAA</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC">Photo</td>
<td bgcolor="#CCCCCC" colspan="3"><label>
<img src="images/photo.jpg" width="110" height="130" id="img"/>
<input name="MAX_FILE_SIZE" id="photo" type="hidden" value="10000000000">
<input name="photo" id="photo" type="file" value="Ajouter">
</label></td>
</tr>
<tr>
<td bgcolor="#CCCCCC" colspan="4" align="center"><label>
<input name="valider" type="submit" id="valider" value="Valider" />
<input type="reset" id="annuler" value="Annuler"/>
</label></td>
</tr>
</table>
</form>

voici le code php

<?php
// On commence par récupérer les champs


if(isset($_POST['id'])) $id=$_POST['id'];
else $id="";

if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";

if(isset($_POST['prenom'])) $prenoms=$_POST['prenom'];
else $prenom="";

if(isset($_POST['nation'])) $nationalite=$_POST['nation'];
else $nationalite="";

if(isset($_POST['numpiece'])) $numpieceid=$_POST['numpiece'];
else $numpieceid="";

if(isset($_POST['adresse'])) $adrpostale=$_POST['adresse'];
else $adrpostale="";

if(isset($_POST['commune'])) $lieuhabitation=$_POST['commune'];
else $lieuhabitation="";

if(isset($_POST['tel'])) $tel=$_POST['tel'];
else $tel="";

if(isset($_POST['buro'])) $bureau=$_POST['buro'];
else $bureau="";

if(isset($_POST['cel'])) $cel=$_POST['cel'];
else $cel="";

if(isset($_POST['profession'])) $profession=$_POST['profession'];
else $profession="";

if(isset($_POST['bank'])) $banque=$_POST['bank'];
else $banque="";

if(isset($_POST['compte'])) $comptebank=$_POST['compte'];
else $comptebank="";

if(isset($_POST['jour'])) $jour=$_POST['jour'];
else $jour="";

if(isset($_POST['mois'])) $mois=$_POST['mois'];
else $mois="";

if(isset($_POST['annee'])) $annee=$_POST['annee'];
else $annee="";

if( isset($_POST['valider']) )


{
$content_dir = 'C:\wamp\www\payement_par_cheque\receptimg\tmp'; // dossier où sera déplacé le fichier
print_r($_FILES['photo']);

$tmp_file = $_FILES['photo']['tmp_name'];


if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
}

// on vérifie maintenant l'extension

$type_file = $_FILES['photo']['type'];


if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') && !strstr($type_file, 'png') )
{
exit("Le fichier n'est pas une image");
}


// on copie le fichier dans le dossier de destination
$name_file = $_FILES['photo']['name'];
$photo=$name_file;




if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}

echo "Le fichier a bien été uploadé";
}

// connexion à la base
$db = mysql_connect('localhost', 'root', "") or die('Erreur de connexion '.mysql_error());
// sélection de la base

mysql_select_db('client',$db) or die('Erreur de selection '.mysql_error());

$date = $jour.'-'.$mois.'-'.$annee;

// on écrit la requête sql
$sql = "INSERT INTO membres VALUES ('$id','$nom',' $prenoms','$nationalite','$numpieceid','$adrpostale', '$lieuhabitation','$tel','$bureau','$cel','$date','$profession','$banque','$comptebank','$date','$photo')";

// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur
echo 'Vos infos on été ajoutées.';

mysql_close(); // on ferme la connexion

?>



dans la base de donnée le champs id est auto incrémenter

quand je lance le code voila ce que on me dire

Array ( [name] => original.jpg [type] => image/jpeg [tmp_name] => C:\wamp\tmp\phpB56.tmp [error] => 0 [size] => 56099 ) Le fichier a bien été uploadéErreur SQL !INSERT INTO membres VALUES ('','roar',' roland','ivoirienne','c88888888888888','bp 3014 abidjan 01', 'cocody','22332536','21457896','47659054','14-05-2013','infographiste','sgbci','c8758965695369','14-05-2013','original.jpg')
Column count doesn't match value count at row 1

s'il vous plait aidez moi
A voir également:

1 réponse

Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
27 oct. 2013 à 14:36
bonjour,

ton erreur viens de ta requête sql, le problème c'est que tu n'as pas posté la structure de ta table.

pour insérer des données c'est plus verbeux mais il vaut mieux spécifier les champs :

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

sans spécifier les champs que tu ne veux pas remplir comme celui en auto-incrément par exemple

sinon ce n'est pas terrible de faire des exit par tout parce que ton site plante complètement à la moindre erreur. ça reviens à faire un blue screen de windows pour un upload qui à foiré.

Les fonction mysql sont obsolètes il faut utiliser pdo : https://www.php.net/pdo
et un exemple de fonction obsolète : https://www.php.net/manual/fr/function.mysql-connect.php
PDO à beaucoup d'avantage comme par exemple rendre impossible les injections sql avec les requêtes préparée.


Dans l'ensemble ton formulaire est mal contrôlé. Déjà ca ne sert strictement à rien de passer une variable post dans une variable normale de cette facon :
 if(isset($_POST['mois'])) $mois=$_POST['mois'];
else $mois="";

ensuite tu ne vérifies pas si le champs est vide ou non du coup il suffit de laisser le formulaire vide pour faire des entrées inutiles dans la base de données.

à la limite ce code serait plus pertinent :
$mois = (!empty($_POST['mois']))? $_POST['mois'] : '';
mais avec le défaut de ne pas vérifier que tout les champs ont été transmit.

il faut aussi éviter le développement procédurale comme ça et créer des fonctions qui suivent quelques principes comme être simple, si un code se répète plus d'une fois il doit être remplacé par une fonction par exemple

function test($post) {
return (!empty($post))? $post : '';
}

puis utilisé :
$mois = test($_POST['mois']);

de cette manière le code est beaucoup plus court et plus facile à maintenir

par exemple là si tu veux remplacer les isset par des !empty tu doit le faire pleins de fois alors que sous forme de fonction tu n'as qu'une fois à le faire.

Le mieux c'est de développer en objet, en utilisant au moins les classes comme espace de nom, c'est à dire que plutôt que de faire par exemple pleins de fonctions formulaire_test par exemple pour la petite fonction juste au dessus (si tu veux tester différentes chose dans différents domaine il peu vite y avoir beaucoup de fonctions avec des nom à rallonge et le risque de nommer 2 fonction de la même façon.

avec les classes ce problème ne se pose plus.

par exemple :

class formulaire {
public static funtion test($post) {
return (!empty($post))? $post : '';
}

public static function upload() {
...
}
}

dans ce cas la fonction test s'appelle de cette façon :
$mois = formulaire::test($_POST[''mois]);

Bon je m'arrête là, il y a trop de chose à dire et je ne peux pas faire un cours complet ici, le net en regorge.

J'espère que ça pourra t'aider à avancer.
0
Utilisateur anonyme
27 oct. 2013 à 15:34
salut,

ton erreur viens de ta requête sql, le problème c'est que tu n'as pas posté la structure de ta table. 

c'est pas obligatoire si il compte inserer tout les champs, mais dns ce cas il sera obligé de fournir tout les données et remplcer ceux qu'il souhaite pas inserer avec ''

mysql_error columns count doesn't mutch signifie qu'il a oblié un champ lors de l'insertion,
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
27 oct. 2013 à 17:10
oui je voulais juste dire par la qu'on ne pouvais pas lui corriger la requête et l'erreur en elle même n'est pas importante là parce que cette façon de faire ce n'est pas terrible. sans écrire explicitement le nom des champs dans la requête on se perd dans le code et c'est plus compliqué à debugger
0
roland999 Messages postés 32 Date d'inscription dimanche 27 octobre 2013 Statut Membre Dernière intervention 18 février 2014
4 nov. 2013 à 18:04
merci sa ma beaucoup aider
0