LupusMic

  • Signature
    Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
  • Site web
  • Nombre de sujets
    26
  • Nombre de messages
    1 684
  • Nombre de commentaires
    4
  • Nombre de news
    Aucune
  • Niveau en PHP
    Gourou

Ses derniers messages sur les forums

LupusMic
le 27/01/2014 à 19:10
php.ini-developement et php.ini-production
En fait les deux fichiers sont générés à partir de la même source, ils diffèrent juste dans les valeurs pour garantir un usage sécurisé de PHP.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 27/01/2014 à 11:40
php.ini-developement et php.ini-production
Regardes les paramètres concernant la gestion des erreurs, tu verras qu'elles sont légèrement différentes.

Le plus simple encore est d'utiliser un logiciel qui produit une visualisation des différences entre deux fichiers. Sous Linux je ferais un truc dans ce genre :

vimdiff php.ini-developement php.ini-production
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 22/01/2014 à 11:59
Probleme mise a jour BDD
1. Fais attention à l'indentation: adopte un style, et essaye de t'y conformer.
2. isset peut prendre plusieurs paramètres, ça simplifie le code, parfois.
3. mysql_real_string_escape est ton ami pour éviter les injections SQL (je penses à $newmdp qui est injecté directement)
4. « La modification à échouée » ne sera jamais affiché, car tu tue le script en cas d'échec de mysql_query.
5. Quand on fait un update, on vérifie aussi le nombre d'enregistrements modifiés, car une requête qui ne modifie rien est une requête qui a pu réussir. mysql_query n'échoue que lorsqu'il y a une erreur (syntaxe, privilèges insuffisants, etc).
6. Es-tu certain que la propriété utilisateur.id contient le nom d'utilisateur ? (ceci brise plusieurs conventions, qui veut qu'un id est toujours un identifiant numérique auto-incrémenté)
7. Code en anglais, pas en français, ça t'évitera des confusions (la différence entre « request » et « requested » ne peut pas se faire avec « requete » et « requete »)
8. As-tu imprimé la requête SQL, et tenté de l'appliquer manuellement ? Car elle contient une erreur de syntaxe (une virgule qui se balade).
9. Où est définie la variable $newmdp ?
10. L'API mysql_ est déconseillée, et sera supprimée prochainement. Tu devrais utiliser un autre module PHP pour le même travail (RTFM, c'est écrit en rouge dans le manuel).

Je réécrit rapidement ton code pour le rendre plus lisible:
<?php

//connection au serveur
$cnx = mysql_connect( "localhost", "root", "" ) ;

//sélection de la base de données:
$db = mysql_select_db( "lyberta" ) ;

//récupération des valeurs des champs:
//mot de passe
if(!isset($_POST['mdp'], $_POST['newmdp'], $_POST['confirmmdp']))
{
// message d'erreur
return;
}

if($_POST['confirmmdp'] != $_POST['newmdp'])
{
// message générique d'erreur
return;
}

$user = 'thomas'; // XXX Pull that from the session, BTW, where're the session checks?

$sql = "UPDATE utilisateur SET mdp = '%s' WHERE id = '%s' " ;
$sql = sprintf($sql
, mysql_real_escape_string($_POST['newmdp'])
, mysql_real_escape_string($user));

//exécution de la requête SQL:
$result = mysql_query($sql, $cnx);

if(false === $result)
{
// Find a better way to manage the error (mysql_error message printing could lead
// to sensitive security info leak
die(mysql_error());
}


if(/* there is no result, see mysql_affected_rows */ )
{
// error message for user
return;
}

echo("La modification à échouée") ;
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 20/01/2014 à 11:58
problème connexion
Regardes du côté de tes cookies.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 14/01/2014 à 16:35
Ranger données formulaire dans base données.
> Il faut en effet avoir toujours la première ligne d'une table en AUTO_INCREMENT

Non, non, et non. C'est en fonction des besoins. Mais en effet, si tu compte sur MySQL pour générer cette séquence, et que la définition de ta table ne le fait pas, ça ne va pas bien marcher ^^
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 14/01/2014 à 16:31
variable du shell dans php
En effet, les simple quotes peuvent aider. Mais la commande est en elle-même erronnée: pour affecter une valeur à une variable shell, on n'utilise pas le $.

xx="quelque chose"


De plus, escapeshellcmd est mal employé. escapeshellcmd est censé être utilisé pour s'assurer qu'une variable injectée dans la chaîne fabriquée n'a pas d'effets de bords, et non pas pour traiter l'ensemble de la commande.

<?php $command = sprintf('find  /doc/rep%s -name \'*\'', escapeshellcmd($cmp));
$list = shell_exec($command );
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 04/01/2014 à 09:31
Ranger données formulaire dans base données.
Le bbcode permettrait de rendre ton code lisible pour les visiteurs.

Pour un site en production, je t'encourage à ne pas utiliser la construction « or die ». En gros, tu dois faire quelque chose dans ce goût, à chaque fonction qui peux échouer (à adapter selon la fonction invoquée) :

Note que le code peut échouer s'il ne peut créer le fichier de log (ligne 19).
<?php

function http_500()
{
ob_clean();
header('HTTP/1.1 500 Internal Server Error');
echo '<!DOCTYPE HTML><body><h2>Internal server Error</h2></body>';
}

function write_log($message, $file, $line)
{
static $log_fp;

if(is_null($logfp))
{
$log_fp = @fopen('errors.log', 'a');

if(false === $log_fp)
// XXX
http_500();

set_file_buffer($log_fp, 0);
}

$message = sprintf('%2$s:%3$s %1$s', $message, $file, $line);

// I don't care if I wrote every byte
fwrite($log_fp, $message);
}


$result = mysqli_query($sql);
if(false === $result) {

write_log($result, __FILE__, __LINE__);
http_500();
return;
}
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 04/01/2014 à 09:14
pb mysql_real_escape_string
Si tu veux utiliser mysqli_real_escape_string, tu dois utiliser les autres fonctions mysqli_* en même temps.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 18/12/2013 à 11:43
Soucis avec limit sur plusieurs requetes
N'oublie pas de partager la solution, pour que les visiteurs ne se retrouvent pas avec une problématiques similaire sans solution.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 09/12/2013 à 10:49
Soucis avec limit sur plusieurs requetes
Franchement, si tu ne comprends pas avec les explications de la Globule, ça va être tendu. Je vais essayer de reformuler :

- la pagination, c'est une optimisation pour la visualisation
- cette optimisation se fait en prenant un ensemble de résultats (la liste des films ; la liste de films par catégories), puis d'en afficher un nombre limité par page.

La Globule a pointé qu'à la ligne 45, tu déterminait le nombre d'entrées à afficher à partir de l'ensemble des enregistrements que tu as. Tu auras donc toujours le même nombre de films, quelque soient les critères de sélection, de filtrage ; à moins que tu ne modifie cette requête (le mieux encore, c'est d'encapsuler la construction de la requête, histoire que tu mettes en commun la construction de la clause where de tes requêtes).
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LoadingChargement en cours