Forum Programmation.php Développement site web

Posté par (page perso) .
Tags : aucun
0
11
déc.
2005
Bonjour,

Je compte développer un petit site web de pronostics de tennis s'adressant principalement aux utilisateurs d'un forum (http://www.tennis-classim.net/forum/ , viendez tous si vous jouez au tennis).
Le but est de créer quelque chose de simple rapidement plutôt que de prendre les pronostics, faire les calculs de classements à la main et poster les résultats sur le forum.

Mes besoins sont les suivants:
- faire simple
- qu'il y ait le processus classique d'indentification (création de compte, vérification de l'e-mail, gestion des sessions)
- l'utilisateur peut:
* se logger, modifier son e-mail
* regarder les "paris" en cours, faire ou modifier un pronostic, regarder les classements, regarder ses résultats passés
- l'admin crée des "paris" (QCM. ex: vainqueur: Federer, Nadal, Coria), leur affecte une date d'expiration et un barême de points
- il me faut un hébergement pas cher. J'ai un compte Free, mais c'est du PHP4 et chez moi ça m'embête un peu d'avoir deux Apache (pour PHP4 et 5).

Je suis développeur C++ et python de métier, je connais à peine PHP, j'ai quelques connaissances en SQL et javascript. Pour le moment, je souhaite surtout me débarasser des parties rébarbatives comme la gestion de l'authentification (j'imagine que des gens ont déjà fait mieux que je ne pourrais jamais faire).

Donc:
- je cherche une bibliothèque pour m'aider dans ma tâche. J'ai regardé Copix, mais pour le moment ça ne fonctionne qu'en PHP4 et ça m'oblige à avoir deux Apache (php4 et php5) chez moi (Mandriva 2006).
- si la bibliothèque qui satisfaisait ces besoins ne tournait qu'en PHP5, je cherche aussi un hébergeur pas cher

Donc, si quelques âmes charitables pouvaient m'aiguiller grâce à leur expérience, je leur en serais très reconnaissant. Je ne cherche pas la solution ultime, j'aimerais surtout avoir un truc qui marchouille d'ici l'Open d'Australie en janvier

Merci d'avance
  • # php4 -> php5

    Posté par . Évalué à 2.

    Salut,
    Tu peux utiliser php5 chez FREE.
    Il suffit de mettre l'extension .php5 ;)
    • [^] # Re: php4 -> php5

      Posté par (page perso) . Évalué à 2.

      Merci ! Mais comment font-ils ? J'ai regardé rapidement et j'ai vu que ce n'était pas possible d'avoir les deux dans le même serveur Apache. Ou alors l'un des deux est du CGI ? Ou alors ils ont un astuce pour rediriger vers une autre instance d'Apache ?
  • # J'oubliais

    Posté par (page perso) . Évalué à 2.

    - J'ai plus d'expérience avec Postgresql qu'avec MySQL. J'ai vu que quasiment aucun hébergeur ne propose du Postgresql
    - Ça ne me dérangerait pas de faire ce site chez moi, mais laisser ma machine tourner 24h/24, bof (si j'avais un vieux portable j'aurais pu l'envisager)
    • [^] # postgre / my

      Posté par (page perso) . Évalué à 2.

      Pour du SQL de base, postgre ou mysql c'est du kifkifbourricot.

      Tout homme qui dirige, qui fait quelque chose, a contre lui ceux qui voudraient faire la même chose, ceux qui font précisément le contraire, et surtout la grande armée des gens d'autant plus sévères qu'ils ne font rien du tout. \n -- Jules Claretie

  • # php4 et php5

    Posté par . Évalué à 1.

    Tout à fait possible d'avoir les deux sous Apache.
    J'ai installé php4 et php5 en cgi.
    J'ai même l'impression que cela tourne encore mieux ;)
  • # PHP4 CGI + PHP5 module

    Posté par (page perso) . Évalué à 2.

    J'essaie depuis la fin d'après-midi de faire fonctionner php4 en CGI avec php5 en module.
    J'ai abandonné l'idée d'utiliser suPHP. J'essaie de faire fonction php4 en pur CGI.

    J'ai ajouté les lignes suivantes dans mon httpd.conf:

    ScriptAlias /php/ /usr/bin/
    AddType application/x-httpd-php4 .php4
    Action application/x-httpd-php4 "/php/php4-cgi"

    Et quand je fais appel à une page ".php4", le serveur me retourne le binaire de "/usr/bin/php4-cgi" au lieu d'interpréter la page. Une idée ? Je m'arrache les cheveux :-(
    • [^] # Re: PHP4 CGI + PHP5 module

      Posté par . Évalué à 1.

      Salut,

      As-tu ajouté cela dans ton module alias.c ?

      [IfModule mod_alias.c]
      ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
      Action application/x-httpd-php4 /cgi-bin/php4
      ...
      [/ifModule]
      • [^] # Re: PHP4 CGI + PHP5 module

        Posté par . Évalué à 1.

        ps : La partie alias.c située dans le fichier httpd.conf
      • [^] # Re: PHP4 CGI + PHP5 module

        Posté par (page perso) . Évalué à 2.

        J'ai essayé de faire ça et ça ne marche pas (ou alors je ne suis pas doué). J'ai le droit à:

        Exec format error: exec of '/var/www/cgi-bin/php4.php4' failed

        dans le error_log.

        Moi ce que je voudrais, c'est qu'il execute n'importe quel fichier ".php4" dans n'importe quel répertoire avec /usr/bin/php4-cgi. Et je ne veux pas que mes fichiers ".php4" commencent par "#!/usr/bin/php4", je veux qu'ils restent comme des fichiers avec le PHP en module
        • [^] # Re: PHP4 CGI + PHP5 module

          Posté par . Évalué à 1.

          #!/usr/bin/php4 c'est pour l'executer via le CLI.
          Ici il n'est pas question du CLI ...

          A la limite fait un lien vers le binaire php4 dans la configuration d'Apache.
          • [^] # Re: PHP4 CGI + PHP5 module

            Posté par (page perso) . Évalué à 2.

            Merci pour ton aide, je creuserai un peu plus tout ça demain, il se fait tard.
          • [^] # Re: PHP4 CGI + PHP5 module

            Posté par (page perso) . Évalué à 2.

            Je n'arrive toujours pas à m'en sortir :-(

            J'ai lu la doc de "mod_actions", ça avait l'air d'être parfaitement ce dont j'avais besoin.

            http://httpd.apache.org/docs/2.0/mod/mod_actions.html

            Il y avait un exemple:

            AddHandler my-file-type .xyz
            Action my-file-type /cgi-bin/program.cgi

            Ça semble exactement être ce dont j'ai besoin (sauf que mon extension est .php4 et mon programme /usr/bin/php4-cgi).

            Donc, j'ai créé un répertoire de test contenant un fichier ".php4" de test:

            <directory "/var/www/plop">
            AddHandler my-php4 .php4
            Action my-php4 /my-bin/php4-cgi
            # j'ai essayé avec et sans
            Options +ExecCGI
            </directory>
            # je vais pointer le répertoire virtuel vers le répertoire physique
            Alias /plop/ "/var/www/plop/"
            # j'indique où chercher php4-cgi, et je dis que ce qui se trouve
            # dans "my-bin" est du CGI
            ScriptAlias /my-bin/ /usr/bin/


            Et je reçois toujours le binaire "/usr/bin/php4-cgi". J'ai essayé de mettre un script shell à la place de "php4-cgi", et il me renvoit le source du script shell :-(

            J'ai désactivé tout ce qui traitait php4 et php5 dans ma config (j'avais un fichier "fileprotector.conf" et un fichier "modules.d/70_mod_php.conf" pour avoir une config la plus basique possible.
  • # Inscription, vérifs, et préférences (à suivre)

    Posté par . Évalué à 0.

    <?php
    //inscription.php
    //Les vérifs, puis l'inscription si tout est ok :

    // Deux fonctions qui portent bien leur nom

    function genere_password ($int_max=8, $int_min=6)
    {
    mt_srand();
    if ($int_min != 0) { $longueur = mt_rand($int_max, $int_min); }
    else { $longueur = $int_max; }
    $mdp = '';
    for($i=0; $i<$longueur; $i++)
    {
    $quoi= mt_rand(1,3);
    switch($quoi)
    {
    case 1: $mdp .= mt_rand(0,9); break;
    case 2: $mdp .= chr(mt_rand(65,90)); break;
    case 3: $mdp .= chr(mt_rand(97,122)); break;
    }
    }
    return $mdp;
    }

    function checkEmail($email)
    {
    if ( strrpos($email,'.') > strrpos($email,'@')+2 && strrpos($email,'@') > 1 && strlen($email) > strrpos($email,'.')+2 )
    { return true; }
    else { return false; }
    }

    // Vérification des infos envoyées

    if ( checkEmail($_POST[email]) == true )
    {
    $sql0 = "SELECT login FROM membres WHERE login='$_POST[login]'";
    $req0 = mysql_query($sql0) or die('Erreur avec la base !'.mysql_error());
    if ( @mysql_num_rows > 0 )
    { echo "Ce login est déjà pris !"; }
    else
    {
    $pass = genere_password();
    $sql = "INSERT INTO membres (email,login,pass) VALUES ('$_POST[email]','$_POST[login]','".md5($pass)."',0)";
    $req = mysql_query($sql) or die('Erreur avec la base !'.mysql_error());
    mail($_POST[email],"Inscription au tennis","Votre mot de passe : $pass \n\nCordialement \n\nToute l'équipe","From:ton_adresse@email.com");
    }
    }
    else
    { echo "E-mail non valide !"; }

    //Le formulaire :

    echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">
    Votre adresse e-mail : <input name=\"email\" type=\"text\" size=\"15\" maxlength=\"50\" value=\"$_POST[email]\">
    Choisir un login : <input name=\"login\" type=\"text\" size=\"15\" maxlength=\"25\" value=\"$_POST[login]\">
    <input type=\"submit\" value=\"OK\" />
    \n";


    //Login.php
    //Se logger, et créer une session utilisateur (N'oublie pas de commencer toutes tes pages par session_start();)

    session_start();
    if ( $_POST[login] == '' )
    {
    header("location: index.html?erreur=log");
    }
    else
    {
    include "ink/conn.php";
    $sql = "SELECT * FROM members WHERE login = '$_POST[login]' LIMIT 1";
    $req = mysql_query($sql);
    $data = mysql_fetch_array($req);
    if ( md5($_POST[pass]) == $data[pass] )
    {
    $_SESSION[member] = $data;
    $sql2 = "UPDATE members SET dernier_acces = NOW() WHERE id = '".$_SESSION[member][id]."'";
    $req2 = mysql_query($sql2);
    header("location: index.php");
    }
    else
    {
    echo "Mauvais login/mot de passe";
    }
    }

    echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">
    Votre login : <input name=\"login\" type=\"text\" size=\"15\" maxlength=\"25\" value=\"$_POST[login]\">
    Votre mot de passe : <input name=\"pass\" type=\"password\" size=\"15\" maxlength=\"15\" value=\"$_POST[pass]\">
    <input type=\"submit\" value=\"OK\" />
    \n";

    //preferences.php
    //Changer son mail, son mot de passe (pas son login -> N'oublie pas de mettre une clef unique dans ta table MySQL)

    $sql_verif = "SELECT * FROM members WHERE login='".$_SESSION[member][login]."'";
    $req_verif = mysql_query($sql_verif);
    $data_verif = mysql_fetch_array($req_verif);
    if ( md5($_POST[pass_old]) == $data_verif[pass] && $_POST[pass1] == $_POST[pass2] && checkEmail($_POST[email) == true )
    {
    $sql_mod = "UPDATE members SET pass='".md5($_POST[pass1])."',modifie_le=NOW() WHERE id='".$_SESSION[member][id]."'";
    $req_mod = mysql_query($sql_mod);
    $_SESSION[member][email] = $_POST[email]);
    $_SESSION[member][pass] = md5($_POST[pass1]);
    // Ici, tu aurais pu rajouter une vérification d'email, mais là j'ai la flemme...;)
    }

    echo "<form action=\"$_SERVER['PHP_SELF']\" method=\"post\">
    Votre adresse e-mail : <input name=\"email\" type=\"text\" size=\"15\" maxlength=\"50\" value=\"".$_SESSION[member][email]."\">
    Votre mot de passe actuel :    <input type=\"password\" name=\"pass_old\" size=\"10\" maxlength=\"20\" />
    Votre nouveau mot de passe :    <input name=\"pass1\" type=\"password\" size=\"10\" maxlength=\"20\" />
    Confirmez le nouveau mot de passe :    <input name=\"pass2\" type=\"password\" size=\"10\" maxlength=\"20\" />
    <input type=\"submit\" value=\"OK\" />
    \n";

    //admin.php
    //Mets cette page dans un répertoire à part que tu protèges avec htaccess...

    //Donne moi plus de précisions sur tes paris, pronostics, classements pour la suite

    ?>
    • [^] # Re: La table members (à suivre)

      Posté par . Évalué à 0.

      CREATE TABLE `members` (
      `id` mediumint(6) NOT NULL auto_increment,
      `login` varchar(35) NOT NULL default '',
      `prenom` varchar(35) NOT NULL default '',
      `nom` varchar(100) NOT NULL default '',
      `email` varchar(100) NOT NULL default '',
      `pass` varchar(50) NOT NULL default '',
      `cree_le` datetime NOT NULL default '0000-00-00 00:00:00',
      `dernier_acces` datetime NOT NULL default '0000-00-00 00:00:00',
      PRIMARY KEY (`id`)
      UNIQUE KEY `login` (`login`)
      UNIQUE KEY `email` (`email`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

      Je fais mes tables en UTF-8, mais ça implique de protéger tes caractères : tu peux préférer changer par latin1
    • [^] # Re: Inscription, vérifs, et préférences (à suivre)

      Posté par . Évalué à 1.

      Bonjour,

      Tu aurais pu évité de coller tout cela ici.
      Mets toi en contact avec la personne pour peut être envoyer ton script.

      De plus, des trous de sécutirés s'y trouvent.
      Utilise par exemple un "mysql_real_escape_string" pour filtrer tes données.

      Pour la vérification de l'email : peut être préférable d'utiliser les expressions régulières.

      Egalement pour une vérification plus accrue des adresses mails, une vérification à l'aide de "getmxrr" pour l'existance des enregistrements MX, pourrait être envisagée.
      • [^] # Re: Inscription, vérifs, et préférences (à suivre)

        Posté par . Évalué à 0.

        Quel est le problème de coller du code dans les forums ???

        Pour la vérif email, même si c'est plus classique, je ne crois pas que la méthode utilisant les expressions régulières apporte quoi que ce soit de plus ici.

        Tu aurais raison pour les enregistrements MX, si comme dans ce cas, le mot de passe généré n'était envoyé sur l'email en question : c'est tout aussi efficace pour vérifier que l'adresse existe ET qu'elle appartient bien à l'utilisateur.

        Pour le trou de sécurité, je crois que tu as raison dans l'absolu, mais avec les magic_quote_gpc à On dans le php.ini, cela ne résoud-il pas le problème ?
        • [^] # Re: Inscription, vérifs, et préférences (à suivre)

          Posté par . Évalué à 1.

          Ben pour le copier coller personnellement cela ne me donne pas envie de lire celui-ci :| (pas d'indentation, trop long dans une colonne, ...) Un lien vers le fichier source l'idéal ;)

          Ben l'expression régulière conçue en PCRE est tjs une bonne méthode pour toute vérification sur les chaînes (chacun son goût ;))

          Pour les magic_quote_gpc : cela varie d'un hébergeur à l'autre.
          Si l'utilisateur n'en tient pas compte, cela risque de lui jouer de mauvais tour.
          Donc autant forcer la vérification pour être sur ...

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.