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 18/08/2009 à 10:24
PHP retour/affichage d'image
Bonjour,

Essaie de mettre les tags complets : <img src="<?PHP image('lien de mon image'); ?>" align="absmiddle"></a>

Jack Bocar
jackbocar
le 17/08/2009 à 17:30
Explication de class
Bonjour,

Qui peut me mettre en commentaire les fonction que je dois utiliser dans mon formulaire pour que les différent code ce-dessous fonctionnent

par exemple pour faire un select :

<?php 
$result = $sdb->queryFetchAllAssoc('ma-table', 'id', 3 );
$row = $result->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $row)
{
print ('<span>'.$row['id'].'</span>');
}
?>


Je vous dis tout de suite, j'ai déjà essayé et comme ceci, et avec tout un tas de formules ça ne fonctionne pas.

Je suis peut-être pas doué pour les class php et je devrais arrêter de me prendre la tête, je ne fais rein d'autre depuis que je suis tombé dedans, alors que j'ai un boulot monstre en attente...

Je n'ai pas encore essayé les incantations...

Merci de votre aide

Jack Bocar

<?php
$hostname = 'localhost';
$dbsn = 'ma-base';
$username = 'login';
$password = 'password';

class sdb
{

static private $PDOInstance;

public function __construct($dsn, $username=false, $password=false, $driver_options=false)
{
if(!self::$PDOInstance) {
try {
self::$PDOInstance = new PDO($dsn, $username, $password, $driver_options);
} catch (PDOException $e) {
die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
}
}
return self::$PDOInstance;
}


public function beginTransaction() {
return self::$PDOInstance->beginTransaction();
}


public function commit() {
return self::$PDOInstance->commit();
}

public function errorCode() {
return self::$PDOInstance->errorCode();
}


public function errorInfo() {
return self::$PDOInstance->errorInfo();
}


public function exec($statement) {
return self::$PDOInstance->exec($statement);
}


public function getAttribute($attribute) {
return self::$PDOInstance->getAttribute($attribute);
}


public function getAvailableDrivers(){
return Self::$PDOInstance->getAvailableDrivers();
}


public function lastInsertId($name) {
return self::$PDOInstance->lastInsertId($name);
}


public function prepare ($statement, $driver_options=false) {
if(!$driver_options) $driver_options=array();
return self::$PDOInstance->prepare($statement, $driver_options);
}


public function query($statement) {
return self::$PDOInstance->query($statement);
}


public function queryFetchAllAssoc($statement) {
return self::$PDOInstance->query($statement)->fetchAll(PDO::FETCH_ASSOC);
}


public function queryFetchRowAssoc($statement) {
return self::$PDOInstance->query($statement)->fetch(PDO::FETCH_ASSOC);
}


public function queryFetchColAssoc($statement) {
return self::$PDOInstance->query($statement)->fetchColumn();
}


public function quote ($input, $parameter_type=0) {
return self::$PDOInstance->quote($input, $parameter_type);
}


public function rollBack() {
return self::$PDOInstance->rollBack();
}


public function setAttribute($attribute, $value ) {
return self::$PDOInstance->setAttribute($attribute, $value);
}
}
?>
jackbocar
le 13/08/2009 à 16:48
Classe post
Bonjour,

Merci de ta réponse et des tests que tu as fait.
Effectivement, ça fonctionne très bien.
Je vais tester avec mysqli_prepare.

Maintenant, peux-tu me dire comment changer array_keys pour que ça fonctionne avec un formulaire et $_POST.

En fait ce qui m'intéresse dans ce code s'est de pouvoir l'utiliser sans être obligé de donner un nom de table, le fait d'avoir $table et $values, dans cette classe est très utile. Mais je n'ai pas trouvé de code équivalent pour adapter ce code pour qu'il fonctionne avec un formulaire.

Je me suis acheté le livre : Php - Mysql - Mysqli - Pdo (sortie en 2009) en pensant pouvoir adapter ce bout de code. Je n'ai pas trouvé de solution.

Merci

Jack Bocar
jackbocar
le 06/08/2009 à 18:57
Classe post
Est-il possible de poster des données avec un formulaire avec ce code :


