Problème d'insert sql et pourtant aucune erreur ne s'affiche

Eléphanteau du PHP | 14 Messages

30 juil. 2009, 18:50

Bonjour,

Mes users passwaord sont bons

J'ai créé ma table avec cette requete :

Code : Tout sélectionner

CREATE TABLE COMPUTER (idpostes INT not null AUTO_INCREMENT, Nom VARCHAR (255) not null , Serveur_de_réference VARCHAR (255) not null , Serveur_authentification VARCHAR (255) not null , IP VARCHAR (255) not null , Lastlogon DATE not null , PRIMARY KEY (idpostes))
ma DB est dev001
ma table est computer
<?php 
 
$link = mysql_connect("localhost", "root", "mysql")
    or die("Impossible de se connecter : " . mysql_error());
echo "Bonjour le monde"," <br /> ";
echo "Connexion réussie"," <br /> ";

mysql_select_db('dev001');

$ouvre=fopen("c:\\tableau.txt","r"); // ouverture du fichier en local

while (!feof ($ouvre))

{$lecture = fgets($ouvre, 4096); // stockage dans $lecture
    list($champ1, $champ2, $champ3, $champ4, $champ5)= split (";", $lecture, 5);
    $requeteinsert="INSERT INTO computer (Nom,Serveur_de_réference,Serveur_authentification,IP,Lastlogon) VALUES ('".$champ1."','".$champ2."','".$champ3.",'".$champ4.",'".$champ5."')";
$executequery=mysql_query($requeteinsert, $link);;}
echo 'traitement en cours... veuillez patienter !'," <br /> ";;

fclose($ouvre);// fermeture
echo 'traitement terminé.';

mysql_close($link);
?>
Ayant l'impression d'avoir bien écrit mon code et étant complétement débutant, je m'en remet à vous
car je n'ais aucun moyen de debugué, et je n'ais aucun message d'erreur pourtant ma table reste
désésperement vide...

D'avance je vous remecie pour l'aide que vous m'apporterez.

Sap
Je pose plein de questions idiotes... mais je les pose qu'une seule fois x-)
"The quieter you become, the more you are able to hear"

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 juil. 2009, 18:54

normal, tu ne testes pas la réussite de la requete ;)

Tiens, suis ce petit guide, pour debbuger toi même ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 14 Messages

31 juil. 2009, 11:12

normal, tu ne testes pas la réussite de la requete ;)

Tiens, suis ce petit guide, pour debbuger toi même ;)
Merci beaucoup pour cette précieuse aide. Alors en effet je souhaite entrer dans ma base de donnée dans le champ4, des adresses IP au format : xxx.xxx.xxx.xxx

Manifestement le probleme vient de là car j'ai configurer le type de ce champ en VARCHAR255

ce qui ne semble pas être bon. Quelle type dois-je choisir svp ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 254 Messages

31 juil. 2009, 11:21

Salut

Sans vouloir paraphraser Zeus, il serait utile que tu lise son lien jusqu'au bout, je te met l'essentiel :
Avec ces trois informations indispensables :
SGBD utilisé et en quelle version, code SQL exécuté et message d'erreur obtenu
- Montre nous la requête telle qu'elle est générée
- Active l'affichage d'erreur et montre le nous si besoin

Corriger une erreur sans indice c'est pas simple, aussi d'une manière générale, donner des indices permet d'avoir plus de réponses, d'où le lien que Zeus t'as donné qui décrit bien les étapes que tu peux effectuer toi même. Ensuite bien souvent cela permet a chacun de corriger l'erreur tout seul car ça devient évident, y a qu'a essayer. Et nous ça nous permet de mieux t'aider :)

ViPHP
AB
ViPHP | 5818 Messages

31 juil. 2009, 11:27

Normalement un type VARCHAR 255 c'est ok pour ce que tu veux faire. Le pb doit venir d'ailleurs.
Sinon (en plus des conseils déjà donnés) tu devrais utiliser mysql_real_escape_string() pour tes données dans tes requêtes.

Eléphanteau du PHP | 14 Messages

31 juil. 2009, 11:39

Cf post ci dessous
Modifié en dernier par Saper le 31 juil. 2009, 11:53, modifié 1 fois.

Eléphanteau du PHP | 14 Messages

31 juil. 2009, 11:41

MySQL :
Serveur: localhost via TCP/IP
Version du serveur: 5.1.30-community
Version du protocole: 10
Utilisateur: root@localhost
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)

Serveur web :
Apache/2.2.11 (Win32) PHP/5.2.8
Version du client MySQL: 5.0.51a
Extension PHP: mysqli

phpMyAdmin :
Version: 3.1.1

Code PHP :
<?php 
 
$link = mysql_connect("localhost", "root", "mysql")
    or die("Impossible de se connecter : " . mysql_error());
echo "Bonjour le monde"," <br /> ";
echo "Connexion réussie"," <br /> ";

mysql_select_db('dev001');

$ouvre=fopen("c:\\tableau.txt","r"); // ouverture du fichier en local

echo $ouvre," <br /> ";


