jackbocar

  • Site web
  • Nombre de sujets
    152
  • Nombre de messages
    456
  • Nombre de commentaires
    Aucun
  • Nombre de news
    Aucune
  • Niveau en PHP
    Débutant

Ses derniers messages sur les forums

jackbocar
le 11/08/2007 à 18:29
N'affiche que la première ligne de la TABLE
Bonjour,

Il y a deux façon de faire que je connaisse :

<?php
$query = "SELECT id, nom FROM moi ORDER by ID DESC";
if ($result = $mysqli->query($query)) {


while ($row = $result->fetch_assoc()) {
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}
$result->close();
}
$mysqli->close();
?>


Ou

<?php
$query = "SELECT id, nom FROM moi ORDER by ID DESC";
$result = $mysqli->query($query);

$row = $result->fetch_array(MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);

$result->close();
$mysqli->close();
?>
jackbocar
le 11/08/2007 à 18:07
N'affiche que la première ligne de la TABLE
Bonjour,

Mon problème, avec la méthode procédurale, sur cette page commanderies_A.php, s'affiche 70 informations: Ab à Az.

Avec la méthode objet, ne s'affiche que la première qui commence par Ab ?

Que puis-je faire pour que toutes les infos s'affichent ?

Merci de votre aide.

Jack Bocar


Mon code, ma requête pour afficher toutes les informations : les id, les noms, les départements, les textes commençant par la lettre A :

Exemple :

Abbeville (80)
Plusieurs de ces maisons formaient sous les Templiers une préceptorie ou petite commanderie que les Hospitaliers jugèrent à propos de supprimer, en les réunissant pour en faire des membres de la commanderie de Beauvoir...

<?php
$mysqli = new mysqli('localhost', 'jackbocar', 'XXXXXXXXXXX', 'MyBase');

if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}

$query = 'SELECT id, nom, dep, news FROM commanderies WHERE nom REGEXP "^A" ORDER BY nom ASC';
$result = $mysqli->query($query);

$row = $result->fetch_array(MYSQLI_ASSOC);

printf ('<a name="%s"></a><p class="p-com"><b class="style">%s &nbsp; (%s)</b><br /><br /><span class="com">%s</span><br />', $row["id"], MyStripSlashes($row["nom"]), $row["dep"], nl2br($row["news"]));
printf ('<br /><a href="#" class="Lnav">Top</a><br /><br />');
printf ('</p>');

$result->close();
$mysqli->close();
?>




Mon code, ma requête pour afficher mon menu et toutes les id, les noms, commençant par la lettre A :
Exemple : Abbeville

</div><div id="sidebar" class="column">
<div class="menuBarTop">Commanderies [A]</div>
<?php
$mysqli = new mysqli('localhost', 'jackbocar', 'XXXXXXXXXXX', 'MyBase');

if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}

$query = 'SELECT id, nom FROM commanderies WHERE nom REGEXP "^A" ORDER BY nom ASC';
$result = $mysqli->query($query);

$row = $result->fetch_array(MYSQLI_ASSOC);
printf ('<a href="'.$_SERVER['PHP_SELF'].'?page=commanderies_A#%s" class="menuNav">%s</a><br />', $row["id"], MyStripSlashes($row["nom"]));

$result->close();
$mysqli->close();
?>
<br /><br />
</div>
jackbocar
le 02/08/2007 à 12:39
Je ne comprends pas mon affichage
Bonjour,

Merci de ta réponse la globule,

dis-moi comment faire, je ne sais pas si ceci est la bonne solution, en faite, avec elle rien ne change :

<?php
function mot($chaine ) {
return (get_magic_quotes_gpc() == 1 ? $chaine : ini_set($chaine));
}
?>


Jack Bocar
jackbocar
le 02/08/2007 à 11:57
Je ne comprends pas mon affichage
Bonjour,

Merci de ta réponse.

