Problème existence id

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 existence id

Re: Problème existence id

par Larker » 10 oct. 2015, 20:03

Du coup j'ai corrigé pour quelque chose qui fonctionne à part que ça m'insère 2 fois la news qui est consulté dans la table :
$id_news = $_GET['id'];
    $visitIpQuery = $bdd->prepare("SELECT ip FROM visite_news WHERE id_news = :id AND ip='".$_SERVER['REMOTE_ADDR']."'");
    $visitIpQuery->bindValue(':id',$_GET['id'],PDO::PARAM_INT);
    if (!$visitIpQuery->execute()) {
        echo 'ERREUR';
        exit; //pas obligatoire
    }
    $visiteur = $visitIpQuery->fetch();
	$visitIpQuery->closeCursor;
if($visitIpQuery->rowCount() == 0) {
$req = $bdd->prepare('INSERT INTO visite_news(id_news, ip, date) VALUES(:id_news, :ip, :date)');
$req->execute(array(
	'id_news' => $id_news,
	'ip' => $_SERVER['REMOTE_ADDR'],
	'date' => date('d\-n\-Y')
    ));
}

Re: Problème existence id

par Larker » 10 oct. 2015, 20:02

Du coup j'ai corrigé pour quelque chose qui fonctionne à part que ça m'insère 2 fois la news qui est consulté dans la table :
$id_news = $_GET['id'];
    $visitIpQuery = $bdd->prepare("SELECT ip FROM visite_news WHERE id_news = :id AND ip='".$_SERVER['REMOTE_ADDR']."'");
    $visitIpQuery->bindValue(':id',$_GET['id'],PDO::PARAM_INT);
    if (!$visitIpQuery->execute()) {
        echo 'ERREUR';
        exit; //pas obligatoire
    }
    $visiteur = $visitIpQuery->fetch();
	$visitIpQuery->closeCursor;
if($visitIpQuery->rowCount() == 0) {
$req = $bdd->prepare('INSERT INTO visite_news(id_news, ip, date) VALUES(:id_film, :ip, :date)');
$req->execute(array(
	'id_news' => $id_news,
	'ip' => $_SERVER['REMOTE_ADDR'],
	'date' => date('d\-n\-Y')
    ));
}

Re: Problème existence id

par Larker » 09 oct. 2015, 19:05

Au niveau du code ça te parait correct ?

Quand je le teste ça me retourne une erreur : Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'ip' cannot be null' in /public_html/accueil/modules/module-news.php:24 Stack trace: #0 /public_html/accueil/modules/module-news.php(24): PDOStatement->execute() #1 /public_html/accueil/html_base/page_html.php(338): require('/public_html/ac...') #2 /public_html/accueil/index.php(69): require('/public_html/ac...') #3 {main} thrown in /public_html/accueil/modules/module-news.php on line 24

Re: Problème existence id

par @rthur » 09 oct. 2015, 18:58

Bah teste le... et tu verras bien si ça marche.
Si ça ne marche pas, dis nous ce qui te parait bizarre.

Re: Problème existence id

par Larker » 09 oct. 2015, 17:07

Je voulais savoir si c'était correct car ça me parait un peu bizarre ?

Re: Problème existence id

par @rthur » 09 oct. 2015, 17:02

et ?

Re: Problème existence id

par Larker » 09 oct. 2015, 16:58

Oui ça fonctionne ! :)

Maintenant j'essaie pour l'envoie de formulaire mais je galère un peu je dois dire.

Voici ma requête actuelle :
$id_news = $_GET['id'];
$visitIpQuery = $bdd->query("SELECT ip FROM visite_news WHERE id_news=$id_news AND ip='".$_SERVER['REMOTE_ADDR']."'");
$visitIp = $visitIpQuery->fetch();
if($visitIpQuery->rowCount() == 0) {
	$bdd->query("INSERT INTO visite_news VALUE('', $id_news, '".$_SERVER['REMOTE_ADDR']."','".date('d\-n\-Y')."')");
	$newIpQuery = $bdd->query("SELECT * FROM visite_news WHERE ip='".$_SERVER['REMOTE_ADDR']."'");
}
?>
Et voici en requête préparée :
$id_news = $_GET['id'];
    $visitIpQuery = $bdd->prepare("SELECT ip FROM visite_news WHERE id_news = :id AND ip='".$_SERVER['REMOTE_ADDR']."'");
    $visitIpQuery->bindValue(':id',$_GET['id'],PDO::PARAM_INT);
    if (!$visitIpQuery->execute()) {
        echo 'ERREUR';
        exit; //pas obligatoire
    }
    $visiteur = $visitIpQuery->fetch();
    $visitIpQuery->closeCursor;
