IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Valeur unique d'un champs de ma table et/ou url unique principale d'un site ? [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut Valeur unique d'un champs de ma table et/ou url unique principale d'un site ?
    Bonjour,

    Je sèche sur la valeur unique ou presque, d'un champs de ma table.

    [pitch]
    Je réalise un moteur de sites (pas de pages), je prends en compte qu'un url par domaine (enfin j'essaye..), Je passe par Curl pour récupérer les métas et le texte html de la page, jusqu'à là tout baigne.
    Ca se complique au niveau de l'url soumise par un visiteur car je souhaite garder que l'url principale dudit site soumis.

    Pour précision sur ma table :
    `url` varchar(250) NOT NULL et un UNIQUE KEY `url` (`url`),
    [pratique]
    Admettons que cette url est soumise par un visiteur # http://www.monsite.ch => Ok Ca fonctionne

    Un autre ou le même visiteur, me soumet une nouvelle url # http://www.monsite.ch/ => avec le / (slash) en plus, l'UNIQUE KEY n'en tient pas compte et ajoute cette nouvelle url dans ma bd (argh.. pas sensible)

    C'est la même chose avec la même adresse du genre http://www.monsite.ch/agriculture/tomate

    j'ai essayé également de refaire une vérif sur l'url d'une autre manière voir même doubler ce contrôle ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
        mysql_query('SET NAMES utf8');
        $requete_url = mysql_query("select url from $tableannu where url LIKE '$url%' ");
        $num_url = mysql_num_rows($requete_url);
     
        if ($num_url!=0)	
    	 {
        echo " elle existe déjà..."
         }
        else 
        {
        echo "ok on peut y aller.." 
        }
     ?>
    La question que je me pose, ne serait-il pas possible de refuser/corriger une url afin que celle-ci indique que la page principale du site ?

    Comment faire pour rendre http://www.monsite.ch/agriculture/tomate en http://www.monsite.ch pour autant qu'il s'agisse de la bonne url principale,
    il se pourrait que ça soit http://monsite.ch (sans le www) ou https://www.monsite.ch avec le https etc..

    Bon stop.. plus j'écris et plus j'ai l'impression d'être mal barré..

    Volontiers si on pouvait recadrer ma façon de voir par une soluce, idée..

    D'avance merci et bon dimanche !

    Yule

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Salut !

    Alors, j'ai pas tout bien compris de ce qui est correct et de ce qui ne l'est pas =D

    Toujours est-il que si vous souhaitez que toutes les URL ayant le même domaine soient considérées comme identiques, vous n'avez qu'à... comparer les domaines ? :p

    Voici une fonction qui retourne le domaine d'une URL :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if (!function_exists('getDomain')) {
     
        function getDomain($url) {
            return preg_replace("/^[\w]{2,6}:\/\/([\w\d\.\-]+).*$/", "$1", $url);
        }
     
    }

    Attention que cette fonction garde en compte le sous-domaine:
    - http://www.domain.tld retournera : www.domain.tld
    - http://domain.tld retourne : domain.tld

    Il faudrait alors ajouter un str_replace('www.', '', $url); afin de toujours avoir le domaine sans les www.

  3. #3
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Hello,

    Merci je vais déjà regarder ça.

    POur ce qui est de la compréhension, je peux comprendre des fois je ne me comprends pas moi, je bidouille et a force on devient limite sans sortir de son monde... rire

    Pour être plus claire, est-il possible de connaitre le tld avec n'importe quelle adresse ? Ma requête est particulière dans le sens ou je ne souhaite accepter que la soumission de la page principale de son tld

    Donc si on me soumet une adresse de ce genre http://www.developpez.net/forums/newreply.php?p=7893093&noquote=1 j'aimerais ajouter et utiliser que cette adresse http://www.developpez.net

    Avec ta fonction comment je peux faire la différence entre ftp://, http:// ou https:// ?

    A+
    Yule

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Testez un peu la fonction et vous verrez bien :p


    Comme je l'ai expliqué la fonction retourne uniquement le domaine, donc peu importe l'URL vous n'aurez que le domaine (et son/ses sous-domaine(s)), SANS LE PROTOCOLE:

    Voici le résultat normalement obtenu via la fonction pour différentes URL :

    http://www.developpez.net/forums/new...3167&noquote=1 => www.developpez.net
    http://www.developpez.net/ => www.developpez.net
    http://www.developpez.net => www.developpez.net
    http://developpez.net => developpez.net
    https://www.developpez.net => www.developpez.net


    EDIT: démo ici : http://tests.pierre-roels.com/get_domain.php

  5. #5
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Re,

    OUi j'ai essayé ;-) Extra ! Merci beaucoup.

    du reste celle-ci fait tout d'une fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function get_domain($url)
    {
      $pieces = parse_url($url);
      $domain = isset($pieces['host']) ? $pieces['host'] : '';
      if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
        return $regs['domain'];
      }
      return false;
    }
     
    print get_domain("http://www.developpez.net/forums/newreply.php?p=7893093&noquote=1");
    Mais comment faire la comparaison depuis ma bd et comment donner une valeur à ce résultat ?

    A+

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Alors pour le reste, je ne sais pas exactement ce que vous souhaitez faire, mais personnellement si l'URL complète avait une certaine importance je garderais en DB l'URL complète ET le domaine.

    Si seul le domaine vous intéresse, ne sauvegardez que le domaine et pas l'URL entrée par l'utilisateur. Il vous suffit alors de comparer si l'utilisateur a entré un domaine qui existe déjà en base de données ou pas.

    J'espère avoir répondu à votre question

  7. #7
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Ok merci, oui vous m'avez largement aidé au vu de mes comnnaissances !


    Une petite dernière ... comment donner une valeur a cette fonction => $yule par exemple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function get_domain($url)
    {
      $pieces = parse_url($url);
      $domain = isset($pieces['host']) ? $pieces['host'] : '';
      if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
        return $regs['domain'];
      }
      return false;
    }
     
    print get_domain("http://www.developpez.net/forums/newreply.php?p=7893093&noquote=1"); 
     
    $yule =""; // => doit être le résultat de ça  print get_domain("http://www.developpez.net/forums/newreply.php?p=7893093&noquote=1"); 
     
    echo"$yule"; // developpez.net
    D'avance merci et bonne après-midi

    Yule

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Une fonction peut faire 2 choses : retourner une valeur (ça c'est bien), afficher une valeur (à éviter la plupart du temps).

    Quand vous écrivez :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    print getDomain($url);

    En fait, vous récupérez la valeur de la fonction mais vous décidez de l'afficher.

    Pour garder la valeur de retour dans une variable, il suffit de remplacer "print" par la variable.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $le_domaine = getDomain($url);
    echo "Le domaine de l'URL est : ".$le_domaine;

  9. #9
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Ok magnifique, je vais essayer tout ce ceci

    Encore merci beaucoup pour votre aide

    Cordialement
    Yuel

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Avec plaisir !

    Vu que vous semblez avoir débuté depuis peu, je ne saurais que trop vous conseiller de toujours donner des noms clairs et précis aux variables, et de les écrire toujours de la même façon et dans la même langue (de préférence, en anglais).

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $foo = getDomain($url); // très mauvais, si 200 lignes plus loin on voit la variable $foo, impossible du premier coup d'oeil de savoir de quoi il s'agit
    $user_input_domain = getDomain($url); // nettement mieux, bien qu'habituellement, on mettra sûrement juste $domain pcq c'est plus court
     
    // de plus, si vous écrivez vos variables avec des underscores, faites de même pour toutes les autres variables (il en est de même pour le nom des fonctions)
    $userInputDomain2 = getDomain($url2); // Mauvais, si vous avez nommé toutes les autres variables avec des underscores. Préférez $user_input_domain_2 = getDomain($url2);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeur par defaut des champs d'une table
    Par Cyrille36 dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/11/2011, 20h47
  2. Recuperer les valeurs d'un meme champ sur plusieurs tables
    Par ant0inep dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/05/2010, 20h18
  3. [A-07] Valeur automatique d'un champs dans une table Access
    Par bertin19 dans le forum Modélisation
    Réponses: 4
    Dernier message: 18/11/2008, 10h20
  4. Réponses: 21
    Dernier message: 23/06/2008, 18h35
  5. Saisir une valeur null dans 1 champ de ma table
    Par User dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/03/2007, 23h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo