Cacher un lien

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 : Cacher un lien

par dunbar » 02 août 2007, 21:48

Je préfère la solution que tu as posté là-bas, à une petite correction près. Le caractère "_" est un joker donc si tu cherches "ma_table" et qu'une table "maxtable" existe tu auras un faux positif. Il faut mettre des backslashes pour échapper les méta-caractères LIKE, sans oublier les métacaractères habituels de MySQL... Au final, si mes souvenirs sont bons
function mysql_table_exists($table , $db)
{
	$table = mysql_real_escape_string(strtr($table, array(
		'_'  => '\\_',
		'%'  => '\\%',
		'\\' => '\\\\'
	)));

	$requete = 'SHOW TABLES FROM ' . $db . " LIKE '" . $table . "'";
	$exec = mysql_query($requete);
	return (bool) mysql_num_rows($exec);
}
Au fait dunbar, ce serait cool de ne pas poster le même message dans plusieurs forums, ça donne pas envie de passer du temps à répondre quand les gens ne respectent pas les règlements. :cry:
Ok sorry

par Hubert Roksor » 29 juil. 2007, 12:00

Je préfère la solution que tu as posté là-bas, à une petite correction près. Le caractère "_" est un joker donc si tu cherches "ma_table" et qu'une table "maxtable" existe tu auras un faux positif. Il faut mettre des backslashes pour échapper les méta-caractères LIKE, sans oublier les métacaractères habituels de MySQL... Au final, si mes souvenirs sont bons
function mysql_table_exists($table , $db)
{
	$table = mysql_real_escape_string(strtr($table, array(
		'_'  => '\\_',
		'%'  => '\\%',
		'\\' => '\\\\'
	)));

	$requete = 'SHOW TABLES FROM ' . $db . " LIKE '" . $table . "'";
	$exec = mysql_query($requete);
	return (bool) mysql_num_rows($exec);
}
Au fait dunbar, ce serait cool de ne pas poster le même message dans plusieurs forums, ça donne pas envie de passer du temps à répondre quand les gens ne respectent pas les règlements. :cry:

par Invité » 29 juil. 2007, 11:48

Merci pour tes réponses je vais étudier tes piste, j'avais trouver pratiquement les même, mais il y à trouver (pas trop difficile) et il y à comprendre et là j'ai plus de mal avec php :oops:

Merci à toi

par ouckileou » 29 juil. 2007, 03:12

Ben tu peux déjà balancer une requête bidon style :

Code : Tout sélectionner

SELECT COUNT(*) FROM table_à_tester
et tester le code d'erreur retour s'il y en a un de retourné (errno: 2). C'est le premier truc qui vient à l'esprit après tout, même si c'est un moyen détourné.

Ensuite, j'ai tapé "test existence table mysql" dans Google (note que tu aurais pu le faire aussi) et je suis tombé là-dessus : http://www.commentcamarche.net/forum/af ... -une-table

Avec ce code notamment :
function mysql_table_exists($table , $db) {
$tables=mysql_list_tables($db);
while (list($temp)=mysql_fetch_array($tables)) { if($temp == $table) { return 1; } }
return 0;
}
Je n'ai pas testé mais ça me semble pas mal non ?

Mmmm en fait non, pas tant que ça, parceque après je suis allé voir dans la doc PHP (ce que tu aurais sûrement fait tout seul mais j'étais lancé...) et j'ai vu ceci :
Cette fonction est dépréciée. Il est préférable d'utiliser la fonction mysql_query() pour effectuer la requête SQL SHOW TABLES [FROM db_name] [LIKE 'pattern'] à la place.
Et voilà, Google, puis la documentation, t'ont apporté ta réponse. Ce sera souvent le cas dans le futur, j'en suis certain ;)

Pour ce qui est de la création, voici ce qu'indique la doc comme structure possible :

Code : Tout sélectionner

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
On dirait bien que là-dedans il y a quelquechose pour faire ça proprement.

par dunbar » 28 juil. 2007, 20:50

Je ne comprends pas le lien entre le sujet de ton message, et le message qu'il y a derrière...

Quand on clique sur un lien chez toi, ça crée deux tables c'est ça ?
Une fois qu'elles sont crées, tu dois bien avoir le moyen de le savoir et donc de ne plus proposer le lien.

De toute façon, si tu essayes de recréer une table existante ça ne fonctionnera pas, tu auras une erreur que tu peux gérer.
Salut,
Oui c'est exactement sa mais comment faire pour que le lien disparaise ?, je ne sais pas comment faire pour dire à PHP de vérifier la base et de ne pas proposer le lien si les TABLE existe.

par ouckileou » 28 juil. 2007, 20:25

Je ne comprends pas le lien entre le sujet de ton message, et le message qu'il y a derrière...

Quand on clique sur un lien chez toi, ça crée deux tables c'est ça ?
Une fois qu'elles sont crées, tu dois bien avoir le moyen de le savoir et donc de ne plus proposer le lien.

De toute façon, si tu essayes de recréer une table existante ça ne fonctionnera pas, tu auras une erreur que tu peux gérer.

Cacher un lien

par dunbar » 28 juil. 2007, 19:27

Bonjour,

Je voudrais faire en sorte de créer automatiquement deux TABLES via un lien ou un simple INPUT jusque là pas de soucis, par contre je voudrais que cette option ne soit plus disponible une fois celle-ci créer ?
Comment je pourrais faire cela ?

D'avance merci