Php MySQL - questions diverses

Jeudi 26 Août 2010 03:48

Php MySQL
questions diverses

http://www.nova-star.fr/images/elephant-elephant-php-logo.png

Caractères accentués & html
� � � � � � � � � � �

1 - Comment ça se passe pour les caractères problématiques (é ç à î etc ) à traduire en leur équivalent html (&.eacute; &.agrave; &.ccedil; &.icirc; ) dans les textes fournis à une base de données MySQL, via un formulaire en ligne ? Le serveur fait ça automatiquement ?

2 - Comment restituer un saut de ligne ? Et d'ailleurs, comment le repérer dans le texte fourni via le formulaire en ligne ?
Message modifié 5 fois, dernière modification Jeudi 26 Août 2010 04:05 par Geraldd

Jeudi 26 Août 2010 08:15

pour les caractères spéciaux, tu peux regarder du côté des fonctions htmlentities et pour les sauts de ligne la fonction nl2br

Jeudi 26 Août 2010 10:17

nl2br, ce n'est pas un simple retour à la ligne (sans saut de ligne) ?
Message modifié 1 fois, dernière modification Jeudi 26 Août 2010 10:32 par Geraldd

Jeudi 26 Août 2010 19:50

- Pour les caractères accentuées, tu peux utiliser str_replace:

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

str_replace() retourne une chaîne ou un tableau, dont toutes les occurrences de search dans subject ont été remplacées par replace.

Si vous n'avez pas besoin de règles de remplacement compliquées (comme les expressions rationnelles), utilisez cette fonction de préférence à ereg_replace() et preg_replace().

Voir ici: http://fr2.php.net/manual/fr/function.str-replace.php

- Pour restituer un saut de ligne, j'utiliserai quelque chose comme "echo < b r / >" (sans les espaces mais je suis obligé de les mettre sinon on voit juste un saut de ligne...)
ou peut-être remplacer le caractère '\n' par < b r / >
Message modifié 3 fois, dernière modification Jeudi 26 Août 2010 19:53 par malo

Vendredi 27 Août 2010 02:46

Je vais essayer de pas trop dire de bétises mais c'est pas garantie.

Pour les caractères spéciaux je n'ai aucun souci avec Mysql quand je les envoie grâce a 1 formulaire et quand ensuite je les affiche avec une requète. Pourtant j'utilise pas de fonctions particulières. Pour moi l'essentiel est la déclaration du charset. J'utilise l' UTF-8.