<?php
public function dbInsert($table, $values)
{
$this->conn();

$fieldnames = array_keys($values[0]);

$size = sizeof($fieldnames);
$i = 1;
$sql = "INSERT INTO $table";

$fields = '( ' . implode(' ,', $fieldnames) . ' )';

$bound = '(:' . implode(', :', $fieldnames) . ' )';

$sql .= $fields.' VALUES '.$bound;


$stmt = $this->db->prepare($sql);
foreach($values as $vals)
{
$stmt->execute($vals);
}
}
?>




Mon code d'insertion :

<?php
$values = array(
array('animal_name'=>'bruce', 'animal_type'=>'dingo'),
array('animal_name'=>'bruce', 'animal_type'=>'wombat'),
array('animal_name'=>'bruce', 'animal_type'=>'kiwi'),
array('animal_name'=>'bruce', 'animal_type'=>'kangaroo')
);

$crud->dbInsert('animals', $values);
?>


Ou est-il possible de créer une classe pour poster $POST_[' '] avec ce même code.

Jack Bocar
jackbocar
le 04/08/2009 à 19:04
Fonction de ce code
Bonjour,

Mais alphanumérique, ca veut dire lettres ET chiffres.

Tu as raison, si j'étais acrobate, je me foutrais des coups de pieds au cul

Jack Bocar
jackbocar
le 04/08/2009 à 16:10
Fonction de ce code
Désolé, je ne comprends pas ce qu'il se passe, j'ai réécris le code, théoriquement, il ne devrait accepter que les login et pawword en alpha numérique.
Et bien il accepte même les chiffres et les lettres. Cela provient peut-être du changement de WampServer,

J'avais au début des tests PHP 5.2.9-2 et je suis passé à PHP 5.3.0

Idem pour MYSQL, j'avais MySQL 5.1.33, je suis passé à MySQL 5.1.36.

Idem pour PHPMYADMIN, j'avais phpMyAdmin 3.1.3.1, je suis passé à phpMyAdmin 3.2.0.1.

Je vais refaire tous mes test sur Ubuntu et voir si c'est la même chose.

Jack Bocar
jackbocar
le 04/08/2009 à 15:24
Fonction de ce code
Merci de ta réponse

Lorsque j'ai testé ce code sans mettre les « mysql_escape_string », je ne pouvais pas entrer comme login decembre25, pas plus que pour mot de passe du genre MyuxvBNxx25, le code refusait systématiquement car il y a des chiffres dans le login ou dans la password.

Lorsque j'ai mis ses « mysql_escape_string » pour protéger les entrées dans la base de données, j'ai refait les mêmes essais, et là, le code acceptait les login avec des chiffres idem pour les password.

Comment peux-tu expliquer cela ?

Jack Bocar
jackbocar
le 04/08/2009 à 08:32
Fonction de ce code
Bonjour,

J'aimerai que l'on me dise si c'est possible pourquoi lorsque j'ajoute ces deux ligne de code :

<?php
$username = mysql_escape_string($username);
$password = mysql_escape_string($password);
?>


Le control alpha numérique n'est plus valide. Ce qui veut dire que je peux ajouter des chiffres au login et au mot de passe.

Ce qui est incroyable, c'est que tout fonctionne très bien, le code prend très bien les logins avec des chiffres et idem pour les mots de passes.

Et les données sont elles aussi très biens enregistrées puisqu'on peut se connecter avec les logins et passwords avec chiffres.

Lorsque l'on se connecte à la page des membres, la fonction qui control les caractères alphanumériques, accepte très bien les mots de passes avec des chiffres idem pour les logins.

Et lorsque j'envoie le mot de passe : ' or 1=1--, là j'ai une alerte qui me dit que le mot de passe doit être alphanumérique.

Toutes les alertes de mauvais mot de passe ou mauvais login fonctionne très bien.


<?php
session_start();