if($visitIpQuery->rowCount() == 0) {
    $stmt= $bdd->prepare("INSERT INTO visite_news (id_news, ip, date) VALUES (?, ?, ?)");
    $stmt->bindParam(1, $id_news);
    $stmt->bindParam(2, $ip);
    $stmt->bindParam(3, $date);
    // insertion d'une ligne
    $id_news = $_GET['id'];
    $value = 1;
    $stmt->execute();
    // insertion d'une autre ligne avec différentes valeurs
    $ip = $_SERVER['REMOTE_ADDR'];
    $value = 2;
    $stmt->execute();
    // insertion d'une autre ligne avec différentes valeurs
    $date = date('d\-n\-Y');
    $value = 3;
    $stmt->execute();
?>

Re: Problème existence id

par @rthur » 09 oct. 2015, 16:47

Teste là pour vérifier qu'elle fonctionne, mais c'est tout à fait ça.

Re: Problème existence id

par Larker » 09 oct. 2015, 15:15

Plutôt comme ça.
<?php
    $stmt = $bdd->prepare("SELECT id, titre, posteur, resume, img, contenu, DATE_FORMAT(date, '%d/%m/%Y') AS date, active FROM news WHERE active=1 AND id = :id");
    $stmt->bindValue(':id',$_GET['id'],PDO::PARAM_INT);
    if (!$stmt->execute()) {
        echo 'ERREUR';
        exit; //pas obligatoire
    }
?>
Est ce que ça vous parait correct ?

Re: Problème existence id

par Larker » 09 oct. 2015, 13:45

Ah oui donc si je comprends bien, ceci est une requête préparée ?
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>
Si je l'applique à la requête de ma news :
<?php
$getNewsQuery = $bdd->query("SELECT id, titre, posteur, resume, img, contenu, DATE_FORMAT(date, '%d/%m/%Y') AS date, active FROM `news` WHERE active=1 AND id=".$_GET['id']);
$getNews = $getNewsQuery->fetch();
?>
<?php
$stmt = $bdd->prepare(" id, titre, posteur, resume, img, contenu, DATE_FORMAT(date, '%d/%m/%Y') AS date, active FROM `news` WHERE active=1 AND id=".$_GET['id']);
if ($stmt->execute(array($_GET['id']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>
Concrètement, je ne vois pas quoi mettre dans l'array présent dans le execute ?

Re: Problème existence id

par @rthur » 09 oct. 2015, 00:19

Il y a pourtant un exemple dans la doc dont je t'ai donné le lien avec un SELECT ;-)

Re: Problème existence id

par Larker » 08 oct. 2015, 22:00

D'accord merci.
Par contre je croyais que les requêtes préparées étaient uniquement valable pour l'envoie de formulaire avec insertion dans la bdd. Je ne vois pas exactement comment faire pour sélectionner dans une table ?

Re: Problème existence id

par @rthur » 06 oct. 2015, 20:45

On me parle souvent de requête préparé, tu peux me donner un exemple stp car je ne vois pas trop ce que ça signifie.
Google est ton ami :-)
Ou la doc PHP sinon : http://php.net/manual/fr/pdo.prepared-statements.php

Re: Problème existence id

par Larker » 06 oct. 2015, 16:29

On me parle souvent de requête préparé, tu peux me donner un exemple stp car je ne vois pas trop ce que ça signifie.

Merci

Re: Problème existence id

par or 1 » 06 oct. 2015, 16:17

dans un tel cas, il vaux mieux utiliser les requetes préparées de pdo, ainsi plus besoin de vérifier que $id_news est bien un entier, car c'est sujet aux injections sql.