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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème d'insert sql et pourtant aucune erreur ne s'affiche

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

par Saper » 03 août 2009, 16:19

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

Saper

Re:

par AB » 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:

par iclo » 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...

par Saper » 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

par AB » 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.

par Saper » 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.

par Saper » 31 juil. 2009, 11:39

Cf post ci dessous

par AB » 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.

par furiouslol » 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 :)

par Saper » 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]

par zeus » 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 ;)

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

par Saper » 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