[RESOLU] soucis connexion sur une page PDO

Eléphant du PHP | 257 Messages

16 mars 2014, 17:00

Bonjour j'ai un petit soucis en connexion sur une page en PDO sur une messagerie interne ?

le script de connexion aux bases de données.
<?php
// Connection au serveur
try {
  $dns = 'mysql:host=localhost;dbname=rec';
  $utilisateur = 'root';
  $motDePasse = '';
  // Options de connection
  $options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
  );
  $connection = new PDO( $dns, $utilisateur, $motDePasse, $options );
} catch ( Exception $e ) {
  echo "Connection à MySQL impossible : ", $e->getMessage();
  die();
}
?>
la page ou j'ai le soucis
require_once'sources/config1.php';
require_once'sources/secuk.php';


$messagesParPage=10;//Nous allons afficher 10 messages par page. 
//Une connexion SQL doit être ouverte avant cette ligne...
$reponse = $connection->prepare('SELECT COUNT(*) AS total FROM messages');/*ici le soucis*/
$total_messages = $reponse->fetch(PDO::FETCH_OBJ);
$total=$total_messages['total'];
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);     
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
     $pageActuelle=$nombreDePages;
     }
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1    
} 
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

ViPHP
xTG
ViPHP | 7331 Messages

16 mars 2014, 19:55

Es-tu au courant qu'un mot peut être décliner de mille façons dans la langue française ?
Le mot "souci" est bien vague...
Tu as activé les erreurs de PDO tu dois bien en avoir une qui remonte...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 mars 2014, 11:57

salut,

regarde comment gérer les erreurs avec PDO

(sans message d'erreur on ne peux pas t'aider)

pour info, c'est deux sont incompatible
$total_messages = $reponse->fetch(PDO::FETCH_OBJ); // résultat sous forme d'objet
$total=$total_messages['total']; // tu utilise un tableau

l'utilisation d'un objet sous forme de tableau c'est possible mais pas une bonne idée. Utilise la notation tableau afin qu'il n'y ai pas de confusion (ou un fetch_assoc).

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 257 Messages

23 mars 2014, 11:55

bonjour , sorry j'étais absent voici l'erreur.
Fatal error: Call to a member function prepare() on a non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 13

ViPHP
xTG
ViPHP | 7331 Messages

23 mars 2014, 17:54

$connection n'est donc pas un objet.
Donc tu n'as pas inclus le script de connexion ou bien ce dernier a échoué et tu as une autre erreur affichée (ou cachée dans le code HTML généré).

Eléphant du PHP | 257 Messages

02 avr. 2014, 10:47

Bonjour j'ai résolut une partie de ma connexion j'ai encore quelque petit soucis seriez vous m'aidez svp?
Notice: Undefined variable: bg in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 101

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 103

Notice: Undefined variable: message_a_liret in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 105

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 105

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 106

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 107

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 107

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 110
<?php
if(!isset($_SESSION)){
session_start();
} 
include'sources/secuk.php';

  $user = 'root';
  $pass = '';
try {
    $connection = new PDO('mysql:host=localhost;dbname=rec', $user, $pass);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	
$messagesParPage=10;//Nous allons afficher 10 messages par page.

//Une connexion SQL doit être ouverte avant cette ligne...
$reponse = $connection->prepare('SELECT COUNT(*) AS total FROM messages ');
$reponse->execute();
$total_messages = $reponse->fetch(PDO::FETCH_OBJ);
$total = $total_messages->total;
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])){ // Si la variable $_GET['page'] existe...
     $pageActuelle=intval($_GET['page']);     
     if($pageActuelle>$nombreDePages){ // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     $pageActuelle=$nombreDePages;
     }
}else{ // Sinon
$pageActuelle=1; // La page actuelle est la n°1    
} 
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
?>

<uls>
<lis><a href="envoyermess1.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="NOUVEAU MESSAGE">
<img src="cssstyle/imdesign/message-edit.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Nouveau</B></a></lis>
<lis><a href="messagerie.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MESSAGE RE&Ccedil;U">
<img src="cssstyle/imdesign/message-accept.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Re&ccedil;u(s)</B></a></lis>
<lis><a href="envmessagerie.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MESSAGE ENVOY&Eacute;S">
<img src="cssstyle/imdesign/message-go.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Envoy&eacute;(s)</B></a></lis>
<lis><a href="contact.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MES CONTACTS">
<img src="cssstyle/imdesign/user-male-information.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Contacts</B></a></lis>
<lis><a href="broullion.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MES BROULLIONS">
<img src="cssstyle/imdesign/message-error.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Broullions</B></a></lis>
</uls>
<br />
<br />
<table width="680" border="0" >
  <tr>
    <td>
      <table width="100%" border="0">
        <tr>
          <td  bgcolor="#000000">
            <div align="center" class="messagerie"><b>Messagerie
               - Messages re&ccedil;us</b></div>
          </td>
        </tr>
      </table>   