Quand j'accède à ma base avec PHP-admin à la rubrique "Interclassement pour la connexion MySQL" j'ai : utf8_unicode_ci .
Dans mes pages je mets après < HEAD > : < meta http-equiv="Content-Type" content="text/html; charset=utf-8" / > et après chaque connexion à la base de données je place : mysql_query("SET NAMES UTF8"Clin d'oeil;

En procédant ainsi je n'ai pas de soucis avec les caractères accentués.
Il faut également faire attention au format utiliser par ton éditeur. Par exemple si tu utilise Notepad++, il faut aller dans le menu FORMAT et choisir UTF8 car souvent par défaut c'est ANSI.

Pour les saut de ligne je n'ai pas trop compris ce que tu voulais dire. Dans le codage php comme Malo j'utilise < br/ > .
Ou alors tu veux stocker dans ta base du texte avec des retour a la ligne ? (2h31 du mat j'ai la comprenette difficile Émoticône )

P.S : le lien qui m'a servi pour le problème des accents : http://www.aquatz.com/Encodage-convertir-un-site-en-UTF8-PHP-MySQL_a36.html

Jeudi 02 Septembre 2010 18:34

1. D'accord avec rigs : éditeur, bdd et pages html utilisant le même encodage et ça marche tout seul.

2. Pour enregistrer le texte d'un textarea dans la BDD, je ne modifie pas les données. Pour retrouver les sauts de ligne dans une page html j'utilise nl2br.

Samedi 18 Septembre 2010 23:24

Mot de passe
Problème d'extraction d'un nombre adjoint au mot de passe dans la base de données

http://coqsrougestt.free.fr/1/images/bannieretest710px.jpg


Le visiteur me fournit son nom et son mot de passe.

Je compare ce couple nom+mot de passe à une table de ma base de données :

Nom ----- mot de passe --- page de redirection

Paul ----- zorro ------------ 14
Alice ---- tinkerbell -------- 6
Albert --- lulu -------------- 21

...

Pour ça, j'utilise le code ci-dessous :

mysql_select_db($coqsrougesbasededonnees, $coqsrougestt);
$requetemotdepasse="SELECT Nom, mot de passe FROM utilisateurs WHERE Nom=$nom AND mot de passe=$motdepasse"
$lignebasededonnees = mysql_query($requetemotdepasse, $coqsrougestt)

Quand le couple nom+mot de passe est correct, le script redirige le visiteur vers une autre page.

Tout ceci fonctionne parfaitement.


Comment puis je rediriger vers la page identifiée par le numéro indiqué en rouge dans la table de mot de passe ?
Par exemple, 14 dans le cas de Paul.

Idéalement, voila ce que je voudrais faire :

$pagederedirection = "section.php?IDsection=14"; (14 dans le cas de Paul)
header("Location: " . $pagederedirection );

Quelle formulation pour extraire ce numéro rouge de ma table ?
Message modifié 3 fois, dernière modification Dimanche 19 Septembre 2010 08:27 par Geraldd

Dimanche 19 Septembre 2010 08:48

J'ai essayé ça :

$resultat = mysql_fetch_assoc($lignebasededonnees);
$section=$resultat['page de redirection'];

Ca ne marche pas. $section ne se charge pas avec le numéro rouge.



PS : en réalité, je n'ai pas mis d'espaces dans les variables. J'en ai mis ici juste pour leur lisibilité.
Message modifié 2 fois, dernière modification Dimanche 19 Septembre 2010 08:51 par Geraldd

Dimanche 19 Septembre 2010 09:01

Bonjour,

Ta requête SQL doit être du type:
$query = "SELECT Nom, mot_de_passe, page_de_redirection FROM utilisateurs WHERE Nom=$nom AND mot_de_passe=$motdepasse";

Ensuite pour se connecter à la base de données, voici comment je fais:

// $host -> nom du serveur
// $user -> utilisateur de la BD
//$pwd Mot de passe d"accès à la base de données
// $database nom de la base de données
@mysql_connect($host, $user, $pwd) or die ("Erreur mysql_connect"Clin d'oeil;
@mysql_select_db($database);

J'éxécute la requête:
$resultat = mysql_query($query);

Je récupére les résultats de la requête:
while ( $enr = mysql_fetch_object( $resultat ) )
{
echo "$enr->Nom $enr->mot_de_passe $enr->page_de_redirection
}

Si tu n'as qu'une ligne tu peux éviter la boucle while.


Par contre, ton code est sensible à l'injection SQL. Si tu cherches dans Google, tu devrais trouver des explications dessus.
En gros si je sais qu'un compte s'appelle admin, je vais taper dans:
- le nom: admin /*
- le mot de passe */
Alors la requete SQL sera du genre:
SELECT Nom, mot_de_passe, page_de_redirection FROM utilisateurs WHERE Nom=admin /* AND mot de passe=*/
Du coup la vérification du mot de passe est commentée et n'est pas réalisée.
Je suis connecté avec le compte admin sans même connaître le mot de passe.
Message modifié 1 fois, dernière modification Dimanche 19 Septembre 2010 09:01 par malo

Dimanche 19 Septembre 2010 09:13

Un petit tutorial qui explique mieux que moi l'injection SQL.
En plus il arrive à se connecter sans connaître le nom ni le mot de passe:

http://www.6ma.fr/tuto/attaques+par+injection+sql-43
Message modifié 1 fois, dernière modification Dimanche 19 Septembre 2010 09:13 par malo

Dimanche 19 Septembre 2010 13:23

Citation de malo :
$resultat = mysql_query($query);

Je récupére les résultats de la requête:
$enr = mysql_fetch_object( $resultat )
{
echo "$enr->Nom $enr->mot_de_passe $enr->page_de_redirection
}

Ton code est faux.
Je ne sais pas pourquoi. Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /mnt/171/sdc/9/2/coqsrougestt/1/motdepasse.php on line 43

Citation de malo :
ton code est sensible à l'injection SQL

Je l'ai simplifiée dans cemessage par souci de clarté. Ma vraie requête est $requetemotdepasse=sprintf("SELECT Nom, mdp FROM utilisateurs WHERE Nom='%s' AND mdp='%s'", get_magic_quotes_gpc() ? $nom : addslashes($nom), get_magic_quotes_gpc() ? $motdepasse : addslashes($motdepasse));

Dimanche 19 Septembre 2010 13:44

Petit problème de double-quote pas fermée ou de point-virgule manquant en fin de ligne.
Par exemple si tu as récupéré la ligne echo comme je l'ai écrite, elle doit poser problème.
Il faudrait fermer les quotes et mettre un point-virgule à la fin.

Sinon cela devrait fonctionner en principe.

Regarde aussi sur le site php.net: http://fr.php.net/manual/fr/function.mysql-fetch-object.php
Il est pratique quand on ne connait pas la fonction à utiliser.

Bon courage

Dimanche 19 Septembre 2010 14:00

Citation de malo :
Il faudrait fermer les quotes et mettre un point-virgule à la fin.

Je l'avais évidemment corrigé. Ca ne marche pas.

Dimanche 19 Septembre 2010 14:15

D'après ton tuto, tu te plantes pour les guillemets, il n'y en a pas.
Message modifié 2 fois, dernière modification Dimanche 19 Septembre 2010 14:39 par Geraldd

Dimanche 19 Septembre 2010 14:24

Je n'ai fait que copier des lignes d'un exemple qui marche chez moi.
J'ai habillé autour pour coller à ton problème.
Mais évidemment je n'ai pas testé.

Les fonctions que je t'ai présentées fonctionnent et répondent je pense à ton problème.

Maintenant il faut juste que tu trouves l'erreur de syntaxe qui traine dans ton fichier.

Dimanche 19 Septembre 2010 14:47

Citation de malo :
Je n'ai fait que copier des lignes d'un exemple qui marche chez moi.

Vu le tuto, je ne vois pas comment ça peut marcher chez toi avec un guillement.

Citation de malo :
Les fonctions que je t'ai présentées fonctionnent et répondent je pense à ton problème.

Je n'en sais rien. J'avais compris que $enr->page_de_redirection était cette valeur que je cherche désespérément à extraire. J'avais mal compris, apparemment.

Citation de malo :
Maintenant il faut juste que tu trouves l'erreur de syntaxe qui traine dans ton fichier.

peut être la fonction elle-même.

Mon script c'est ça :
mysql_select_db($... etc... la base données );
$requetemotdepasse= ... etc.. requête sécurisée ...;
$lignebasededonnees = mysql_query($requetemotdepasse, $... etc. la base de données) or die(mysql_error());
$numerolignebd = mysql_num_rows($lignebasededonnees);

if ($numerolignebd) {


$resultat = mysql_fetch_object($lignebasededonnees);
$cettevaleur = $resultat->IDsection;

$_SESSION['section'] = $cettevaleur;

header("Location: " . "pagemodifiable.php" );

}
else {
header("Location: ". "motdepasseerreur.php" );
}





Tout ce qui est en gris fonctionne. Donc l'erreur provient de :
$cettevaleur = $resultat->IDsection;
$_SESSION['section'] = $cettevaleur;
Ca fait deux jours que cette connerie m'arrête. Si j'avais une hache, je serais actuellement l'heureux propriétaire de deux moitiés de PC.
Message modifié 5 fois, dernière modification Dimanche 19 Septembre 2010 15:10 par Geraldd

Dimanche 19 Septembre 2010 16:30

Il faudrait voir le script complet.
Tu peux le mettre en .zip sur un serveur que je regarde ?
Enlève juste les paramètres des connexions à la base de données.

Dimanche 19 Septembre 2010 18:00

J'ai 1 peu de mal à suivre votre discussion ! C'est la récupération du champs 'page de redirection' correspondant au nom ? ou la redirection ?

La redirection je peux pas aider ! prise de tête pour moi !!!!!!!

Pour :
Citation de Geraldd :
Mot de passeQuelle formulation pour extraire ce numéro rouge de ma table ?


Si on part du principe que tu as récupéré le nom et mot de passe de l'utilisateur dans des variables $f_nom et $f_pass et que la table s'appelle 'tableutilisateurs'

// ouverture de la base
$connexion = mysql_connect($serveur, $user, $password) OR die('Erreur de connexion');
mysql_select_db($base) OR die('Sélection de la base impossible');

// on recupère le password de la table qui correspond au login du visiteur
// avec cette requete 'motdepasse' et 'pagederedirection' ne contiennent qu'une seule valeur
$sql = "select motdepasse, pagederedirection from tableutilisateurs where nom='".$f_nom."'";
$req = mysql_query($sql) or die('Erreur de la requête MySQL');
$data = mysql_fetch_assoc($req);

// fermeture de la base
mysql_close();

// test du mot de passe
if($data['motdepasse'] = $f_pass)
{
// action si mot de passe correct
// le contenu du champs 'pagederedirection' se trouve dans $data['pagederedirection']

}
else
{
// action si mot de passe incorrect
}


Par contre toute mes tentatives de faire une redirection ne marche pas
Message modifié 3 fois, dernière modification Dimanche 19 Septembre 2010 18:07 par rigs

Jeudi 23 Septembre 2010 14:35

As-tu solutionné ton problème Geraldd ?

Vendredi 24 Septembre 2010 12:39

J'ai repris le travail la semaine dernière et depuis, je n'ai plus eu une seconde à consacrer à mon site. Je pense tester vos propositions dimanche.
0
1
45 messages

Vous êtes ici : Accueil > Forums > Développement de vos sites