Redirection PHP : URL persistantes

Discussion dans 'Administration d'un site Web' créé par Dr DLP, 9 Mai 2004.

  1. Dr DLP
    Dr DLP WRInaute impliqué
    Inscrit:
    29 Juin 2003
    Messages:
    525
    J'aime reçus:
    0
    Bonsoir :)

    J'ai fait un petit script de webring qui fonctionne correctement , hormis chez mon grand ami Lycos et tous les sites masquant les url ( ceux utilisant des url fr.st par exemple ) . Dans ces derniers cas l'url dans la barre de navigation reste celle du site initiateur de la redirection ...

    Pour faire les redirections , j'utilise
    Code:
    die('<meta http-equiv="refresh" content="0;URL='.$lmurl.'">');
    .
    Connaissez vous un moyen pour se débarasser du javascript parasite lors de la redirection ?

    Merci :)

    PS : pour ceux que ça intéresserait , voici mon fichier PHP ( c'est du phpBB )
    Code:
    <?php
    
    define('IN_PHPBB', true);
    $real_phpbb_root_path = './';
    $phpbb_root_path = './';
    include($real_phpbb_root_path . 'extension.inc');
    include($real_phpbb_root_path . 'common.'.$phpEx);
    include($phpbb_root_path . '../robotstats/robotstats.inc.php');
    
    $site_id = intval($HTTP_GET_VARS['site_id']);
    $mode = htmlspecialchars($HTTP_GET_VARS['mode']);
    
    if ( !$site_id || !$mode )
    {
    	$lmurl = 'http://lapin-malin.com/webring/';
    	die('<meta http-equiv="refresh" content="0;URL='.$lmurl.'">');
    }
    
    if ( $mode == "see" )
    {		
    	$sql = "UPDATE " . WEBRING_TABLE . "  
    		SET site_counter = site_counter + 1
    		WHERE site_approved = 1
    		AND site_id = $site_id ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    
    
    	$sql = "SELECT site_url FROM " . WEBRING_TABLE . "  
    		WHERE site_id = $site_id ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    	$row = $db->sql_fetchrow($result);
    	$lmurl = $row['site_url'];
    	die('<meta http-equiv="refresh" content="0;URL='.$lmurl.'">');
    }
    else if ( $mode == "random" )
    {
    	$sql = "SELECT site_lang , site_url FROM " . WEBRING_TABLE . "  
    		WHERE site_approved = 1
    		AND site_id = $site_id ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    	$webr_lang = $db->sql_fetchrow($result);
    	$site_lang = intval($webr_lang['site_lang']);
    	$lmurl = $webr_lang['site_url'];
    
    	$sql = "SELECT site_url , site_id FROM " . WEBRING_TABLE . "  
    		WHERE site_approved = 1
    		AND site_lang = $site_lang 
    		AND site_id <> $site_id ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    	$sites = $db->sql_fetchrowset($result);
    	$num = count($sites);
    	if ( $num )
    	{
    		$rand_site = rand(0,$num);
    
    		$site_id = intval($sites[$rand_site]['site_id']);
    		$sql = "UPDATE " . WEBRING_TABLE . "  
    			SET site_counter = site_counter + 1
    			WHERE site_id = $site_id ";
    		if( !($result = $db->sql_query($sql)) )
    		{
    			message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    		}
    
    		$lmurl = $sites[$rand_site]['site_url'];
    	}
    	die('<meta http-equiv="refresh" content="0;URL='.$lmurl.'">');
    }
    else if ( $mode == "next" )
    {
    	$sql = "SELECT site_lang , site_url FROM " . WEBRING_TABLE . "  
    		WHERE site_approved = 1
    		AND site_id = $site_id ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    	$webr_lang = $db->sql_fetchrow($result);
    	$site_lang = intval($webr_lang['site_lang']);
    	$lmurl = $webr_lang['site_url'];
    
    	$sql = "SELECT site_url , site_id FROM " . WEBRING_TABLE . "  
    		WHERE site_id > $site_id 
    		AND site_lang = $site_lang
    		AND site_approved = 1
    		ORDER BY site_id
    		ASC LIMIT 1 ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    	$row = $db->sql_fetchrow($result);
    	if ( $db->sql_numrows($result) )
    	{
    		$site_id = intval($row['site_id']);
    		$sql = "UPDATE " . WEBRING_TABLE . "  
    			SET site_counter = site_counter + 1
    			WHERE site_id = $site_id ";
    		if( !($result = $db->sql_query($sql)) )
    		{
    			message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    		}
    		$lmurl = $row['site_url'];
    	}
    	die('<meta http-equiv="refresh" content="0;URL='.$lmurl.'">');
    }
    else if ( $mode == "previous" )
    {
    	$sql = "SELECT site_lang , site_url FROM " . WEBRING_TABLE . "  
    		WHERE site_approved = 1
    		AND site_id = $site_id ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    	$webr_lang = $db->sql_fetchrow($result);
    	$site_lang = intval($webr_lang['site_lang']);
    	$lmurl = $webr_lang['site_url'];
    
    	$sql = "SELECT site_url FROM " . WEBRING_TABLE . "  
    		WHERE site_id < $site_id 
    		AND site_lang = $site_lang
    		AND site_approved = 1
    		ORDER BY site_id
    		DESC LIMIT 1 ";
    	if( !($result = $db->sql_query($sql)) )
    	{
    		message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    	}
    	$row = $db->sql_fetchrow($result);
    	if ( $db->sql_numrows($result) )
    	{
    		$site_id = intval($row['site_id']);
    		$sql = "UPDATE " . WEBRING_TABLE . "  
    			SET site_counter = site_counter + 1
    			WHERE site_id = $site_id ";
    		if( !($result = $db->sql_query($sql)) )
    		{
    			message_die(GENERAL_ERROR, 'Could not query site', '', __LINE__, __FILE__, $sql);
    		}
    
    		$lmurl = $row['site_url'];
    	}
    	die('<meta http-equiv="refresh" content="0;URL='.$lmurl.'">');
    }
    else
    {
    	$lmurl = 'http://lapin-malin.com/webring/';
    	die('<meta http-equiv="refresh" content="0;URL='.$lmurl.'">');
    }
    
    ?>
     
  2. Lord Farquaad
    Lord Farquaad WRInaute discret
    Inscrit:
    1 Mai 2004
    Messages:
    105
    J'aime reçus:
    0
    Wow, Dr DLP, c'est vraiment toi ? :? Je pensais que tu t'y connaissais plus que ça :?

    Bon ben soit, alors astuces:
    1. Se débarrasser du javascript pour faire des redirections, quand on a php:
      Code:
      header('Location: ' . $url);
      (éventuellement suivi d'un exit;)
    2. Tirer un élément au sort dans une base de données mysql (ça j'ai inventé tout seul comme un grand :lol:)
      Code:
      SELECT * FROM ma_table ORDER BY rand() LIMIT 1
      ;-)
    3. Ton premier if ne sert à rien puisqu'il a le même effet que le dernier
    4. la fonction empty($var) renvoie true si $var a été assigné et est différent de 0, la chaîne vide (""), FALSE ou un tableau vide (ce serait peut-être mieux pour le premier if...)
    5. Vu que tu ne te sers de $mode que pour faire des comparaisons, dans cette ligne
      Code:
      $mode = htmlspecialchars($HTTP_GET_VARS['mode']);
      le htmspecialchars ne sert à rien ;-)
    6. L'instruction switch serait peut-être mieux ?
      Code:
      switch ( $mode ) {
      case 'see':
      // ...
      break;
      case 'random':
      // ...
      break;
      case 'next':
      case 'previous':
      // ...
      break;
      default:
      header('Location: http://lapin-malin.com/webring/');
      }
      Et pour la différence qu'il y a entre next et previous, tu gagnerais 20 lignes de programmation en réunissant les deux conditions ;-)
    7. Tu supprimerais une requête sql pratiquement à chaque coup si tu passais la langue dans l'url ;-)
    8. Question: si tu n'arrives pas à incrémenter le compteur de clic, c'est vraiment important de générer une erreur ? Pourquoi ne pas rediriger simplement le visiteur ?...
    9. Au fait, pour faire ce que tu veux faire, il existe déjà le mod links, il est vraiment cool (et tu peux le tester sur mon site ;-) nb.: j'ai quand même fait moi-même la page mycircle hein...)
     
  3. Dr DLP
    Dr DLP WRInaute impliqué
    Inscrit:
    29 Juin 2003
    Messages:
    525
    J'aime reçus:
    0
    Le principe du webring est que les autres sites n'ont qu'à afficher un peu de HTML pour accéder au programme , cela n'a pas grand chose à voir avec des liens .
    Le but est d'éviter au maximum l'accès au site générateur , et que tout soit invisible .

    1) C'est le premier que j'ai utilisé , sans plus de résultats /
    2) Aucune différence ....
    3) Le dernier gère les $mode invalides .
    4) Aucune différence non plus .
    5) C'est une habitude , au cas où je déciderais d'ajouter une table de logs , je n'aime pas les failles CSS ....
    6) Pourquoi ?
    7) Je ne suis pas partisan des url complexes pour le HTML , c'est rebutant je trouve .
    8) Effectivement , mais c'est encore une phase debug , il faut que je sache où se trouve les erreurs s'il y en a .
    9) Regarde ce que je veux faire sur ma page d'accueil , tu comprendras mieux .
     
  4. Lord Farquaad
    Lord Farquaad WRInaute discret
    Inscrit:
    1 Mai 2004
    Messages:
    105
    J'aime reçus:
    0
    1. Sans plus de résultats ? 8O Mais c'est sensé être le meilleur système :? C'est d'ailleurs un des exemples donnés sur php.net pour la fonction header:
      http://be.php.net/manual/fr/function.header.php
      Je ne comprends pas que ça ne marche pas :? Enfin je constate que dans les dernières versions de phpBB ils utilisent un autre truc pour les serveurs windows... enfin je sais po :?
    2. Mouais enfin, ça te permet tout de même de supprimer tout le tirage au sort fait en php et d'avoir comme résultat une seul ligne quoi :roll: Enfin, question d'optimisation de l'utilsation des ressources etc. même si ça n'en prend pas beaucoup...
    3. Ton dernier if fait la même chose que ton premier if... enfin oui évidemment le dernier ne conserne que les modes alors que le premier conserne aussi le site_id mais bon...
    4. La différence se voit surtout quand on utilise des système de tests/débuggage comme easyphp par exemple, où tous les warnings s'affichent. Par exemple, en supposant que $var ne soit pas encore déclarée,
      Code:
      !$var
      génère un warning contrairement à
      Code:
      empty($var)
      ici ton
      Code:
      intval($HTTP_GET_VARS['site_id']);
      génèrerait donc un warning si site_vars n'a pas été donné dans l'url... Ce que tu peux aussi faire (mais bon c'est inutile si tu n'as pas de warning, mais en phase de débuggage ça t'éviterait de te demander quoi), c'est:
      Code:
      intval(@$HTTP_GET_VARS['site_id']);
      puisque tu la transforme en int après...
    5. ah ok... au fait: faille CSS ? :? Pas plutôt SQL ? lol
    6. Parce que l'instruction switch a été inventée toute spécialement pour comparer pusieurs fois une même variable avec différentes valeurs constantes (entiers, chaînes, constantes et booléens aussi je suppose...)
    7. Ok, comme tu veux. Alors je propose par exemple pour next:
      Code:
      SELECT a.site_url url_orig, b.site_url, b.site_id FROM " . WEBRING_TABLE . "  a, " . WEBRING_TABLE . " b
            WHERE a.site_approved = 1 
            AND b.site_approved = 1
            AND b.site_id > $site_id 
            AND a.site_id = $site_id
            AND a.site_lang = b.site_lang
            ORDER BY b.site_id
      Ca devrait réunir deux requêtes en unes... mais pour moi le a.site_approved devrait être supprimé...
    8. -
    9. Bah ouais, mais pour un phpBB tu aurais quand même pu te baser sur ce mod et lui ajouter les fonctionnalités next previous et random :roll:
     
Chargement...
Similar Threads - Redirection PHP persistantes Forum Date
Redirections .htm en .php URL Rewriting et .htaccess 16 Mars 2021
redirection .htaccess index.php ne fonctionne pas URL Rewriting et .htaccess 13 Décembre 2018
redirection URL avec ext .mp3 vers une page php via htaccess Netlinking, backlinks, liens et redirections 4 Novembre 2018
Nginx et redirection d'url avec extensions .php URL Rewriting et .htaccess 22 Octobre 2018
Redirection des liens php (404) vers .html ou 410 Netlinking, backlinks, liens et redirections 21 Novembre 2016
Problème erreur redirection cakephp URL Rewriting et .htaccess 4 Avril 2016
Htaccess redirection ancienne url via page php URL Rewriting et .htaccess 24 Janvier 2016
Passage d'un site HTML en php par étapes. Comment coder les redirections ? Développement d'un site Web ou d'une appli mobile 18 Octobre 2015
php html redirection besoin de conseil Développement d'un site Web ou d'une appli mobile 10 Septembre 2015
Php Suivi d'une redirection 302 Développement d'un site Web ou d'une appli mobile 22 Juillet 2015
Redirection 404 en PHP Référencement Google 3 Avril 2014
Redirection htaccess d'une anciene url php avec variable vers le domaine de base URL Rewriting et .htaccess 19 Février 2014
Redirection 301 php? Netlinking, backlinks, liens et redirections 18 Novembre 2013
Redirection en masse : php header ou moteur de redirection Netlinking, backlinks, liens et redirections 24 Mai 2013
PHP : comment savoir l'url avant redirection 302 ? URL Rewriting et .htaccess 16 Décembre 2012
Question redirections, Php ou .htaccess ? Débuter en référencement 21 Novembre 2012
Redirection htm vers php URL Rewriting et .htaccess 4 Novembre 2012
Problème de redirection 301 de ASP vers PHP Netlinking, backlinks, liens et redirections 26 Septembre 2012
Conflit htaccess Joomla / phpBB-SEO : isoler le redirections dans le htaccess skip flag Netlinking, backlinks, liens et redirections 26 Juillet 2012
systeme de redirection qui cache le nom des pages php URL Rewriting et .htaccess 4 Juin 2012