Souci récupération sondage

Carpediem
Invité n'ayant pas de compte PHPfrance

14 nov. 2013, 01:21

Bonjour,

Je suis embêté avec le traitement de mon sondage, cela me mets "no database selected" affiché normalement à l'écran et non pas sous forme d'erreur. Je travail en local sous wamp. Je vous joint la page de traitement du sondage. l'incrémentation du nombre de vote fonctionne a part (quand je test sur une autre page), le problème viendrait de la réception de l'ip client puis de la comparaison avec la bdd. Pour bien comprendre, je récupère l'adresse ip puis je la compare à la bdd. Si l'ip existe, l'adresse ip ne pourra plus voter. Merci de m'éclairer.
<?php

try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse=$_POST['sondage_semaine'];
$ip=get_ip();
$requete = mysql_query('SELECT * FROM ip_sondage WHERE ip = "'.$ip.'"') or die (mysql_error());
    $return = mysql_fetch_array($requete);
    
    function get_ip() {

	// IP si internet partagé
	if (isset($_SERVER['HTTP_CLIENT_IP'])) {
		return $_SERVER['HTTP_CLIENT_IP'];
	}
	// IP derrière un proxy
	elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		return $_SERVER['HTTP_X_FORWARDED_FOR'];
	}
	// Sinon : IP normale
	else {
		return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
	}
}
    if($return['id'] > 0)
    {
        //A VOTER
    }
    else
    {
        mysql_query('INSERT INTO ip_sondage VALUES ("ID", "'.$ip.'")') or die (mysql_error());
        //il vote et on l'enregistre
    }

if (isset($_POST['sondage_semaine']))
{
  if (is_string($_POST['sondage_semaine']))
	{
    if (!empty($_POST['sondage_semaine']))
	   {      
  	echo "<h4>Bonjour,<br/><br/>
              Votre vote a bien été envoyé.<br/><br/>
              Retour à la page <a href=\"index.php\">Accueil</a> ou <a href=\"sondage_resultats.php\">Voir les résultats</a></h4>";     
	   }
	else
	{
		header('Location: erreur_sondage.php');
	}}}
  
/* try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
} */

$req = $bdd->prepare('UPDATE sondage_semaine SET nbre_vote = nbre_vote+1 WHERE jour_semaine = :jour_semaine');
$req->execute(array(
    'jour_semaine' => $reponse));

?>
PS: Ne faites pas attention à la propreté du code, j'arrangerais ça à la fin quand j'aurais réussi à atteindre mon premier but =)

Cordialement

Morgane

Eléphanteau du PHP | 21 Messages

14 nov. 2013, 16:44

Salut,

tu utilise PDO pour te connecter, et mysql_query pour faire tes requêtes.
Le problème est que mysql_query utlise mysql_connect et non PDO.

Donc soit tu te connecte à ta base en faisant
mysql_connect("localhost", "root", "")
soit tu fais tes requêtes avec ta variable PDO $bdd:
$requete = $bdd->query('SELECT * FROM ip_sondage WHERE ip = "'.$ip.'"');
$requete = $res->fetch(PDO::FETCH_ASSOC);
$bdd->exec('INSERT INTO ip_sondage VALUES ("ID", "'.$ip.'")')
Blog d'aide pour développeur web: http://www.yetaland.com

Carpediem
Invité n'ayant pas de compte PHPfrance

14 nov. 2013, 19:24

Bonsoir,

Merci beaucoup pour votre réponse. Effectivement ça marche moins moins bien comme ça^^
Je suis un peu perdu entre PDO et php "normal". C'est une erreur grossière mais je n'avais pas trouver la réponse sur google.
Je fini ça et je post le code final si jamais ça pourrait dépanner d'autres gens.

Cordialement

Carpediem
Invité n'ayant pas de compte PHPfrance

14 nov. 2013, 21:59

Bonsoir,

Le code fonctionne bien, plus d'erreur sur la base de données, cependant lors d'un vote (en local sous wamp) cela ne me mets pas en erreur lorsque je vote plusieurs fois et pire les 2 messages de succés et d'échec s'affiche en meme temps. J'enregistre bien mon ip ainsi que mon vote par contre. Etant débutant, je suis perdu, je ne sais pas comment imbriquer mes différentes conditions pour que quand je vote mais que l'ip existe =>message d'erreur et lors d'un vote et que l'ip n'existe pas =>message de succés et intégration dans la bdd de l'adresse ip. Je vous rejoint le code.

Merci encore d'avance

Cordialement

Morgane
<?php

