[RESOLU] Soucis bases de données

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 : [RESOLU] Soucis bases de données

Re: Soucis bases de données

par moogli » 16 oct. 2014, 13:36

tu as donc ton erreur : la colonne "referer" ne peux être nulle.

je marque le sujet résolus, tu pourras le faire toi même si tu t'inscris ;)


@+

Re: Soucis bases de données

par SuperGlueW » 11 oct. 2014, 13:02

salut,

tu as forcément une erreur.
le closeCursor ne sert à rien c'est pour une requête select ;)

utilise un try / catch pour voir s'il ya une exception. Ceci dit avec l'error_reporting à E_ALL tu aurais un message t'indiquant qu'il y a u une exception non attrapée.

il faut aussi tester le retour de la méthode execute si c'est false tu aura les raison avec la méthode errorInfo()

en clair
<?php
$chem = 'A - ';
$ip = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['REFERER_ADDR'];
$dath = date('d-m-Y/H:i');

try {
    $bdd = new PDO('mysql:host=************;dbname=**********', '******************', '*************');
    $req = $bdd->prepare('INSERT INTO nav(ip, referer, dath, chem) VALUES(:ip, :referer, :dath, :chem)');
    $req->bindParam(':ip', $ip);
    $req->bindParam(':referer', $referer);
    $req->bindParam(':dath', $dath);
    $req->bindParam(':chem', $chem);
    if (!$req->execute()) {
        $err = $req->errorInfo();
        var_dump($err);
    }
} catch (Exception $e) {
    echo 'Erreur SQL : ' . $e->getMessage();
}
j'en ai profiter pour corriger l'erreur sur le nom de l'exception que l'on attrape (il y a un c a exception :) )

@+
Merci, j'ai testé avec ton code et la page m'affiche :
"array(3) { [0]=> string(5) "23000" [1]=> int(1048) [2]=> string(31) "Column 'referer' cannot be null" }"

Re: Soucis bases de données

par moogli » 11 oct. 2014, 10:56

salut,

tu as forcément une erreur.
le closeCursor ne sert à rien c'est pour une requête select ;)

utilise un try / catch pour voir s'il ya une exception. Ceci dit avec l'error_reporting à E_ALL tu aurais un message t'indiquant qu'il y a u une exception non attrapée.

il faut aussi tester le retour de la méthode execute si c'est false tu aura les raison avec la méthode errorInfo()

en clair
<?php
$chem = 'A - ';
$ip = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['REFERER_ADDR'];
$dath = date('d-m-Y/H:i');

try {
    $bdd = new PDO('mysql:host=************;dbname=**********', '******************', '*************');
    $req = $bdd->prepare('INSERT INTO nav(ip, referer, dath, chem) VALUES(:ip, :referer, :dath, :chem)');
    $req->bindParam(':ip', $ip);
    $req->bindParam(':referer', $referer);
    $req->bindParam(':dath', $dath);
    $req->bindParam(':chem', $chem);
    if (!$req->execute()) {
        $err = $req->errorInfo();
        var_dump($err);
    }
} catch (Exception $e) {
    echo 'Erreur SQL : ' . $e->getMessage();
}
j'en ai profiter pour corriger l'erreur sur le nom de l'exception que l'on attrape (il y a un c a exception :) )

@+

Re: Soucis bases de données

par SuperGlueV » 10 oct. 2014, 12:49

Si cela n'enregistre pas c'est que la requête est incorrecte ou bien que tu as un souci de connexion.
Actives les erreurs PDO : http://fr2.php.net/manual/fr/pdo.error-handling.php
C'est bizarre, quand je remplace les variables, ca enregistre bien...
<?php
/*$chem = "A - ";
$ip = $_SERVER["REMOTE_ADDR"];
$referer = $_SERVER["REFERER_ADDR"];
$dath = date("d-m-Y/H:i");*/
$ip = test1;
$referer = test2;
$dath = test3;
$chem = test4;

try
{
	$bdd = new PDO('mysql:host=************;dbname=**********', '******************', '*************');
}

catch (Exeption $e)
{
die("Erreur " . $e->getMessage());
} 




$req = $bdd->prepare('INSERT INTO nav(ip, referer, dath, chem) VALUES(:ip, :referer, :dath, :chem)');
$req->bindParam(':ip', $ip);
$req->bindParam(':referer', $referer);
$req->bindParam(':dath', $dath);
$req->bindParam(':chem', $chem);
$req->execute();
$req->closeCursor();

Re: Soucis bases de données

par xTG » 09 oct. 2014, 19:45

Si cela n'enregistre pas c'est que la requête est incorrecte ou bien que tu as un souci de connexion.
Actives les erreurs PDO : http://fr2.php.net/manual/fr/pdo.error-handling.php

Re: Soucis bases de données

par SuperGlueU » 09 oct. 2014, 19:42

Ah désolé j'ai du mal a comprendre en ce moment #-o
Non, ca n'enregistre pas :/
Comme vous le voyez dans le code, les variables sont bien renseignées...

Re: Soucis bases de données

par sirakawa » 09 oct. 2014, 09:06

xtg demande :
est-ce que ta base de données contient un enregistrement de plus après cette requete ? voir avec phpmyadmin ou avec mysql en mod console
Les variables utilisées sont-elles renseignées?
mettre AVANT LA REQUETE:
var_dump($ip); die(); par exemple

Re: Soucis bases de données

par SuperGlueT » 08 oct. 2014, 21:11

Merci de ta réponse rapide :D
Que veux tu dire par "enregistrement" ?
$ip me renvoie l'ip du visiteur et $referer son referer...

Re: Soucis bases de données

par xTG » 08 oct. 2014, 18:30

Il n'y a pas l'air d'avoir d'erreur.
As-tu un enregistrement ? S'il est vide, que donnes un affichage de $_SERVER ?

Soucis bases de données

par SuperGlueS » 08 oct. 2014, 18:06

Bonjour à vous,

J'ai besoin d'enregistrer dans ma base de données, des infos sur mes visiteurs. Je suis débutant en ce qui concerne les BDD et j'ai un peu de mal...
J'ai ce code :
$chem = "A - ";
$ip = $_SERVER["REMOTE_ADDR"];
$referer = $_SERVER["REFERER_ADDR"];
$dath = date("d-m-Y/H:i");
try
{
	$bdd = new PDO('mysql:host=**********************;dbname=*******', '***********', '*************');
}

catch (Exeption $e)
{
die("Erreur " . $e->getMessage());
} 




$req = $bdd->prepare('INSERT INTO nav(ip, referer, dath, chem) VALUES(:ip, :referer, :dath, :chem)');
$req->bindParam(':ip', $ip);
$req->bindParam(':referer', $referer);
$req->bindParam(':dath', $dath);
$req->bindParam(':chem', $chem);
$req->execute();
$req->closeCursor();
Il fonctionne très bien lorsqu'il sagit d'enregistrer des variables "toutes prêtes" mais dès que je met l'ip et tout, ça ne fonctionne plus :(
Vous voyez où j'ai pu me tromper ?
Merci