while (!feof ($ouvre))

{$lecture = fgets($ouvre, 4096); // stockage dans $lecture
    list($champ1, $champ2, $champ3, $champ4, $champ5)= split (";", $lecture, 5);
    $requeteinsert="INSERT INTO computer (Nom,Serveur_de_réference,Serveur_authentification,IP,Lastlogon) VALUES ('".$champ1."','".$champ2."','".$champ3.",'".$champ4.",'".$champ5."')";
$executequery=mysql_query($requeteinsert, $link) or die (mysql_error()); 
 ;;}
echo 'traitement en cours... veuillez patienter !'," <br /> ";

echo $executequery," <br /> ";

fclose($ouvre);// fermeture
echo 'traitement terminé.';

mysql_close($link);
?>
Le fichier texte que je lis contient ceci :

nomduposte;nopduserveur;nomduserveurID;10.151.15.122;22/07/2008
nomduposte;nopduserveur;nomduserveurID;10.151.15.123;22/08/2007
nomduposte;nopduserveur;nomduserveurID;10.151.15.124;22/09/2009

Resultat des echo :

echo $ouvre," <br /> "; // Resource id #4

echo $executequery," <br /> "; // Erreur de syntaxe près de '10.151.15.122,'22/07/2008 ')' à la ligne 1

Merci encore pour votre aide.

ViPHP
AB
ViPHP | 5818 Messages

31 juil. 2009, 11:57

Ta requête est mal écrite. Ne vois tu pas de différence entre les champs 3, 4 et le champ 1 qui lui est bien écrit ?

Tu l'aurait certainement trouvé si tu avais fait affiché ta requête
(echo $requeteinsert) comme mentionné dans le lien de débugage que t'a donné Zeus

Et n'oublie pas d'utiliser la fonction mysql_real_escape_string() même si dans certains cas cela peut fonctionner sans.

Eléphanteau du PHP | 14 Messages

31 juil. 2009, 12:11

Merci,

Peut être que j'interprete mal, ce que j'ai compris en lisant Zeus m'a fait faire un :
echo $executequery," <br /> ";
En effet je pensais (à tort apparement) que je ne pouvais avoir un retour qu'en executant la requete et comme c'est $executequery qui s'en charge j'en ais fait un echo.

pour moi : $requeteinsert="INSERT INTO computer (Nom,Serveur_de_réference,Serveur_authentification,IP,Lastlogon) VALUES ('".$champ1."','".$champ2."','".$champ3.",'".$champ4.",'".$champ5."')";

est une déclaration de variable et non un execution de la requete. je ne voyais pas l'interet d'afficher le contenu de la variable en en faisant un echo.

Entre le champ 3 et 4 je vois qu'il manque les '

Ce serait un simple problème de syntaxe... pfff

En effet maintenant j'ai bien un autre soucis, s'etait donc bien çà.

"Incorrect date value: '22/07/2008 ' for column 'Lastlogon' at row 1"

Le type du champ Lastlogon est DATE dans mysql

et dans mon fichier texte j'utilise ce format. dd/mm/yyyy il doit y avoir une subtilité pour inserer cette valeur dans mysql a partir de mon fichier texte.

je file sur le forum et vais chercher ce que je trouve sur DATE merci encore ca m'a bien débloqué vos réponses. Forcement j'apprends vraiment de 0, donc je vous prie de m'excuser, si je ne comprends pas du premier coup.

Saper
Je pose plein de questions idiotes... mais je les pose qu'une seule fois x-)
"The quieter you become, the more you are able to hear"

ViPHP
ViPHP | 2144 Messages

31 juil. 2009, 14:46

Pour ton champ: tu es sur la bonne voie. Regarde le format attendu par la base de donnée.
Tu devras faire une petite conversion...

ViPHP
AB
ViPHP | 5818 Messages

02 août 2009, 06:03

pour moi : $requeteinsert="INSERT INTO computer (Nom,Serveur_de_réference,Serveur_authentification,IP,Lastlogon) VALUES ('".$champ1."','".$champ2."','".$champ3.",'".$champ4.",'".$champ5."')";

est une déclaration de variable et non un execution de la requete. je ne voyais pas l'interet d'afficher le contenu de la variable en en faisant un echo.
Oui mais le contenu de cette variable ($requeteinsertest) est une chaine de caractères concaténée à des variables.
En la faisant afficher tu peux voir si tout est ok et si les variables sont bien renseignées.
Cela est très rapide pour détecter des erreurs de syntaxe courantes et te permet ensuite de penser à d'autres problèmes si cette première étape est ok.
Pour ta première erreur de syntaxe où tu avais oublié un ', en faisant echo $requeteinsertest tu aurais très vite compris que la chaine était interrompue et qu'il y avait un pb au moins à ce niveau là :wink:

Eléphanteau du PHP | 14 Messages

03 août 2009, 16:19

Merci du conseil, je l'appliquerais désormais.

Saper
Je pose plein de questions idiotes... mais je les pose qu'une seule fois x-)
"The quieter you become, the more you are able to hear"