J'ai trouvé une solution pour supprimer les "mm" qui se placent lors de l'affichage avant les <br /> et après ces même <br />. Dites-moi si cette solution est fiable en ligne ou s'il faut que je recherche une autre solution.

function mot($chaine){
$chaine = str_replace('\r\n','',$chaine);

return $chaine;
}



Je vous donne mon code d'affichage :

<?php
function mot($chaine){
$chaine = str_replace('\r\n','',$chaine);

return $chaine;
}

require_once './_require/connect_db.php';
require_once './_require/function-barre.php';

$query = 'SELECT count(*) FROM commanderies WHERE visible="1"';
if ($result = $mysqli->query($query)) {
$nb_total = $result->fetch_array(MYSQLI_NUM);
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune r&eacute;ponse trouv&eacute;e';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 5;
$query = 'SELECT lieu, dep, commanderie, precepteur FROM commanderies WHERE visible="1" ORDER by ID DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_row()) {

echo '<p class="cadre">';
printf(
'<b class="style">%s &nbsp; (%s)</b><br />%s<br /><br />Precpteur (s) : <span class="precepteur">%s</span><br />', stripslashes(stripslashes($row[0])), $row[1], nl2br(stripslashes(stripslashes(mot($row[2])))), stripslashes(stripslashes($row[3])));
echo '</p>';
}
}
$result->close();
}
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 5).'</span>';
}
$mysqli->close();
?>


Merci de votre aide

Jack Bocar
jackbocar
le 02/08/2007 à 09:38
Je ne comprends pas mon affichage
Bonjour,

Je ne comprends vraiment rien à ce système de protection "injections QSL".

Lorsque j'envoie des données dans la base avec cet argument :
$commanderie = mysqli_real_escape_string($link, $_POST['commanderie']);


L'affichage donne dans la table donne ceci : L'\\\année, l'\\\autre, l'\\\enfer…

Pour que ces mots échappés, se lisent correctement, je suis obligé de faire ceci :
stripslashes(stripslashes($row[2])),


Et pour les sauts de ligne : <br />. Je dois écrire mes nouvelles sur une seule ligne comme ceci : Bonjour<br />Le phpfacile est un des meilleurs sites sur ce langage de programmation<br />Jack Bocar.

Car, si j'écris comme ceci :
Bonjour
<br />
Le phpfacile est un des meilleurs sites sur ce langage de programmation
<br />
Jack Bocar.

A l'affichage, je vois des "mm" ?

Ou, si j'écris comme ceci :

Bonjour

Le phpfacile est un des meilleurs sites sur ce langage de programmation

Jack Bocar.



Cette fois-ci, je vois des : \n\n.

Puis, j'ai un autre problème, lorsque j'envoie une nouvelle, elle ne s'affiche que lorsque j'envoie la suivante, qui elle bien sûr, attend la suivante pour s'afficher.