/*** Ici on Vérifie que le les champs sont biens été remplis ***/
if(!isset( $_POST['username'], $_POST['password'], $_POST['form_token']))
{
$message = 'Please enter a valid username and password';
}
/*** Verifier que la session est valide - on envoie une alerte si ce n'est pas le cas ***/
elseif( $_POST['form_token'] != $_SESSION['form_token'])
{
$message = 'Soumission Invalide du formulaire';
}
/*** Vérifier la longueur du nom d'utilisateur ***/
elseif (strlen( $_POST['username']) > 20 || strlen($_POST['username']) < 6)
{
$message = "La longueur du nom d'utilisateur est incorrect";
}
/*** Vérifier la longueur du mot de passe ***/
elseif (strlen( $_POST['password']) > 20 || strlen($_POST['password']) < 6)
{
$message = "La Longueur du Password est incorrect";
}
/*** Vérifier que le nom d'utilisateur comporte que de caractères alphanumériques ***/
elseif (ctype_alnum($_POST['username']) != true)
{
/*** Si ce n'est pas le cas, une alerte est envoyée ***/
$message = "Le Nom d'utilisateur doit être alpha numérique";
}
/*** Vérifier que le mot de passe comporte que de caractères alphanumériques ***/
elseif (ctype_alnum($_POST['password']) != true)
{
/*** Si ce n'est pas le cas, une alerte est envoyée ***/
$message = "Le Password doit être alpha numérique";
}
else
{
/*** Si tout va bien, c'est que les informations sont valides, nous pouvons les inscrire dans la base de données ***/
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);

/*** Maintenant, nous pouvons chiffrer le mot de passe ***/
$password = sha1( $password );


/*** CES DEUX LIGNES QUI PROTEGENT LES DONNEES INSEREES ***/

/*** Ici on protège les informations ***/
$username = mysql_escape_string($username);
$password = mysql_escape_string($password);



$mysql_hostname = '***';
$mysql_username = '***';
$mysql_password = '***';
$mysql_dbname = 'membres_test';

try
{
$dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
/*** $message = Nous informe de la bonne connection à la base de données ***/

/*** Ici on fixe le mode des erreurs et excptions ***/
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

/*** Préparation à l'insertion ***/
$stmt = $dbh->prepare("INSERT INTO membres_users (username, password ) VALUES (:username, :password )");

/*** Ici on fait la liaison des paramètres ***/
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR, 40);

/*** Ici on exécute la requête préparée ***/
$stmt->execute();

/*** Ici on défini les variables de session ***/
unset( $_SESSION['form_token'] );

/*** On confirme la bonne insertion du nouvel utilisateur ***/
$message = 'Nouvel utilisateur ajouté';
}
catch(Exception $e)
{
/*** Ici on vérifie si le nom d'utilisateur existe déjà ***/
if( $e->getCode() == 23000)
{
$message = 'Cet utilisateur existe déjà';
}
else
{
/*** Si on a un problème avec la base de données ou avec le serveur ***/
$message = "Nous ne pouvons pas traiter votre demande. S'il vous plaît essayer à nouveau plus tard";
}
}
}
?>


<html>
<head>
<title>Insertion d'un nouvel utilisateur</title>
</head>
<body>
<p>
<?php echo $message; ?>

</p>
</body>
</html>

Jack Bocar
jackbocar
le 30/07/2009 à 18:04
Images base de données
Bonjour,

J'ai essayé ton mot de passe : ' or 1=1--

Mon authentification répond : Password uniquement en Alpha numérique

Oui tu as raison, c'est les injections SQL qui me font peur. J'ai souvent lu, les liens dans les BD qu'ils soient image ou simple liens sont des portent ouvertes aux injections SQL.

Mais, je ne vois pas comment faire autrement lorsque que tu fais une librairie.

Et puis, comme je l'ai dis plus haut, j'ai un .HTACCESS et ensuite une SESSION avec mot de passe et login et je suis le seul à utiliser l'espace administration.

Jack Bocar
jackbocar
le 17/07/2009 à 19:01
Images base de données
Bonjour

Merci de ta réponse.

Mes images, je les envoie depuis la partie administration, mais, il n'y a que moi qui aie ce droit.

Tout ce qui est sur le site, je suis le seul a envoyer des données dans la bases et dans les tables.

La seule chose, c'est lorsque l'on lit avec des liens, attention aux injections SQL.

Mais, il faut que cette personne ait un droit dans la partie admin ou pas ?

Jack Bocar
LoadingChargement en cours