<?PHP
/*if(isset($_POST['suppr'],$_POST['del'],$_POST['idmess'])){
$suppr = $_POST['suppr'];
$del = $_POST['del'];
$idmess = $_POST['idmess'];

if($suppr=="ok") {			
			$nb=count($del);
			for($i = 0; $i < $nb; $i++){				
			$del_message  = $connection->prepare('DELETE FROM messages WHERE id=:id AND dest=:dest');
            $del_message->execute(array(':id'=> $del[$i],':dest'=> $_SESSION['xxxx']));
			}
		    }
            }*/
//Recupere le nombre de messages au total


$requete_nombre_message = $connection->prepare('SELECT COUNT(*) idg FROM messages WHERE dest=:dest');
if($requete_nombre_message->execute(array(':dest'=> $_SESSION['xxxx']))){
	$nbmessrec = $requete_nombre_message->fetchColumn();

echo '<form method="post"  action="messagerie.php?suppr=ok" onSubmit="post.disabled=true;" name="del" id="myForm">
      <table width="100%" border="0"><tr><td>
      <div align=left\"><b>Messages re&ccedil;us :<font color=#FF0000>'.$nbmessrec.'</font></b><br />
      <a href="#" onclick="javascript:document.del.submit();">
	  <img src="cssstyle/imdesign/poubelle.gif" width="25" height="25" title="SUPPRIMER" border="0"/></a></div>
      </td></tr></table><hr></hr>
	  <p>
      <table width="100%" class="messagerie" bgcolor="#000000" border="0\"><tr>
      <td width="20%" align="left">
      <input type="checkbox" id="checkUncheck" ><b>supprimer</b></td>
      <td width="15%"><center><b>Date</b></center></td>
      <td width="15%"><center><b>Expediteur</b></center></td>
      <td width="40%"><center><b>Sujet</b></center></td>
      <td width="10%" align="right"><img src="cssstyle/imdesign/messa.png" width="25" height="25" title="MESSAGE LU OU NON LU"/></td>
      </tr></table></p>';
}	
$message_lu  = $connection->prepare('SELECT * FROM messages WHERE dest=:dest ORDER by date,heure DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'');
$message_lu->execute(array(':dest'=> $_SESSION['xxxx'])); 
//Affichage des messages trier par l'affichage par page
while($message_a_lire = $message_lu->fetch(PDO::FETCH_OBJ))
$bg = ($bg =='' ? '#D4D4D4' : '');

echo '<table width="100%" border="0" bgcolor="'.$bg.'"><tr>
      <td width="20%" align="left">
      <input type="checkbox" class="box" name="del[]" value="'.$message_a_lire->id.'">
      </td>
      <td width="15%"><center><font color="#FF0000">'.$message_a_liret->date.'</font></center></td>
      <td width="15%"><center>'.$message_a_lire->env.'</center></td>
      <td width="40%"><a href="message.php?aff='.$message_a_lire->id.'"><center>'.$message_a_lire->titre.'</center></a></td>
      <td width="10%" align="right">';
//message lu ou non lu
if($message_a_lire->open == "0"){
		echo '<img src="cssstyle/imdesign/recu.png" width="25" height="25" title="NOUVEAU MESSAGE"/>';
		}else{
		echo '<img src="cssstyle/imdesign/open.png" width="25" height="25" title="MESSAGE LU"/>';
		}
echo '</td>
      </tr>
      </table>';	

//Si il n'y a pas encore de message  recu
if ($nbmessrec==""){
echo '<table width="100%" border="0"><tr>
      <td align="center"><br /><i><b>Aucun message pour le moment</b></i><br />
      </td></tr>
      </table>';
	  }
/////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////
echo '</td></tr>
      <tr>
      <td>';

echo '<table width="100%" border="0" align="center"><tr><td width="30%" ';
echo '<p align="center" class="pagination"><b>Page </b>: '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++){ //On fait notre boucle

     //On va faire notre condition
     if($i==$pageActuelle){ //Si il s'agit de la page actuelle...
        echo '<b>  '.$i.'  </b>'; 
     }else{ //Sinon...
        echo '<b><a href="messagerie.php?page='.$i.'">'.$i.'</a></b>';
     }
}
echo '</p>';	
echo '</td></tr></table>';
     $connection = null;
   } catch (PDOException $e) {

    print "Error!: " . $e->getMessage() . "<br/>";
    die();

   }