<?php
if (isset($_POST['lieu']) && isset($_POST['dep']) && is_numeric($_POST['dep']) && isset($_POST['commanderie']) && isset($_POST['precepteur']) && isset($_POST['visible']) && is_numeric($_POST['visible']) ) {
if ($link = mysqli_connect('localhost', 'jackbocar', 'XXXXXX')) {
mysqli_select_db($link, 'possessions');
$stmt = mysqli_prepare($link, 'INSERT INTO commanderies (lieu, dep, commanderie, precepteur, visible) VALUES (?, ?, ?, ?, ?)');
$lieu = mysqli_real_escape_string($link, $_POST['lieu']);
$dep = intval($_POST['dep']);
$commanderie = nl2br(mysqli_real_escape_string($link, $_POST['commanderie']));
$precepteur = mysqli_real_escape_string($link, $_POST['precepteur']);
$visible = intval($_POST['visible']);
mysqli_stmt_bind_param($stmt, 'sissi', $lieu, $dep, $commanderie, $precepteur, $visible);
if (mysqli_stmt_execute($stmt)) {
echo 'Commanderies saved.';
} else {
echo 'Error d\'&eacute;criture dans la table.<br /><br />';
}
mysqli_close($link);
} else {
echo 'Connection failed.';
}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
Lieu : <input type="text" name="lieu" size="30" /><br />
Dep : <input type="text" name="dep" size="2" /><br />
Commanderie <textarea name="commanderie" cols="50" rows="10"></textarea><br />
Preceteur <input type="text" name="precepteur" size="30" /><br />
Visible : <input type="text" name="visible" size="1" value="0" /><br />
<input type="submit" value="Save" />
</form>
</body>
</html>



Merci de vos conseils

Jack Bocar
jackbocar
le 27/07/2007 à 17:15
Affichage données
Mon problème est l'affichage, voici le résultat sur un mot avec apostrophe : \"l\'Espitalet\"

Je ne comprends pas très bien les : mysqli_real_escape_string pour l'insertion et les : htmlspecialchars pour la lecture.


Insertion des données :

<?php
if (isset($_POST['lieu']) && isset($_POST['dep']) && isset($_POST['description']) && isset($_POST['precepteur'])) {
if ($db = @mysqli_connect('localhost', 'moi', 'password')) {
require_once 'stripFormSlashes.inc.php';
mysqli_select_db($db, 'possessions');
$stmt = mysqli_prepare($db, 'INSERT INTO commanderies (lieu, dep, description, precepteur) VALUES (?, ?, ?, ?)');

$lieu = mysqli_real_escape_string($db, $_POST['lieu']);
$dep = mysqli_real_escape_string($db, $_POST['dep']);
$description = nl2br(mysqli_real_escape_string($db, $_POST['description']));
$precepteur = mysqli_real_escape_string($db, $_POST['precepteur']);
mysqli_stmt_bind_param($stmt, 'ssss', $lieu, $dep, $description, $precepteur);
if (mysqli_stmt_execute($stmt)) {
echo 'Commanderie sauv&eacute;e.';
} else {
echo 'Erreur d\'écriture dans la table commanderies.<br />';
}
mysqli_close($db);
} else {
echo 'Erreur de la connection.';
}
}
?>



Lecture des données :


<?php
if ($db = mysqli_connect('localhost', 'moi', 'password')) {
mysqli_select_db($db, 'possessions');
$result = mysqli_query($db, 'SELECT lieu, dep, description, precepteur FROM commanderies');
while ($row = mysqli_fetch_object($result)) {

echo '<p class="cadre">';
printf(
'<b class="style">%s &nbsp; (%s)</b><br />%s<br /><br />Precpteur (s) : <span class="precepteur">%s</span><br />',
//$news = nl2br($news);
htmlspecialchars($row->lieu),
htmlspecialchars($row->dep),
nl2br(htmlspecialchars_decode($row->description)),
htmlspecialchars($row->precepteur)
);
echo '</p>';
}
mysqli_close($db);
} else {
echo '<tr><td colspan="4">Connection failed.</td></tr>';
}
?>


Merci de votre aide

Jack Bocar
jackbocar
le 16/07/2007 à 17:43
gestion des sessions
Bonjour,

Je suis en ce moment sur un gestionnaire personnalisé de sessions.

Mais, je cale sur la dernière fonction.

J'ai beau rechercher sur mon livre, je ne trouve pas ce qu'il faut écrire ?


<?php
session_set_save_handler ('init','ferme','lit','ecrit','efface','nettoie');
?>

<?php
function init ( $session_save_path, $session_name ) {
global $repertoire_stockage , $nom_de_session ;
$repertoire_stockage = $session_save_path ;
$nom_de_session = $session_name ;
return TRUE ;
}

function ferme() {
return TRUE ;

}


/*----------------------------------------------------------------------------*/


function lit( $identifiant ) {
global $repertoire_stockage , $nom_de_session ;
$fichier = $repertoire_stockage.'./tmp'.$nom_de_session.$identifiant;

if ($fp = @fopen($fichier, 'r') ) {
$donnees = fread($fp, filesize($fichier) ) ;
fclose($fp) ;
return $donnees ;
} else {
return '';
}
}


/*----------------------------------------------------------------------------*/

function ecrit($identifiant, $donnees ) {
global $repertoire_stockage , $nom_de_session ;
$fichier = $repertoire_stockage.'./tmp'.$nom_de_session.$identifiant;

$fp = fopen($fichier, 'w');
fwrite( $fp, $donnees, strlen($donnees) ) ;
fclose($fp);
return TRUE ;
}


/*----------------------------------------------------------------------------*/

function efface($identifiant) {
global $repertoire_stockage , $nom_de_session ;
$fichier = $repertoire_stockage.'./tmp'.$nom_de_session.$identifiant;
return @unlink($fichier) ;
}


/*----------------------------------------------------------------------------*/

function netoie($age) {

}
?>


Merci de votre aide

Jack Bocar
jackbocar
le 16/07/2007 à 17:38
Compte Invalide ?
Bonjour,

Après des heures passées sans résultats, j'ai abandonné ce script et je l'ai transformé pour PHP5 avec pour connexion MYSQLI.

Et cette fois-ci, ça fonctionne.


<?php
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

$link = mysqli_connect('localhost', 'jackbocar', 'XXXXXX', 'membres');

if (mysqli_connect_errno()) {
printf('Échec de la connexion : %s\n', mysqli_connect_error());
exit();
}

$query = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
$result = mysqli_query($link, $query);
$data = mysqli_fetch_array($result, MYSQLI_NUM);

if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: ./commanderies/');
exit();
}

