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 05/10/2007 à 17:13
Sécurité de base pour un site
Bonjour,

Merci de ta réponse LupusMic.

J'avais mis des protections dans mes scripts de mises à jours, mais mon problème était qu'ils me faisaient \\ voir \\\ pour les L\\\' ou autre avec apostrophe.
Tous mes scripts étaient protégés pour l'insertion dans la table avec : mysqli_real_escape_string.

Voir mon message : http://www.lephpfacile.com/forum/1-php-mysql/5489-affichage-donnees

Alors pour afficher mes pages, le problème était de la faire disparaître ces \\\.
Et, là, j'ai pas trouvé de bonne solution pour lire sans ces \\\.
Car même avec : htmlspecialchars, j'avais toujours des \ qui restaient voir quelquefois \\ de suite sur une L\\' ou autres avec apostrophe.

J'ai bien bidouillé mes scripts d'affichages avec plusieurs fois htmlspecialchars, mais ceci ne m'a pas paru être très catholique...

Je suis obligé d'avoir des scripts de mises à jour, car lorsque je mets à jour mes listes de commanderies, je ne peux pas chercher dans PhpMyAdmin la bonne ID sur mes 2000. Lorsque je mets à jour, c'est souvent 20 ou 30 commanderies de l'ID 1 à l'ID 2000.

J'ai donc un script pour lire mes commanderies :
Un script qui affiche uniquement les noms les départements et les ID par ordre alphabétique avec un affichage de 100 ID par page et bien sur, avec une pagination. (Merci aux comment faire du site)

Sur cette page sous chaque nom, j'ai un lien pour ouvrir le texte dans un script avec des <input> pour y faire une modification et l'enregistrer.

Si tu as une solution plus simple avec PHPMYADMIN, explique-moi, je veux bien tester et peut-être l'adopter.

Il est bien entendu que cet espace d'administration est protégé par un htaccess et les pages par une session contrôlée via la base de données par un login et un mot de passe jumelé et codé en SH1.

Je crois qu'avec ces protections, je suis relativement tranquille, je sais bien que la protection à 100% n'existe pas, mais pour les petits bidouilleurs qui essais d'entrer, ils n'ont pas gagnés d'avance.

J'espère avoir été clair dans mes explications.

Jack Bocar
jackbocar
le 04/10/2007 à 14:11
Script compteur de pages
Voila, ça fonctionne, si ça intéresse quelqu'un, le code complet :


<?php
function db_connect()
{
$result = new mysqli("localhost", "my_user", "my_password", "world");
if (!$result)
throw new Exception('Could not connect to database server');
else
return $result;
}


function updateCompteurs($cle) {
$conn = db_connect();
$result = mysqli_query($conn, "select * from compteurs where cle='$cle'");
$row = mysqli_fetch_object($result);
if ($row) {
$cpt = $row->nbHit + 1;
mysqli_query($conn, "update compteurs set nbHit = $cpt where cle = '$cle'");
}
mysqli_free_result($result);
}

// --------------------------------

function getCompteurs($cle) {
$conn = db_connect();
$result = mysqli_query($conn, "select * from compteurs where cle='$cle'");
$row = mysqli_fetch_object($result);
if ($row)
$cpt = $row->nbHit;
else
$cpt = 0;
mysqli_free_result($result);
return $cpt;
}

// --------------------------------

function getNom($cle) {
$conn = db_connect();
$result = mysqli_query($conn, "select * from compteurs where cle='$cle'");
$row = mysqli_fetch_object($result);
if ($row)
$res = $row->nomComplet;
else
$res = "";
mysqli_free_result($result);
return $res;
}

// --------------------------------

function getTotalHitsCompteurs() {
$conn = db_connect();
$result = mysqli_query($conn, "select sum(nbHit) as total from compteurs");
$row = mysqli_fetch_object($result);
if ($row)
$total = $row->total;
else
$total = 0;
mysqli_free_result($result);
return $total;
}
?>


La page ou doit s'afficher le compteur :


<html>
<head>
</head>
<body>
<center>
<?php
include "function_compteur_pages.php";
updateCompteurs("page01");
echo "<br /><br />La home page &agrave; &eacute;t&eacute; visit&eacute;e <strong> ".getNom("page01")." </strong> ".getCompteurs("page01")." fois";
?>
</center>
</body>
</html>





