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. [code]<?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 ?> [/code]

4 réponses


erfou
Réponse acceptée

Salut,
il y a qqs erreurs d'operateur:
ligne 25, tu utlises "=" pour faire un comparaison
Ligne27, l'operateur "!==" ne me dit rien
ligne 42, tu appelle la fonction valider RSS() sans passer de parametre
de plus, je trouve bizarre que tu declares la fonction validerRSS() dans un else.essaie de reorganiser ton code comme ca:

function validerRSS($url){
//definition de la fonction
}
if(isset($_POST) && !empty($_POST)){
        if($result == true){
            echo'nom ou url déjà esistant'; 
        }else{
            if(validerRSS($url)== true){
                //insertion en bdd
            }
        }
}

Voila qss pistes
Eric

jamzfx
Auteur
Réponse acceptée

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

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();
                                }
?>
erfou
Réponse acceptée

salut
je ne vois pas ou tu définis la fonction validerRSS($sUrl) que tu appelles ligne42
ligne 32 $result=$connexion->query($sql); $result vuat false si il y a un e erreur. Si tu n'as pas trouvé de resultat, tu as un objet vide , mais $result vaut true. essaie un select count(id) FROM ...WHERE... et fais un test if count(id)>0{//redirection}

pour la redirection ligne 36 , utilise une structure type index.php?param=error

eric

jamzfx
Auteur

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();
                                }
?>