elseif ($nb == 0) {
$erreur = 'Compte invalide.';
}

else {
$erreur = 'la base de donnees est down.';
}
}
else {
$erreur = 'Un des champs requis est vide.';
}
}
?>


Merci encore pour votre aide.

Jack Bocar
jackbocar
le 16/07/2007 à 09:51
Compte Invalide ?
Les pages du tuto :

Page 239

Les sessions
Chapitre 11
Pouvoir en restreindre l'accès aux utilisateurs identifiés et appartenant à une liste établie. Le site de votre client est hébergé chez un spécialiste sous la forme d'un hébergement mutualisé.
Pour créer un espace sécurisé, on fait généralement appel à une des deux méthodes suivantes :

• utilisation des contrôles d'accès intégrés au serveur web,

• utilisation d'une authentification gérée par l'application PHP via des sessions.

Dans notre cas, nous sommes dans le cadre d'un hébergement mutualisé et nous n'avons aucun moyen de modifier la configuration Apache, que ce soit de manière globale ou de manière locale (via des fichiers .htaccess).

La seule solution est donc l'utilisation des sessions PHP. Ces sessions vous permettent de garder trace de l'identification donnée par les gens et validée par vos soins. Nous allons donc créer un fichier permettant de s'identifier, un fichier permettant de valider les données soumises et un script de vérification de session. Ce dernier script sera inclus en haut de chaque page qui aura besoin d'être sécurisée.
Architecture du système.

Nous allons individualiser les trois scripts suivants et les utiliser comme le montre la figure 11-3 :

• auth.php: le formulaire pour s'identifier ;

• verif. php : le script vérifiant le couple pseudo/mot de passe et identifiant l'utilisateur ;

• secure. php : le script qui vérifie si l'utilisateur a accès à la ressource demandée.


Page 240

Le formulaire d'authentification : auth.php

Le formulaire d'authentification n'est a priori pas compliqué puisque, dans sa version la plus simple, deux champs suffisent : pseudo et mot de passe.

<html>
<head><title>Identification</title>
<head>
<body>
<form method="post" action="verif.php">
<P>
<label for="nom">Pseudo : </label>
<input type="text" name="pseudo">
</p>
<P>
<label for="motdepasse">Mot de passe : </label>
<input type="password" name="motdepasse">
</p>
<P>
<input type="submit" value="s'identifier">
</P>
</form>
</body>
</html>



Le formulaire de validation : verif.php