?>
</td>
    <tr>
    <td><hr></hr>
  </tr>
</table>

<p></p>
	<script>
		document.addEventListener("DOMContentLoaded", init, false)
		function init() {
			var checkUncheck = document.getElementById("checkUncheck");
			checkUncheck.addEventListener("click", function() {
				var inputs = document.getElementsByTagName("input");
				for (var i = 0; i < inputs.length ; i++) {
						if (inputs[i].type == "checkbox") {
						inputs[i].checked = checkUncheck.checked;
					}
				}
			}, false);			
document.getElementById("checkAllButton").addEventListener("click", function() {
				var inputs = document.getElementsByTagName("input");
				for (var i = 0; i < inputs.length ; i++) {
					if (inputs[i].type == "checkbox") {
						inputs[i].checked = true;
					}
				}
			}, false);
document.getElementById("uncheckAllButton").addEventListener("click", function() {
				var inputs = document.getElementsByTagName("input");
				for (var i = 0; i < inputs.length ; i++) {
					if (inputs[i].type == "checkbox") {
						inputs[i].checked = false;
					}
				}
			}, false);
			var boxs = document.getElementsByClassName("box");
			for (var i = 0; i < boxs.length; i++) {
				boxs[i].addEventListener("click", function() {
					var checked = document.querySelectorAll(".box:checked");
					document.getElementById("checkUncheck").checked = (boxs.length == checked.length)
				}, false);
			}			document.getElementById('myForm').addEventListener("submit", function(event) {
				event.preventDefault();
				var boxsChecked = document.querySelectorAll(".box:checked");
				var names = "";
				for(var i = 0; i < boxsChecked.length; i++) {
					names += boxsChecked[i].parentNode.nextElementSibling.innerHTML + "\n";
				} 
				if (names.length > 0) alert(names);
			}, false);
		}
	</script></p>
<br />

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 avr. 2014, 17:35

Notice: Undefined variable: bg in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 101 => ligne 101 tu utilise une variable qui n'existe pas

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 103 => tu tente d'utiliser une propriété sur quelque chose qui n'est pas un objet (en clair $toto->getTata() mais $toto n'est pas un objet)

Notice: Undefined variable: message_a_liret in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 105 cf ligne 101

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 105 voir ligne 103

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 106 voir ligne 103

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 107 voir ligne 103

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 107 voir ligne 103

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP-5.3.8.1\bel1\messagerie.php on line 110 voir ligne 103


si tu veux plus d'info cible le code, mais globalement résoudre les problèmes des lignes 101 et 105 devrait résoudre mes autre.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 257 Messages

03 avr. 2014, 10:15

la solution
<?PHP
session_start();
// On se connecte à MySQL
  $user = 'root';
  $pass = '';
try {
    $connection = new PDO('mysql:host=localhost;dbname=rec', $user, $pass);
	$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
}
catch(Exception $e){
    // En cas d'erreur, on affiche un message et on arrête tout
    die('Erreur : '.$e->getMessage());
} 
// Si tout va bien, on peut continuer 
$nombre_de_msg_par_page=10; // On met dans une variable le nombre de messages qu'on veut par page 
// On récupère le nombre total de messages
$reponse=$connection->query('SELECT COUNT(*) AS nb_messages FROM messages');
$total_messages = $reponse->fetch(PDO::FETCH_OBJ);
$nombre_messages=$total_messages->nb_messages;
// on détermine le nombre de pages
$nb_pages = ceil($nombre_messages / $nombre_de_msg_par_page);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
for ($i = 1 ; $i <= $nb_pages ; $i++)
{
    $page = '<a href="messagerie.php.php?page=' . $i . '">' . $i . '</a> ';
} 
if (isset($_GET['page'])){
    $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livredor.php?page=4)
}else{ // La variable n'existe pas, c'est la première fois qu'on charge la page
$page = 1; // On se met sur la page 1 (par défaut)
}
?>
<uls>
<lis><a href="envoyermess1.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="NOUVEAU MESSAGE">
<img src="cssstyle/imdesign/message-edit.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Nouveau</B></a></lis>
<lis><a href="messagerie.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MESSAGE RE&Ccedil;U">
<img src="cssstyle/imdesign/message-accept.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Re&ccedil;u(s)</B></a></lis>
<lis><a href="envmessagerie.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MESSAGE ENVOY&Eacute;S">
<img src="cssstyle/imdesign/message-go.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Envoy&eacute;(s)</B></a></lis>
<lis><a href="contact.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MES CONTACTS">
<img src="cssstyle/imdesign/user-male-information.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Contacts</B></a></lis>
<lis><a href="broullion.php?idm=<?php echo''.$_SESSION['idm'].''; ?>" title="MES BROULLIONS">
<img src="cssstyle/imdesign/message-error.png" width="20" height="20" border="0" /><B>&nbsp;&nbsp;Broullions</B></a></lis>
</uls>
<br />
<br />
<table width="680" border="0" >
  <tr>
    <td>
      <table width="100%" border="0">
        <tr>
          <td  bgcolor="#000000">
            <div class="messa"><b>Messagerie
               - Messages re&ccedil;us</b></div>
          </td>
        </tr>
      </table>