la table :


#
# Structure de la table 'compteurs'
#

CREATE TABLE compteurs (
cle varchar(255) NOT NULL,
nbHit int(11) DEFAULT '0' NOT NULL,
nomComplet varchar(255) NOT NULL,
url varchar(255) NOT NULL,
PRIMARY KEY (cle)
);
#
# Contenu de la table 'compteurs'
#

INSERT INTO compteurs VALUES ( 'page01', '0', 'Premi&egrave;re page', 'page01.php');
INSERT INTO compteurs VALUES ( 'page02', '0', 'Deuxi&egrave;me page', 'page02.php');
INSERT INTO compteurs VALUES ( 'page03', '0', 'Troisi&egrave;me page', 'page03.php');
INSERT INTO compteurs VALUES ( 'page04', '0', 'Quatri&egrave;me page', 'page04.php');
INSERT INTO compteurs VALUES ( 'page05', '0', 'Cinqui&egrave;me page', 'page05.php');
jackbocar
le 04/10/2007 à 09:54
Script compteur de pages
Bonjour,

Quelque soit les modifications de scripts apportés avec les instructions OBJ ou PROCEDURAL avec connexion à la base :

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$link = mysqli_connect("localhost", "my_user", "my_password", "world");



J'ai systématiquement ces erreurs :

<?php
function updateCompteurs($cle) {
$query = ("select * from compteurs where cle='$cle'");
if ($result = mysqli_query($link, $query)) { //ligne 13
$obj = mysqli_fetch_object($result);
if ($row) {
$cpt = $row->nbHit + 1;
mysqli_query($link, "update compteurs set nbHit = $cpt where cle = '$cle'");
}
}
mysqli_free_result($result);
}
?>


Warning: mysqli_query() expects parameter 1 to be mysqli, null given in F:\www\www.test-net\function_compteur_pages.php on line 13


Idem pour les autres lignes

Si tu veux tester, voici la table :


#
# Structure de la table 'compteurs'
#

CREATE TABLE compteurs (
cle varchar(255) NOT NULL,
nbHit int(11) DEFAULT '0' NOT NULL,
nomComplet varchar(255) NOT NULL,
url varchar(255) NOT NULL,
PRIMARY KEY (cle)
);
#
# Contenu de la table 'compteurs'
#

INSERT INTO compteurs VALUES ( 'page01', '0', 'Première page', 'page01.php');
INSERT INTO compteurs VALUES ( 'page02', '0', 'Deuxième page', 'page02.php');
INSERT INTO compteurs VALUES ( 'page03', '0', 'Troisième page', 'page03.php');
INSERT INTO compteurs VALUES ( 'page04', '0', 'Quatrième page', 'page04.php');
INSERT INTO compteurs VALUES ( 'page05', '0', 'Cinquième page', 'page05.php');
jackbocar
le 04/10/2007 à 08:25
Script compteur de pages
Bonjour,

Je recherche une bonne idée pour créer un compteur de pages, ce compteur doit calculer le nombre de fois que la page d'index d'une rubrique a été ouverte, à savoir que sur mon site il y a 17 rubriques et entre 10 et 30 pages par rubrique ; Le tout fonctionnant avec une table SQL.

Je me servais d'un script en PHP4, qui bien entendu ne fonctionne plus en PHP5. J'ai essayé sans aucun succès de mètre à jour ce script pour PHP5.

Voir les fonctions du script dans le wall : http://www.lephpfacile.com/wall/wall-473.php

Pour le moment j'ai créé une page avec tous les scripts des compteurs mais le hic, c'est que tous ces compteurs font appel à un fichier .TXT.

C'est à mon avis, un répertoire inutile avec 17 fichiers .TXT à l'intérieur.

Alors, j'attends vos suggestions pour réaliser ce compteur de pages. Des suggestions avec des bouts de codes, que je puisse tester.

Merci

Jack Bocar
jackbocar
le 04/10/2007 à 08:16
Sécurité de base pour un site
Bonjour,

Bien sur, c'est une erreur de ma part, HTMLENTITIE est fait pour la l'affichage

Tout comme :
addslashes() pour l'insertion des données
stripslashes() pour l'affichage des données