try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse=$_POST['sondage_semaine'];
$ip=get_ip();
$res = $bdd->query('SELECT * FROM ip_sondage WHERE ip = "'.$ip.'"');
$requete = $res->fetch(PDO::FETCH_ASSOC);
$return = $res->fetch();
    
    function get_ip() {

	// IP si internet partagé
	if (isset($_SERVER['HTTP_CLIENT_IP'])) {
		return $_SERVER['HTTP_CLIENT_IP'];
	}
	// IP derrière un proxy
	elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		return $_SERVER['HTTP_X_FORWARDED_FOR'];
	}
	// Sinon : IP normale
	else {
		return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
	}
}
    if($return['ip'] > 0)
    {
        echo "<h4>Bonjour,<br/><br/>
              Vous avez déjà voté.<br/><br/>
              Cordialement<br/><br/>
              Retour à la page <a href=\"index.php\">Accueil</a></h4>";
    }
    else
    {
        $bdd->exec('INSERT INTO ip_sondage VALUES ("ID", "'.$ip.'")');
        //il vote et on l'enregistre
    }        



$req = $bdd->prepare('UPDATE sondage_semaine SET nbre_vote = nbre_vote+1 WHERE jour_semaine = :jour_semaine');
$req->execute(array(
    'jour_semaine' => $reponse));

?>
PS: Cela fait 1h30 que je patoge, j'ai eu le droit a des unexpected { en erreur et d'autres dont je ne comprends pas le sens vis à vie de ce que je trouve sur le net.

Carpediem
Invité n'ayant pas de compte PHPfrance

18 nov. 2013, 19:47

Bonsoir,

J'ai enfin réglé le problème, je vous joint le code définitif qui n'est certe pas très beau mais a peu près fonctionnel
<?php

function get_ip() {

	// IP si internet partagé
	if (isset($_SERVER['HTTP_CLIENT_IP'])) {
		return $_SERVER['HTTP_CLIENT_IP'];
	}
	// IP derrière un proxy
	elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		return $_SERVER['HTTP_X_FORWARDED_FOR'];
	}
	// Sinon : IP normale
	else {
		return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
	}
}

$ip=get_ip();

try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

        $res = $bdd->query('SELECT * FROM ip_sondage WHERE ip = "'.$ip.'"');
        $requete = $res->fetch(PDO::FETCH_ASSOC);
        $return = $res->fetch();

if($return['ip'] > 0)
    {
        echo header('Location: erreur_sondage1.php');
    }
elseif($return['ip'] == 0)  
    {{
        try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}
$bdd->exec('INSERT INTO ip_sondage VALUES ("ID", "'.$ip.'")') or die (mysql_error());
     
    }

if (isset($_POST["envoyer"])){
	// On initialise notre etat à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon il reste à erreur
	$etat = "erreur"; 

	if (isset($_POST["sondage_semaine"])) $_POST["sondage_semaine"]=trim(htmlspecialchars($_POST["sondage_semaine"]));
  $reponse=trim(htmlspecialchars($_POST["sondage_semaine"]));
  

  if (empty($_POST["sondage_semaine"])) { 
		$erreur="Erreur dans la transmission du formulaire..."; 
	}
  elseif (is_numeric($_POST["sondage_semaine"])) { 
		$erreur="Erreur dans la transmission du formulaire..."; 
	}
	// Si tous les champs sont valides, on change l'état à ok
	else { 
		$etat="ok";
    }
}

if ($etat=="ok"){ 
	// Cas où le formulaire a été soumis mais il y a des erreurs

try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}             

$req = $bdd->prepare('UPDATE sondage_semaine SET nbre_vote = nbre_vote+1 WHERE jour_semaine = :jour_semaine');
$req->execute(array(
    'jour_semaine' => $reponse));
  
    
    echo header('Location: sondage_resultats.php');
              }
              
elseif ($etat=="erreur"){ 

		echo header('Location: erreur_sondage.php'); 
	}
  
else {
    echo "<h4>Erreur dans la transmission du vote.Retour à la page <a href=\"index.php\">Accueil</a></h4>";
}}

PDOStatement::closeCursor()

?>
Je dois mettre le site ce soir en ligne et je trouve pas le moyen d'afficher direct sous forme de tableau le sondage dans la page sondage_resultat.php en appelant mes résultats mysql.

Merci d'avance à ceux qui voudront bien me dépanner

Cordialement

Morgane

Carpediem
Invité n'ayant pas de compte PHPfrance

30 nov. 2013, 16:29

Bonjour à tous,

Le site est enfin en ligne après beaucoup de temps passé dessus. Il reste beaucoup de travail au niveau responsive web design et Référencement mais il est fonctionnel. Un petit souci sur le sondage mais rien de bien méchant. Vous pouvez le visiter à cette adresse : http://www.prestathair.fr/ .Merci à ceux qui m'ont aidé et j’espère avoir pu aider d'autres personnes par ce post.

Cordialement

Morgane