<?PHP   
$requete_nombre_message = $connection->prepare('SELECT COUNT(*) idg FROM messages WHERE dest=:dest');
if($requete_nombre_message->execute(array(':dest'=> $_SESSION['xxxx']))){
	$nbmessrec = $requete_nombre_message->fetchColumn();

echo '<form method="post"  action="messagerie.php?suppr=ok" onSubmit="post.disabled=true;" name="del" id="myForm">
      <table width="100%" border="0"><tr><td>
      <div align="left"><b>Messages re&ccedil;us :<font color=#FF0000>'.$nbmessrec.'</font></b><br />
      <a href="#" onclick="javascript:document.del.submit();">
	  <img src="cssstyle/imdesign/poubelle.gif" width="25" height="25" title="SUPPRIMER" border="0"/></a></div>
      </td></tr></table>
	  <p>
      <table width="100%" class="messa" bgcolor="#000000" border="0"><tr>
      <td width="20%" align="left">
      <input type="checkbox" id="checkUncheck" ><b>supprimer</b></td>
      <td width="15%"><center><b>Date</b></center></td>
      <td width="15%"><center><b>Expediteur</b></center></td>
      <td width="40%"><center><b>Sujet</b></center></td>
      <td width="10%" align="right"><img src="cssstyle/imdesign/message.png" width="25" height="25" title="MESSAGE LU OU NON LU"/></td>
      </tr></table></p>';
}
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombre_de_msg_par_page;
$reponse = $connection->prepare('SELECT * FROM messages WHERE dest=:dest ORDER BY date DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombre_de_msg_par_page);
$reponse->execute(array(':dest'=> $_SESSION['xxxx']));
while ($donnees = $reponse->fetch()){
$bg = ($bg =='' ? '#D4D4D4' : '');		
echo '<table width="100%" border="0" bgcolor="'.$bg.'"><tr>
      <td width="20%" align="left">
      <input type="checkbox" class="box" name="del[]" value="'.$donnees['id'].'">
      </td>
      <td width="15%"><center><font color="#FF0000">'.$donnees['date'].'</font></center></td>
      <td width="15%"><center>'.$donnees['env'].'</center></td>
      <td width="40%"><a href="message.php?aff='.$donnees['id'].'"><center>'.$donnees['titre'].'</center></a></td>
      <td width="10%" align="right">';
//message lu ou non lu
if($donnees['open'] == "0"){
		echo '<img src="cssstyle/imdesign/recu.png" width="25" height="25" title="NOUVEAU MESSAGE"/>';
		}else{
		echo '<img src="cssstyle/imdesign/open.png" width="25" height="25" title="MESSAGE LU"/>';
		}
echo '</td>
      </tr>
      </table>';	
}
//Si il n'y a pas encore de message  recu
if ($nbmessrec == FALSE) {
echo '<table width="100%" border="0"><tr>
      <td align="center"><br /><i><b>Aucun message pour le moment</b></i><br />
      </td></tr>
      </table><hr></hr>';
	  }

echo '</td></tr>
      <tr>
      <td>
	  <table width="100%" border="0" align="center"><tr><td width="30%" ';
echo '<p align="left" class="pagination"><b>Page </b>:'.$page.''; //Pour l'affichage, on centre la liste des pages
echo '</p>';	
echo '</td></tr></table>';

$reponse->closecursor(); // On n'oublie pas de fermer la connexion à MySQL ;o)
?>