gestion erreur sql et recherche dans un BD

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 : gestion erreur sql et recherche dans un BD

par eniot » 01 oct. 2005, 15:27

je venais de partir sur cette piste merki beaucoup pour ton aide
8)

par Truc » 01 oct. 2005, 13:56

oui avec le @ mais c'est quant meme mieux d'éviter d'en avoir des erreur :wink:
voila un bout de code qui liste toutes les tables et leur champs respectifs donc la recherche se fera que sur les champs de chaque table (pas de probleme d'existance de nom de champs dans une table)
$recherche = $_POST['recherche'];
$motclef = explode(" ",$recherche);

$nom_bd="nom_base_mysql"; //Ici a mettre ton nom de base de donnée  

$sql = "SHOW TABLES FROM ".$nom_bd; //requete pour lister toutes les tables 
$result = mysql_query($sql);
while ($row = mysql_fetch_row($result)) // boucle pour toutes les tables
{
	$nomTable=$row[0]; //récupértion des noms des tables
	
	$sql2="SHOW COLUMNS FROM ".$nomTable; //requete pour lister tous les champs d'une table donnée 
    $result2 = mysql_query($sql2);	
	
	while ($row2 = mysql_fetch_row($result2)) // boucle pour tous champs de la table
	{
		$nomChamp = $row2[0]; //récupértion des noms des champs
		
		for ($nb=0; $nb < sizeof($motclef); $nb++) // boucle pour la recherche sur les mot clés
		{
			$sql3="SELECT num_user FROM ".$nomTable." WHERE ".$nomChamp." LIKE '%" . $motclef[$nb] . "%'";
			$result3 = mysql_query($sql3);
			$ligne=mysql_fetch_array($result3);
			
			echo $ligne['num_user']:
		}
	}
}
J'ai pas testé mais le principe y est :D

par rami » 01 oct. 2005, 13:12

Essaies ca:
$data = @mysql_fetch_array($res); //l'operateur @ permet de ne pas afficher les warning, notice renvoyés par une fonction

par eniot » 01 oct. 2005, 11:19

C exatatement cela Truc si ce n'est que num_user est sur toutes les tables...
Merki d'avoir eclairci mon explication :wink:
8)
ceci dit, une idee :?: comment eviter que des warning apparaisse sans quitter les boucle ??

par Truc » 30 sept. 2005, 20:54

Salut, je ne pense pas qu'il s'agit de l'erreur en question mais ta requete sera de toute façon fausse a un moment donné.
A moins que tu as exactement le meme nom de champs dans toutes les tables.
Je m'explique: tu as 2 tables (et leurs champs)->

Code : Tout sélectionner

users - first_name - last_name
ça c'est ok je pense un utilisateur a un nom et prénom...

Code : Tout sélectionner

formation - first_name - last_name
ça c'est moins bon...enfin je pense pas que formation ait ces noms de champs.

Hors la requete va donner ceci a un moment donné:

Code : Tout sélectionner

$request = "SELECT num_user FROM formation WHERE first_name LIKE '%bla%'";
De plus tu demande d'afficher num_user sur toutes les tables, idem
:wink:

par Cyrano » 30 sept. 2005, 20:07

Peux-tu nous montrer un exemple de requête générée qui te reteourne ce genre d'erreur ? (En faisant un echo)

par eniot » 30 sept. 2005, 19:51

hum malheureusement c juste une erreur de frappe le probleme et toujours present et c vraiment pas un probleme de sintax....
merki :wink:

up plz

par Cyrano » 30 sept. 2005, 16:30

Sur la ligne

Code : Tout sélectionner

$data = mysql_fetch_array($res))
Remplace la seconde parenthèse de fermeture par un ";"

gestion erreur sql et recherche dans un BD

par eniot » 30 sept. 2005, 16:17

Voila je cherche a cree une fonction de recherche pour trouvé des mots dans un BD et pour le moment je n'arrive pas à ignorer les erreurs que mysql fait

Code : Tout sélectionner

function printSearch() { [...] $tables = array(1 => 'users', 'formation', 'experiment', 'hobby', 'competence'); $champs = array(1 => 'first_name','last_name', 'title', 'name', 'place', 'logo', 'contents', 'matter', 'link', 'mission'); $recherche = $_POST['recherche']; $motclef = explode(" ",$recherche); for ($nb=0; $nb < sizeof($motclef); $nb++) { for ($j=1; $j <= sizeof($tables); $j++) { for ($i=1; $i <= sizeof($champs); $i++) { $request = "SELECT num_user FROM " . $tables[$j] . " WHERE " . $champs[$i] . " LIKE '%" . $motclef[$nb] . "%'"; echo $request . "<br />"; $res = mysql_query($request, $link); $data = mysql_fetch_array($res); } } } }
voila je parcours tous les champs succeptible de contenir le(s) motsclé de toutes les tables succeptible de contenir c champs. Malheureusement tous les tables ne contienent pas certain champs... :'(
Comment faire pour ignorer les erreurrs liée à ce probleme :
msg d'erreur => "supplied argument is not a valid MySQL result resource" :arrow: evidament :(
une idee :idea:
j'ai pensé faire un tableau 3D (table / champ / "champ present dans table") mais je ne voix pas comment faire....
HELP

oui l'ajout du or die (mysql_error()) me fait sortir des boucles je souhait purement ignorer ces erreurs ?
Si cela est possible la methode est'elle dangereuse pour le server ?