Jeck Bocar
jackbocar
le 04/10/2007 à 07:53
Sécurité de base pour un site
Bonjour,

Qu'entends-tu par surprises ?

Et pour quelles raisons utiliser PhpMyAdmin plutôt que PHP ?

Je pense que pour une modification de texte, ou une nouvelle insertion, il est plus simple et plus rapide d'utiliser des scripts préparés pour cet usage.

Et surtout, lorsque tu as dans une table 3887 entrées donc ID, c'est plus simple de trouver cette ID si elle est affichée sur ta page d'administration. Non ?

Jack Bocar
jackbocar
le 03/10/2007 à 19:37
Sécurité de base pour un site
Bonjour,

Une question qui me taraude depuis assez longtemps, pour ce qui est de la sécurité de base d'un site, il faut :
HTMLENTITE pour insérer dans la table, mais sont-ils vraiment utiles si c'est le webmaster seul qui met à jour le site.

Ce qui veut dire personne autre que lui place des news, des textes ou tout autres, pour les membres, c'est lui qui créait le mot de passe en SH1 et l'envoie au membre.

En fait les membres n'ont que le droit de lire.

Faut-il tout de même sécuriser les script du genre :
<?php
$result = $conn->query("SELECT id, nom, dep FROM table WHERE id='25' ORDER BY nom ASC");
while ($obj = $result->fetch_object()) {
?>


Merci de votre réponse

Jack Bocar
jackbocar
le 03/09/2007 à 09:48
Requêtes les plus efficaces
Bonjour,

Merci de ta réponse.

Tu penses que l'énumération OR dep='75' etc. n'est pas une bonne solution.

Mais, comment réaliser ma requête avec ce champ region_id, car visiblement, les énumérations sont inévitables ?

Si je veux sortir de ma table tous les noms qui sont dans les départements de la région Provence Alpes Côte d'Azur, ce qui me donne en départements :
( 04 ) . Alpes-de-Haute-Provence
( 05 ) . hautes-Alpes
( 06 ) . Alpes-Maritimes
( 13 ) . Bouches-du-Rhône
( 83 ) . Var
( 84 ) . Vaucluse

Comment je réalise ma requête avec region_id ?

Pour le moment, j'ai cette option :

SELECT nom, dep FROM commanderies WHERE dep='04' OR dep='05' OR dep='06' OR dep='13' OR dep='83' OR dep='84'


Merci de m'éclairer.

Jack Bocar
jackbocar
le 02/09/2007 à 15:53
Requêtes les plus efficaces
Bonjour,

J'aimerai savoir sur ces lignes de codes, lesquelles sont les plus efficaces pour afficher une série de départements avec leur nom ?



<h2>D&#233;partements de la r&#233;gion : Franche Comt&eacute; (25 - 39 - 70)</h2>
<?php
$conn = db_connect();
$result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='25' OR dep='39' ORDER BY dep ASC");
while ($obj = $result->fetch_object()) {

printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
}
$result->close();
$conn->close();
?>


La première requête fait appel à tous les départements avec la clause "OR" en énumération.


Les autres sont classiques, une requête par département.

Qui est le plus rapide, et le moins couteux en ressources ?

A savoir qu'il y a des régions avec 6 ou 7 départements !!!

<h2>D&#233;partements de la r&#233;gion : Franche Comt&eacute; (25 - 39 - 70)</h2>

<?php
$conn = db_connect();
$result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='25' ORDER BY dep ASC");
while ($obj = $result->fetch_object()) {

printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
}
$result->close();


$conn = db_connect();
$result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='39' ORDER BY dep ASC");
while ($obj = $result->fetch_object()) {

printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
}
$result->close();



$conn = db_connect();
$result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='70' ORDER BY dep ASC");
while ($obj = $result->fetch_object()) {

printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
}
$result->close();
$conn->close();
?>


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

J'ai trouvé une autre solution pour que cela fonctionne :

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

while ($obj = $result->fetch_object()) {
printf ("%s (%s)\n", $obj->id, $obj->nom);
}
$result->close();
}
$mysqli->close();
?>


Mais, ça ne m'explique pas pourquoi de l'autre façon cela ne fonctionne pas ?

Jack Bocar
LoadingChargement en cours