Vérifier que URL pointe vers Flux RSS

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Vérifier que URL pointe vers Flux RSS

Re: Vérifier que URL pointe vers Flux RSS

par Xartrick » 01 juin 2012, 22:45

Essaye de voir où ça coince PHP: PDO::errorInfo - Manual.

Re: Vérifier que URL pointe vers Flux RSS

par jamz971 » 30 mai 2012, 18:32

ok donc j'ai tenu compte de des recommandation.
j'ai éffectué les différents tests ils sont tous concluants ;
En revanche sur mon serveur test en ligne enregistrement toujours impossible
malgré le copié collé du code local!!
aucune erreur ne ressort
<?php

								/*
									Formulaire Traitement
								*/

try{
	$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	/*
		** Vérifier que l'URL saisie retourne un flux RSS
	*/


function IsValidFeed($sURL) {
    $sURL  = 'http://feedvalidator.org/check.cgi?url=' . urlencode($sURL);
    $sPage = file_get_contents($sURL);
    
    if (strstr($sPage, 'This is a valid RSS feed.')) {
        return TRUE;
    }
    
    return FALSE;
}

if( isset($_POST) && !empty($_POST)){
	$sUrl='';
	$sUrl = $_POST['url_site'];
	$url_site = $_POST['url_site'];
	$nom = $_POST['nom'];
	$categorie = $_POST['categorie'];
	
	$sql="SELECT nom, url FROM site WHERE nom ='" .$_POST['nom']."' AND url = '".$_POST['url_site']."' ";
	$result=$connexion->query($sql);
	$ligne= $result->rowCount();
	
	if($result = $ligne){	
	
		header("Location:index.php?param=error");
		
	}else{
		
		if(IsValidFeed($sUrl) == true){
			
			$sql="INSERT INTO site VALUES ('', '$nom', '$categorie', '$url_site')";
		
			$result = $connexion->prepare($sql);
			$result->execute();				
			header("Location:index.php");
		
		}//fin vérifier url
						
	}
			
}//Fin Si $_POST

}catch(PDOException $e) //message d'erreur
								{
        							echo $e->getMessage();
								}

?>

Re: Vérifier que URL pointe vers Flux RSS

par Xartrick » 30 mai 2012, 07:40

Merci de vaux réponses déjà
Apres modification mon code le suivant;
neanmoins je ne peut toujours pas vérifier l'url et évidement inserer en base de données la redirection se fait immediatement avant la partie execution de la fonction IsValidateFeed();

j'ai fait un var_dump() / print_r();
voici le résultat; A mon sens la requête sql associé est bonne

Image

Voici le code
<?php

								/*
									Formulaire Traitement
								*/

try{
	$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	/*
		** Vérifier que l'URL saisie retourne un flux RSS
	*/


function IsValidFeed($sURL) {
    $sURL  = 'http://feedvalidator.org/check.cgi?url=' . urlencode($sURL);
    $sPage = file_get_contents($sURL);
    
    if (strstr($sPage, 'This is a valid RSS feed.')) {
        return TRUE;
    }
    
    return FALSE;
}

if( isset($_POST) && !empty($_POST)){
	$url = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['url_site']);
	$nom = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['nom']);
	$categorie = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['categorie']);
	
	//Verif avant INSERT
	$sql="SELECT nom, url FROM site WHERE nom ='" .$_POST['nom']."' AND url = '".$_POST['url_site']."' ";
	$result=$connexion->query($sql);

	if($result != null){
		
		header("Location:index.php?error");
	}else{
		
		//Execution fonction
		$sUrl='';
	$sUrl = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['url_site']);
		if(validerRSS($sUrl) == true){
			
			$sql="INSERT INTO site VALUES ('', '$nom', '$categorie', '$url')";
		
			$result = $connexion->prepare($sql);
			$result->execute();				
			header("Location:index.php");
		
		}
						
	}
			
}//Fin Si $_POST

}catch(PDOException $e) //message d'erreur
								{
        							echo $e->getMessage();
								}

