Soumettre un site web dans un formulaire

Eléphant du PHP | 372 Messages

01 juil. 2016, 15:01

Salut à tous.
J'ai un champ qui me pose quelque problème en fait je souhaite permettre à l'utilisateur de poster son site web.
Cependant son site peut etre avec des www. ou sans...

Actuellement j'ai fait ceci:
<label>Site web</label>
          <input data-toggle="popover" data-content="Exemple: (http://www.votresite.fr)" class="form-control" type="text" name="website" value="<?php echo !empty($_POST['website']) ? $_POST['website'] : NULL;?>" />
          <?php echo !empty($erreurs['website']) ? '<div class="alert alert-danger" role="alert"><i class="fa fa-exclamation-triangle"></i>'.$erreurs['website'].'</div>' : NULL; ?>
Coté vérification:
//Verification de la saise de l'adressee url
    if($_POST['website'] != "" && !preg_match("#^http://[w-]+[w.-]+.[a-zA-Z]{2,6}#i",$_POST['website'])){
	$erreurs['website'] = "Veuillez verifier la saisie de votre adresse url";
	}
Donc en fait je cherche a accepté peut importe les www
Merci à vous


Est ce que ceci semble correct ?
// Vérifie si la chaîne ressemble à une URL
if (filter_var($_POST['website'], FILTER_VALIDATE_URL)) {
{
    $erreurs['website'] = "Veuillez verifier la saisie de votre adresse url";
}

Eléphant du PHP | 372 Messages

01 juil. 2016, 15:16

Je viens de tester ça et ça l'air de marcher, c'est bon pour vous ?
if(filter_var($_POST['website'], FILTER_VALIDATE_URL)){
    }else{
        $erreurs['website'] = "Veuillez verifier la saisie de votre adresse url";
        // Si y a une erreur on l'ajouter au tableau;
    }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juil. 2016, 15:33

Bonjour,

filter_var() te permet de valider le format de la variable que tu lui passes en paramètre. Ton usage est donc bon dans la mesure ou la fonction retournera vrai dès lors que la variable correspondra à une URL valide.

Attention cependant, une url valide est composée d'un protocole (quel qu'il soit), d'un domaine (incluant le port et éventuellement sous domaine, donc ça gère bien tes www), d'un chemin éventuel et d'une requête éventuelle. Une url de type FTP:, Telnet:, mailto: ... est donc également considérée comme valide.

Après si tu tiens à partir sur une expression régulière, la plus efficace semble être la suivante selon ce site https://mathiasbynens.be/demo/url-regex
#^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$#iuS
8-|
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...