L'utilisateur qui cherche à s'identifier nous fournit via la page précédente (auth.php) un pseudo et un mot de passe. Ces informations sont envoyées via la méthode POST et sont donc accessibles dans la superglobale $_P0ST[].

Nous allons donc vérifier que le couple pseudo/mot de passe proposé correspond bien à un couple existant. Si c'est le cas, une variable de session contenant le pseudo de l'utilisateur lui sera assignée. Celle-ci permettra de l'identifier.

Dans l'exemple, la fonction verificationO est une fonction imaginaire qui renvoie TRUE quand le mot de passe est le bon et FALSE dans le cas contraire ; à vous de la définir selon vos besoins.

<?php
// initialisation de la session ;
session_start() ;
//si on a reçu les données d'un formulaire :
if ( isset( $_P0ST['pseudo'] ) && isset ( $_POST['motdepasse'] ) ) {
//on les récupère
$nom = $_P0ST['pseudo'] ; $motdepasse = $_POST['motdepasse'] ;
//on teste si le mot de passe est valide :
if ( verificationt $nom, $motdepasse ) ) {

//Page 241

//le mot de passe est valide, l'utilisateur est identifié
// on change d'identifiant de session

session_regenerate_id() ;

// on sauvegarde donc son nom dans la session
$_SESSI0N['nom'] = $nom ;
$message = 'vous êtes correctement identifié' ;
}else {
// sinon on avertit l'utilisateur : | Smessage = 'Mauvais mot de passe' ;
$message .='<a href="auth.php">retour</a>' ;
} else {
// un des champs n'est pas rempli
$message 'le login ou le mot de passe est vide' ;
$message .='<a href="auth.php">retour</a>' ;
}
?>




<html>
<head><title>Identification</title>
</head>
<body>
<p>
<?php echo $message ?>
</p>
</body>
</html>



La fonction verification()

