LA GLOBULE

Inscris le 25/09/2002 à 10:40
  • Site web
  • Nombre de sujets
    47
  • Nombre de messages
    8 345
  • Nombre de commentaires
    142
  • Nombre de news
    8 346
  • Niveau en PHP
    Excellent

Ses derniers messages sur les forums

LA GLOBULE
le 11/05/2009 à 08:58
Simulation mhash ou hash
Sur la doc PHP de php.net, j'ai trouvé ceci dans les commentaires de la fonction mhash :

<?php
function hmac ($key, $data)
{
// RFC 2104 HMAC implementation for php.
// Creates an md5 HMAC.
// Eliminates the need to install mhash to compute a HMAC
// Hacked by Lance Rushing

$b = 64; // byte length for md5
if (strlen($key) > $b) {
$key = pack("H*",md5($key));
}
$key = str_pad($key, $b, chr(0x00));
$ipad = str_pad('', $b, chr(0x36));
$opad = str_pad('', $b, chr(0x5c));
$k_ipad = $key ^ $ipad ;
$k_opad = $key ^ $opad;

return md5($k_opad . pack("H*",md5($k_ipad . $data)));
}
?>


A tester.
LA GLOBULE
le 11/05/2009 à 08:56
Problème de requête SQL
"Toutefois ça va pas."

Qu'est ce qui ne va pas ? Ton OR ne fonctionne pas ? As tu essayé de mettre des parenthèses ? Car le AND a une priorité plus forte que le OR.
LA GLOBULE
le 06/05/2009 à 12:17
captcha sans session()
Le but du captcha, c'est justement de ne pas pouvoir le lire sans tes yeux.

Avec un serialize, le code du captcha serait en clair dans le cookie.
LA GLOBULE
le 05/05/2009 à 23:47
Problème sur lancement de la requête SQL
Tu as une parse error dans ton code plus une erreur SQL dans ton code.

PHP ne te le dis pas ? Si non, modifie ta configuration de PHP pour les faire s'afficher, sinon, tu vas galérer.

Bref, voici une meilleure concaténation pour ta requête :

<?php
$sql = "UPDATE liste_proprietaire SET adresse = '".mysql_escape_string($_POST['nouvelle_adresse'])."', age = '".mysql_escape_string($_POST['age'])."' WHERE nom = '".mysql_escape_string($_POST['proprio']).'";
?>


Prend aussi l'habitude d'utiliser mysql_escape_string si tu ne veux pas avoir de problème de sécurité sur ton site.

PS : pense aussi à nous donner les messages d'erreurs que tu vois sur ta page, ca peut nous aider (c'est plus instructif que "J'ai essayé le code suivant mais...sans succès..." ou bien "ca ne marche pas").
LA GLOBULE
le 03/05/2009 à 11:41
Espace membre-Soucis de redirection personalisée
Alors ton problème se situe au niveau de ta requete SQL : tu ne select pas le champs destination, donc tu ne peux pas le récupérer pour l'utiliser.

Voici une modification qui devrait fonctionner (je ne l'ai toutefois pas testé) :

<?php

// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
$base = mysql_connect ('XXX', 'XXX', 'XXX');
mysql_select_db ('XXX', $base);

// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT login, destination FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

$nb = mysql_num_rows($req);

if ($nb == 1) {
$data = mysql_fetch_array($req);

session_start();
$_SESSION['login'] = $data['login'];
header("Location: ".$data['destination']);
exit();
}
elseif ($nb == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
LA GLOBULE
le 02/05/2009 à 13:02
problème d'UPDATE
Ton code présente plusieurs problèmes.

1) Il faut que tu testes si tes requêtes SQL se déroulent sans problème, et, le cas échéant, tu dois récupérer l'erreur SQL retournée. Sans ca, tu ne sauras jamais pourquoi tes requêtes buguent.

2) Tu dois protéger les variables que tu insères dans tes requetes SQL en utilisant la fonction mysql_escape_string pour les chaines de caractères, et intval pour les valeurs numériques

Pour le point 1 et 2, on aura donc par exemple :

<?php
$sql = "UPDATE table SET champs1 = '".mysql_escape_string($var1)."', champs2 = '".mysql_escape_string($var2)."' WHERE id = ".intval($id);
$req = mysql_query($sql) or die ($sql.'<br />'.mysql_error());
?>


3) Il vaut mieux faire le htmlentities à l'affichage des données et non à l'insertion en base

4) Ton formulaire est mal concu, car, dans ton while, tu écris plusieurs input txt avec le même attribut name (qui "s'écrasent" donc).

Que veux tu faire exactement ? Tu veux pouvoir modifier toutes tes entrées de base SQL d'un coup ? Ou les modifier une par une ? Car la, tu affiches des input pour toutes les données, mais tu fais un seul UPDATE.
LoadingChargement en cours