?>
if(validerRSS($sUrl) == true){
Ce n'est plus la fonction validerRSS mais la fonction IsValidFeed.

Re: Vérifier que URL pointe vers Flux RSS

par jamz971 » 30 mai 2012, 05:35

Merci de vaux réponses déjà
Apres modification mon code le suivant;
neanmoins je ne peut toujours pas vérifier l'url et évidement inserer en base de données la redirection se fait immediatement avant la partie execution de la fonction IsValidateFeed();

j'ai fait un var_dump() / print_r();
voici le résultat; A mon sens la requête sql associé est bonne

Image

Voici le code
<?php

								/*
									Formulaire Traitement
								*/

try{
	$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	/*
		** Vérifier que l'URL saisie retourne un flux RSS
	*/


function IsValidFeed($sURL) {
    $sURL  = 'http://feedvalidator.org/check.cgi?url=' . urlencode($sURL);
    $sPage = file_get_contents($sURL);
    
    if (strstr($sPage, 'This is a valid RSS feed.')) {
        return TRUE;
    }
    
    return FALSE;
}

if( isset($_POST) && !empty($_POST)){
	$url = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['url_site']);
	$nom = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['nom']);
	$categorie = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['categorie']);
	
	//Verif avant INSERT
	$sql="SELECT nom, url FROM site WHERE nom ='" .$_POST['nom']."' AND url = '".$_POST['url_site']."' ";
	$result=$connexion->query($sql);

	if($result != null){
		
		header("Location:index.php?error");
	}else{
		
		//Execution fonction
		$sUrl='';
	$sUrl = preg_replace('#[^A-Za-z0-9]#i', '',$_POST['url_site']);
		if(validerRSS($sUrl) == true){
			
			$sql="INSERT INTO site VALUES ('', '$nom', '$categorie', '$url')";
		
			$result = $connexion->prepare($sql);
			$result->execute();				
			header("Location:index.php");
		
		}
						
	}
			
}//Fin Si $_POST

}catch(PDOException $e) //message d'erreur
								{
        							echo $e->getMessage();
								}

?>

Re: Vérifier que URL pointe vers Flux RSS

par Xartrick » 29 mai 2012, 07:51

function IsValidFeed($sURL) {
    $sURL  = 'http://feedvalidator.org/check.cgi?url=' . urlencode($sURL);
    $sPage = file_get_contents($sURL);
    
    if (strstr($sPage, 'This is a valid RSS feed.')) {
        return TRUE;
    }
    
    return FALSE;
}

Re: Vérifier que URL pointe vers Flux RSS

par Invité » 28 mai 2012, 23:20

salut
fais un:
var_dump($result) , tu verras ton problème avec ton if($result==true)
+

Re: Vérifier que URL pointe vers Flux RSS

par moogli » 28 mai 2012, 23:10

salut,

va falloir déboguer un peu :
- vire l'arobase : tu a besoin des messages d'erreurs lorsque tu developpe (et d'ailleurs si tu ne veux pas les voir ensuite configure l'error_reporting).
- affiche le contenu des variables (var_dump / print_r)

les $a = ne serveur à rien dans la fonction tu peux les virer.

utilise une variable intermédiaire pour le retour de validerRSS afin de savoir ce qu'elle retourne.

met en commentaire le header pour éviter les problèmes lors du deboguage.

isset($_POST) (ou tout autre super globale) va forcément retourner vrai puisse qu'elles sont toujours définies. utilise seulement empty.

Utiliser extract t'expose à écraser des variables.

@+

Vérifier que URL pointe vers Flux RSS

par jamz971 » 28 mai 2012, 18:55

Bonjour à tous,
je réalise actuellement un lecteur de flux RSS.
Cette étape concerne l'entrée du flux en base de données.
  • Je verifie que le nom et l'adress du flux ne sont pas déjà présent.
    Si il s'agit d'une nouvelle URL, je vérifie quelle pointe vers un Flux RSS
    L'URL étant correcte je rentre tout cela en base de données
J'ai néanmoins un soucis la fonction me semble bonne mais quand je teste avec une URL bidon,
la saisi s'effectue en BD. Je solicite votre aide.


<?php

if(isset($_POST) && !empty($_POST)){
	extract($_POST, EXTR_OVERWRITE);
	
        /*
            Vérifier que le nom et l'url ne soit pas en DB
        */
	$sql="SELECT nom, url FROM site WHERE nom =".'$nom'. "AND url =".'$url'." ";
	$result=$connexion->query($sql);

	if($result == true){
                echo'nom ou url déjà esistant';		
		header("Location:index.php#form");
	}else{
		
	/*
	** Vérifier que l'URL saisie pointe vers un flux RSS
	*/
	
			function validerRSS($url){
			
			    $validateur = 'http://feedvalidator.org/check.cgi?url='; //adress du validateur de flux
			
				if( $reponse = @file_get_contents($validateur . urlencode($url)) ){
					
					if( stristr( $reponse , 'flux valide' ) !== false ){
						$a=1;
						return true;
									
					}else{	
						$a=0;					
						return false;						
					}
				}else{
			
			            return false;
                                }

			}//fin function

		if(validerRSS()== true){
		$sql="INSERT INTO site VALUES ('', '$nom', '$categorie', '$url')";
			$result =$connexion->prepare($sql);
			$result->execute();	
			header("Location:index.php");
		}
						
		}//fin vérifier url
			
}//Fin Si $_POST

?>