Nous avons utilisé dans notre exemple précédent la fonction veri fi cati on () pour valider que le login est le mot de passe correspondent bien dans la base de données. Techniquement, c'est à vous d'implémenter cette fonction selon le schéma de base de données que vous utilisez, mais nous allons vous présenter ci-dessous un exemple minimal pour vous permettre une mise en place rapide.
La fonction veri fi cati on ( ) prend en argument un nom d'utilisateur et un mot de passe. La fonction renvoie TRUE si le nom d'utilisateur et son mot de passe correspondent à une entrée dans la base.
Nous allons considérer que nous avons une base de données nommée « application » et une table nommée « user » contenant les champs permettant l'authentification :
• identifiant : id_user
• nom d'utilisateur : login
• mot de passe non crypté (dans un cas réel utilisez toujours un mot de passe crypté, à l'aide de la fonction crypt() par exemple) : pass


<?php
function verification($nom,$pass){
//connexion SQL
$dbhote = 'localhost';
$dbuser = 'root';
$dbpass ='monpass' ;
$dbbase = 'application' ;

$dsn = "mysql:dbname=$dbbase;host=$dbhote" ;
$dbh = new PDO($dsn, $dbuser, $dbpass);

//création de la requête SQL
$nom_sql = $dbh->quote($nom) ;
$pass_sql = $dbh->quote($pass) ;

$sql ="SELECT count(*) as nbres FROM user "
. " WHERE login=$nom_sql AND pass=$pass_sql ";

//exécution de la requête SQL

$result = $dbh->query($sql);
$row = $result->fetch();

$result = null ;

if($row['nbres'] == 1){
return TRUE;
}else{
return FALSE;
?>


Vérifiez que vous avez bien créé une base de données avec une base « application », que vous avez bien une table « user » contenant trois champs, dedans et incluez ce bout de code dans votre fichier verif.php pour que votre application fonctionne.
La page sécurisée : secure.php
Pour vérifier si l'utilisateur est déjà authentifié, nous allons lire cette variable dans le tableau de session $_SESSI0N[]. Si l'utilisateur est authentifié, alors la variable $_SESSION['nom'] existe. Dans le cas contraire, c'est que jamais l'utilisateur n'a fourni de mot de passe valide.



<?php
session_start() ;
//on vérifie si l'utilisateur est identifié
if ( !isset( $_SESSION['nom'] )) {
//la variable de session n'existe pas,
//donc l'utilisateur n'est pas authentifié
//on redirige sur la page permettant de s'authentifier
header('Location: auth.php') ;
//on arrête l'exécution
exit() ;
?>




Il vous suffit maintenant d'ajouter includeCsecure.php') dans les scripts réservés pour que seules les personnes autorisées par la fonction verificationO puissent les utiliser. Les autres seront redirigées vers le formulaire d'identification.

Sécuriser encore plus votre application

Si vous souhaitez améliorer la sécurité de votre application, il convient d'utiliser des fonctions de chiffrement sur les mots de passe. Pour en savoir plus, consultez le chapitre 7, et notamment la partie concernant la fonction crypt().
jackbocar
le 16/07/2007 à 09:15
Compte Invalide ?
Voila, j'ai fait des tests, rien ne change, toujours cette erreur :

<?php
// connection et reqête

function verification($nom,$pass) {

define('USER', 'jackbocar');
define('PASS', 'u3ZWNszehUTKxH2J');

define('DSN', 'mysql:host=localhost;$dbname=publication');
try {
$dbh = new PDO(DSN, USER, PASS);
}catch (PDOException $e) {
print "Erreur ! : ". $e->getMessage(). "<br />";
die();
}

//création de la requête
$nom_sql = $dbh->quote($nom) ;
$pass_sql = $dbh->quote($pass) ;
$sql = "SELECT count(*) as nbres FROM user "
. " WHERE login='$nom_sql' AND pass='$pass_sql' ";

//$sql = 'SELECT count(*) as nbres FROM user WHERE login="'.mysql_escape_string($nom_sql).'" AND pass="'.mysql_escape_string($pass_sql).'" ';

//$sql = 'SELECT count(*) as nbres FROM user WHERE pseudo="'.mysql_escape_string($pseudo).'" AND motdepasse="'.mysql_escape_string($motdepasse).'" ';

//$sql = 'SELECT count(*) as nbres FROM user WHERE nom_sql="'.mysql_escape_string($pseudo).'" AND pass_sql="'.mysql_escape_string($motdepasse).'" ';

//$sql = 'SELECT count(*) as nbres FROM user WHERE nom="'.mysql_escape_string($nom_sql).'" AND pass="'.mysql_escape_string($pass_sql).'" ';

//$sql = 'SELECT count(*) as nbres FROM user WHERE login="'.mysql_escape_string($_POST['nom_sql']).'" AND pass="'.mysql_escape_string($_POST['pass_sql']).'"';

//$sql = 'SELECT count(*) as nbres FROM user WHERE nom_sql="'.mysql_escape_string($_POST['nom']).'" AND pass_sql="'.mysql_escape_string($_POST['motdepasse']).'"';

//$sql = 'SELECT count(*) as nbres FROM user WHERE nom_sql="'.mysql_escape_string($_POST['login']).'" AND pass_sql="'.mysql_escape_string($_POST['motdepasse']).'"';

//$sql = 'SELECT count(*) as nbres FROM user WHERE nom="'.mysql_escape_string($_POST['pseudo']).'" AND pass="'.mysql_escape_string($_POST['motdepasse']).'"';

//$sql = 'SELECT count(*) as nbres FROM user WHERE pseudo="'.mysql_escape_string($_POST['pseudo']).'" AND motdepasse="'.mysql_escape_string($_POST['motdepasse']).'"';

//execution de la reqête
$result = $dbh->query($sql);
$row = $result->fetch();
$result = null ;
if($row['nbres'] == 1) {
return TRUE;
}else{
return FALSE;
}
}
?>



Fatal error: Call to a member function fetch() on a non-object in function_verification.php on line 43
LoadingChargement en cours