Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1793 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

structure d'une base de donnés sql pour un forum et fonctions innovant

n°240432
omega2
Posté le 06-11-2002 à 12:06:24  profilanswer
 

Reprise du message précédent :

KillerOnEarth a écrit a écrit :

 
 
Je ne crois pas.Mais j'ai simplement mis ceci pour bien initialiser la variable à NULL avant de commencer.
est-ce que NULL est la valeur par defaut affectée à $y ?
 



JE sais pas, il y a les variables non affecté et els vairables affecté.
Je suis pas certain qu'il y ai une valeur par défaut mais tu peux toujorus forcé à "" pour être sur. ;)

mood
Publicité
Posté le 06-11-2002 à 12:06:24  profilanswer
 

n°240487
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 14:05:35  profilanswer
 

houla tout ceci commence a etre de moins en moins clair..
l'utilisation d'une cle de type r1r1rn vas poser des problemes de recherche....
 
.j'utilise une table par niveau de reponse
.la table de niveau n comporte n champ int
.une reponse de type r2r1rn donnera dans une tableN3 N0(int)=2  N1(int)=1 N2(int)=n....(on repond a r2r1 de tableN2).  
.pour chercher une reponse, dans la tableN4 on recherchera :
select * from tableN4 where N0=2 and N1=1 and N2=n....tous les champs retourné sont des reponses.
 
serieux c'est pas plus simple comme traitement....surtout que ces champs numerique peuvent indexé!

n°240491
omega2
Posté le 06-11-2002 à 14:17:39  profilanswer
 

mrwiseman a écrit a écrit :

houla tout ceci commence a etre de moins en moins clair..
l'utilisation d'une cle de type r1r1rn vas poser des problemes de recherche....
 
.j'utilise une table par niveau de reponse
.la table de niveau n comporte n champ int
.une reponse de type r2r1rn donnera dans une tableN3 N0(int)=2  N1(int)=1 N2(int)=n....(on repond a r2r1 de tableN2).  
.pour chercher une reponse, dans la tableN4 on recherchera :
select * from tableN4 where N0=2 and N1=1 and N2=n....tous les champs retourné sont des reponses.
 
serieux c'est pas plus simple comme traitement....surtout que ces champs numerique peuvent indexé!  



Et le jour ou t'auras à faire une recherche par mot clé, tu feras comment?
Tu feras une recherche par niveau ou tu te débrouilleras diféremment?
 
Bon, je vois qu'au final, il existe de nombreuse façon de faire.
Parmis celles qui ont été proposé ici, je préfaire encore maintenant la mienne qui me semble la plus simple à modifié et upgrader même si elle n'est pas la plus simple à mettre en oeuvre au départ.

n°240495
KillerOnEa​rth
Posté le 06-11-2002 à 14:30:11  profilanswer
 

Voilà je me suis débarrassé des queries en trop en faisant avant la fonction affiche :
$obj=mysql_fetch_object(mysql_query("select id,titre,date,sender from base" ));
 
et en gardant dans le while la condition  
while ($obj->id where id='$y';)
 
et ça marche, je ne fais plus qu'un seul query !!!!
Merci pour les conseils !

n°240543
KillerOnEa​rth
Posté le 06-11-2002 à 15:04:36  profilanswer
 

KillerOnEarth a écrit a écrit :

Voilà je me suis débarrassé des queries en trop en faisant avant la fonction affiche :
$obj=mysql_fetch_object(mysql_query("select id,titre,date,sender from base" ));
 
et en gardant dans le while la condition  
while ($obj->id where id='$y';)
 
et ça marche, je ne fais plus qu'un seul query !!!!
Merci pour les conseils !
 




En fait non ça marche pas
 :sweat:

n°240544
KillerOnEa​rth
Posté le 06-11-2002 à 15:07:32  profilanswer
 

Par contre, j'ai corrigé le script pour avoir plus de 9 réponses
et là heureusement ça marche

n°240587
KillerOnEa​rth
Posté le 06-11-2002 à 15:20:21  profilanswer
 

Au final ça donne ça :
 
<?php  
 
 require("connect3.php" );
 mysql_pconnect(SERVER, NOM, PASSE);
 mysql_select_db("forum" );
   
 
 
  function affiche($X,$i,$n) {
 global $y,$k;
 
 
 
 $y=$y.$X.$i;
 $k++;
   while ($obj=mysql_fetch_object(mysql_query("select id,titre,date,sender from base where id='$y'" )) ) {
 
     for($j=0;$j<=$k;$j++){
      echo "    ";    
     }
     echo "  <a href=\"reply.php?num=$y&suj=$obj->titre\" style=\"text-decoration: ".
     "none\"> * $obj->titre </a> <i><font size=-1>  ".
     "$obj->sender   $obj->date </font></i><br>";
 
     affiche('r',1,$k);
     $y = substr($y , 0, -(strlen($i)+2));
 
     $i++;
     $y=$y.$i;
   }
 $k--;  
 }
 
 
 $y=NULL;
 $k=0;
 affiche (NULL,1,0);
 
?> :)

n°240589
omega2
Posté le 06-11-2002 à 15:20:27  profilanswer
 

KillerOnEarth a écrit a écrit :

 
En fait non ça marche pas
 :sweat:  



Tu veux dire que ca fait plusieurs requêtes ou que ca agis plus comme il faut?
T'as essayé en utilisant foreach ?
 
 
APrès lecture de l'aide de nexen, je penses que c'est :
$result=mysql_query("select id,titre,date,sender from base" );  
 
et en gardant dans le while la condition  
while ($obj=mysql_fetch_object($result))  
 
 
qu'il faut faire et t'as pas besoin de modifier le reste du code.
 
 
http://dev.nexen.net/docs/php/anno [...] object.php pour la doc de nexen relative à cette fonction avec un exemple simple.


Message édité par omega2 le 06-11-2002 à 15:21:20
n°240680
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 15:52:27  profilanswer
 

omega a ecrit  :
Et le jour ou t'auras à faire une recherche par mot clé, tu feras comment?  
Tu feras une recherche par niveau ou tu te débrouilleras diféremment?  
 
he bien oui je ferai une recherche par niveau...et ca revient au meme que de faire une recherche sur une table avec ton systeme, non ?
la difference c'est la recherche pourra s'effectué sur des tranches precise (index-post-reponse...etc ...)
ou par categorie....une categorie est archivé commme un post...et toute les post dans une categorire sont percue comme des reponses....
ex graphisme N0=1
programmation N0=2
recherche dans graphisme ....
select * from tableN1 when N0=1 and text=="mot clé"....(bon ok c'est simplifié a mort)

n°240685
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 15:54:59  profilanswer
 

ou alors tu fais une recherche sur plusieur table...(ou niveaux)
select * from tableN1, tableN2, tableN3 where N0=1(tjrs section graphisme) and text='mot clé'

mood
Publicité
Posté le 06-11-2002 à 15:54:59  profilanswer
 

n°240726
omega2
Posté le 06-11-2002 à 16:16:05  profilanswer
 

mrwiseman a écrit a écrit :

omega a ecrit  :
Et le jour ou t'auras à faire une recherche par mot clé, tu feras comment?  
Tu feras une recherche par niveau ou tu te débrouilleras diféremment?  
 
he bien oui je ferai une recherche par niveau...et ca revient au meme que de faire une recherche sur une table avec ton systeme, non ?
la difference c'est la recherche pourra s'effectué sur des tranches precise (index-post-reponse...etc ...)
ou par categorie....une categorie est archivé commme un post...et toute les post dans une categorire sont percue comme des reponses....
ex graphisme N0=1
programmation N0=2
recherche dans graphisme ....
select * from tableN1 when N0=1 and text=="mot clé"....(bon ok c'est simplifié a mort)



Avec mon système :
* recherche dans un niveau donné :
from reponse
where niveau = $n
 
* recherche entre deux niveau donnés :
from reponse
where niveau >= $n and niveau <= $n
 
* recherche dans une discution donnée :
from sujet,reponse
where chambreid = $n
and sujet.sujetid=reponse.sujetid
 
* recherche dans une branche d'une discution :
2 étape :
1) recherche du début de la branche suivante ou de la fin de la discution
2) recherche dans les réponses situé entre le début de la branche (message de départ inclus) et (selon le cas) le début de la branche suivante (non inclus) ou la fin de la discution (inclus en prenant comme position la position du dernier message dans l'ordre d'arborescence + 1)
from reponse
where position>=$position and position<$position
 
* recherche dans une catégorie :
from sujet, reponse where sujet.chambreid=$n
and sujet.sujetid=reponse.sujetid
 
Je vois pas ce que mon système peut faire de moins que le tiens.
Au pire, j'utilises 2 tables dans la recherche au lieu d'une. ;)
 
Bon, pour info, voilà la structure des tables titre et message de mon forum (les catégories sont gérés dans une autre table) :
# --------------------------------------------------------
 
#
# Structure de la table `beforum_sujet`
#
 
CREATE TABLE reponse (
  replyid int(10) unsigned NOT NULL auto_increment,
  sujetid int(10) unsigned NOT NULL default '0',
  reponseid smallint(5) unsigned NOT NULL default '0',
  replyid_pere int(10) unsigned default NULL,
  position smallint(5) default '0',
  niveau tinyint(4) default '0',
  userid int(10) unsigned NOT NULL default '0',
  texte text NOT NULL,
  STAMP datetime NOT NULL default '0000-00-00 00:00:00',
  IP varchar(15) NOT NULL default '0',
  censure tinyint(4) NOT NULL default '0',
  UNIQUE KEY replyid_2 (replyid),
  KEY replyid (replyid,sujetid,userid),
  KEY STAMP (STAMP),
  KEY censure (censure)
) TYPE=MyISAM;
# --------------------------------------------------------
 
#
# Structure de la table `beforum_sujet`
#
 
CREATE TABLE sujet (
  sujetid int(10) unsigned NOT NULL auto_increment,
  chambreid int(10) unsigned NOT NULL default '0',
  userid int(10) unsigned NOT NULL default '0',
  titre char(255) NOT NULL default '',
  icone mediumint(9) NOT NULL default '0',
  STAMP datetime NOT NULL default '0000-00-00 00:00:00',
  IP char(15) default NULL,
  STAMP_REP datetime NOT NULL default '0000-00-00 00:00:00',
  nbrep tinyint(4) NOT NULL default '0',
  censure tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (sujetid)
);

n°240735
omega2
Posté le 06-11-2002 à 16:28:05  profilanswer
 

mrwiseman a écrit a écrit :

ou alors tu fais une recherche sur plusieur table...(ou niveaux)
select * from tableN1, tableN2, tableN3 where N0=1(tjrs section graphisme) and text='mot clé'



Au fait quand tu fais ça, tu véras que ca te posera des problèmes. ;)
SQL n'aime pas avoir une ambiguité entre les colones de plusieurs tables.
Il faut alors lui précisé à quelle table appartient telle colone et ce aussi bien au niveau des conditions qu'au niveau des tabels retourné que dans le reste de la requête.
De plus si tu fais une recherche sur plusieurs table comme ça sans pouvoir lié les résultats d'une table avec ceux d'une autre, tu va te retrouver à récupérer énormément plus de réponse que ce que t'aurait du.
Par exemple avec trois tables, si t'as 10 réponses sur l'une, 15 sur la seconde et 5 sur la troisième, tu auras 750 ( 10*15*5 ) réponses réputé exacte au lieu de 30 réellement.
Bref, tu serais obligé de faire une requête pour chaque niveau ou t'as des réponses posible ou de lancer une requête composé de sous requêtes lié par des "UNION".

n°240743
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 16:34:15  profilanswer
 

omega a ecrit :
Je vois pas ce que mon système peut faire de moins que le tiens
 
houla , je n'est rien contre ton system...bien au contraire...et je ne sous-entend pas que le miens est meileur...
je trouve le mien peut etre plus facile a traité....mais c'est une question de gout.
perso je suis un peu con alors j'essaye de trouver le system le plus con...(minimum d'effort inside).
j'avance doucement dans le dev...(je me suis egaré sur les session hier soir :cry: )
 
pour la creation dynamique des tables :
 
 
$table_post= array ("N0"=>"INT INDEX","IDUSER"=>"TEXT","THREAD"=>"TEXT","POST"=>"TEXT","DATE"=>"DATETIME DEFAULT '0000-00-00 HH:MM:SS' NOT NULL PRIMARY KEY" );
$db="forum";
function creation_Ntable ($db,$niveaux,$table_post) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    $compteur_a=1;
    $count=$niveaux;
    $count++;
    while ($compteur_a<$count) {
        if (!$temp) $temp="N".$compteur_a." BIGINT INDEX";
        else $temp=$temp.",N".$compteur_a." BIGINT INDEX";
        $compteur_a++;
    }
    $requete_ini="CREATE TABLE POST".$niveaux."(";    //structure requete
        foreach ($def as $key=>$champ) {
            if (!$requete) $requete=$requete_ini." ".$key." ".$champ.",".$temp;
            else $requete=$requete.",".$key." ".$champ;
        }
        echo $requete=$requete." );";
    //mysql_db_query ($db,$requete);
    return ;
}
 
 
vu comme ça on peut dire que je programme comme un @*&, non ?

n°240752
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 16:40:10  profilanswer
 

hum tu as raison...je pensais utilisé des join et preciser tablen1.n1 tablen2.n0 ...enfin bref merci.... :hello:

n°240773
omega2
Posté le 06-11-2002 à 17:01:33  profilanswer
 

mrwiseman a écrit a écrit :

omega a ecrit :
Je vois pas ce que mon système peut faire de moins que le tiens
 
houla , je n'est rien contre ton system...bien au contraire...et je ne sous-entend pas que le miens est meileur...



Ben le truc, c'est qu'on m'a toujours appris à ne mettre dans une table qu'un seul type de donnée par colone.
Si dans une table t'as des données qui ont des significations totalement diférentes alors la base est mal conçus.(à l'IUT on a eu des courts de modèles relationels pour nous aprendre ça :lol: . Mais bon, ce n'est qu'une façon de voir)
Du coup, pour moi, le mélange des catégories et des réponses est mauvais. Mais bon, tant que ca fonctionne sans problème ... ;)
 
 

mrwiseman a écrit a écrit :

je trouve le mien peut etre plus facile a traité....mais c'est une question de gout.



Pour le plus facile à traité, je penses que le miens est moins simple à remplir (plus d'opérations à faire) mais il est ensuite plus facile d'y récupérer les infos qu'on veut (plus de donnée stocké dans la table message donc plus de critaire attacable directement)
Bref, je fais dans le long terme. (je me complique la vie au début de manière à moins galéré ensuite)
 

mrwiseman a écrit a écrit :

perso je suis un peu con alors j'essaye de trouver le system le plus con...(minimum d'effort inside).



Ben c'est là qu'on voit les chôses diféremment. Moi, je préfaire faire plus d'effort dès le début et être tranquille ensuite que l'inverse. C'est pas vraiment être plus ou moins con, c'est juste que ca fait longtemps que je bosses avec des bases de données alors je conais certain piège. Bon, on tombe tous un jour sur certain d'entre eux mais ça permet ensuite d'évolué de manière positive.
 

mrwiseman a écrit a écrit :

j'avance doucement dans le dev...(je me suis egaré sur les session hier soir :cry: )



C'est là que tout s'explique. Tu débutes alors que j'ai plus de 4 ans de programmations derrière mois (1 ans sur calculatrice casio ce qui m'a obligé à apprendre l'optimisation au niveau taille du source, suivit de 2 ans d'IUT ou j'ai appris certaines "règles" notemment au niveau organisation des données mais surtout j'y ai appris plusieurs langages ce qui me permet d'en aborder d'autre plus facilement et ça, c'est suivit de deux ans (jusqu'à maintenant) pendant lesquels j'ai bossé sur des progs utilisant de manière intensive des bases de données et ca fait quasiment un an que je fais du php+mysql pour mon site et là aussi j'ai appris certain trucs).
Bref, plus d'expérience et surtout un passé diférent ce qui me permet de voir certain problèmes diféremment et d'avoir pour certain point un vue à plus long terme.
Je veux pas dire que je suis meilleur que toi et que mes idées sont meilleure, c'est juste qu'on a pas du tout la même vision d'un même problème.
 

mrwiseman a écrit a écrit :

pour la creation dynamique des tables :
 
 
$table_post= array ("N0"=>"INT INDEX","IDUSER"=>"TEXT","THREAD"=>"TEXT","POST"=>"TEXT","DATE"=>"DATETIME DEFAULT '0000-00-00 HH:MM:SS' NOT NULL PRIMARY KEY" );
$db="forum";
function creation_Ntable ($db,$niveaux,$table_post) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    $compteur_a=1;
    $count=$niveaux;
    $count++;
    while ($compteur_a<$count) {
        if (!$temp) $temp="N".$compteur_a." BIGINT INDEX";
        else $temp=$temp.",N".$compteur_a." BIGINT INDEX";
        $compteur_a++;
    }
    $requete_ini="CREATE TABLE POST".$niveaux."(";    //structure requete
        foreach ($def as $key=>$champ) {
            if (!$requete) $requete=$requete_ini." ".$key." ".$champ.",".$temp;
            else $requete=$requete.",".$key." ".$champ;
        }
        echo $requete=$requete." );";
    //mysql_db_query ($db,$requete);
    return ;
}
 
 
vu comme ça on peut dire que je programme comme un @*&, non ?



Là, tu m'en bouche un coin, je penses pas que j'aurais réussi à écrire cette fonction là de manière aussi courte et bien conçus.
Faut dire, je suis une bille en objet.

n°240797
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 17:34:57  profilanswer
 

:pt1cable: merci pour le compliment omega.je n'ai que 4 mois de programmation (et qq base en basic BASIC:ATARI_ST POWA) et 3 jours de MySQL.
 
je ne sais pas si il y aura vraiment confusion entre les colonnes etant donné que chaque colonne correspond a une adresse dans la hierarchie...l'ensemble des colonnes Nn forme une adresse (imagine une adresse ip ou a chaque paquets de chiffre est stocké dans un champ a part...c'est un fonctionnemt par masque et qq soit le niveau de la table...N0 sera tjrs le numero dans l'index,N1 le numero dans le sous-index...et N2 le numero du post....
Le seul probleme sera une certain redondance des colonnes entre les table..
interet quand je remonte un reponse d'un cran hierarchique ca donne :
 
rep originel 5.12.40.1 (rep au 5eme index 12eme sous categorie 40eme post 1ere rep post)
devient
5.12.dernierpost+1 (rep au 5eme index 12eme sous categorie dernier post+1(nouveau post))
si il y a d'eventuelle reponse au poste deplacer...je creer une boucle qui les remontera tt vers 5.12.dernierpost+1.1(puis 2,3,etc...)
 
IL N Y A QU UNE SEULE COLONNE A CHANGER
je laisse en place l'adresse 5.12.40.1 et dans le thread je place (deplacer vers 5.12.dernierpost+1[genre lien])
en cas de supression du poste 4.11.5.1 je supprime :
 
delete * from tableN,tableN+1...(suivant le niveau de reponse autoriser) where N0=4 and N1=11 and N2=5 and N3=1
 
ca te parait faisable ?

n°240799
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 17:38:04  profilanswer
 

si ca t'interesse :
 
<?
 
//-------------------------Variables--------------
$MySQL_Host = "localhost";
$MySQL_User = "root";
$MySQL_Passw = "";
//-------------------------Structures-------------
$table_post= array ("N0"=>"INT","IDUSER"=>"TEXT","THREAD"=>"TEXT","POST"=>"TEXT","DATE"=>"DATETIME DEFAULT '0000-00-00 HH:MM:SS' NOT NULL PRIMARY KEY" );
$struct_post= array ("N0"=>"","IDUSER"=>"","THREAD"=>"","POST"=>"","DATE"=>"" );
$table_image= array ("IDIMAGE"=>"BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY","IDUSER"=>"INT","TAILLEPOID"=>"TEXT","HIT"=>"INT","DATE"=>"DATETIME","COMMENTAIRE"=>"TEXT","TYPE"=>"VARCHAR(3)" );
$struct_image= array ("IDIMAGE"=>"","IDUSER"=>"","TAILLEPOID"=>"","HIT"=>"","DATE"=>"","COMMENTAIRE"=>"","TYPE"=>"" );
$table_users= array ("IDUSER"=>"INT AUTO_INCREMENT NOT NULL PRIMARY KEY","LOGIN"=>"VARCHAR(12)","PASSWORD"=>"VARCHAR(12)","MESSAGES"=>"TINYINT" );
$struct_users= array ("IDUSER"=>"","LOGIN"=>"","PASSWORD"=>"","MESSAGES"=>"" );
$table_profiles= array ("IDUSER"=>"INT AUTO_INCREMENT NOT NULL PRIMARY KEY" );
$struct_profiles= array ("IDUSER"=>"" );
//-------------------------Fonctions--------------
 
function connection () {
    GLOBAL $MySQL_Host, $MySQL_User, $MySQL_Passw;//variables de connection
    $sql=mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw" ); //conection bd
    return $sql; // confirmation
}
 
function creation_base ($db) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    mysql_create_db($db,$sql);     //creation base
    return ;
}
 
function creation_table ($db,$table,$def) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    $requete_ini="CREATE TABLE ".$table."(";    //structure requete
        foreach ($def as $key=>$champ) {
            if (!$requete) $requete=$requete_ini." ".$key." ".$champ;
            else $requete=$requete.",".$key." ".$champ;
        }
        echo $requete=$requete." );";
    mysql_db_query ($db,$requete);
    return ;
}
 
function creation_Ntable ($db,$niveaux,$def) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    $compteur_a=1;
    $count=$niveaux;
    $count++;
    while ($compteur_a<$count) {
        if (!$temp) $temp="N".$compteur_a." BIGINT";
        else $temp=$temp.",N".$compteur_a." BIGINT";
        $compteur_a++;
    }
    $requete_ini="CREATE TABLE POST".$niveaux."(";    //structure requete
        foreach ($def as $key=>$champ) {
            if (!$requete) $requete=$requete_ini." ".$key." ".$champ.",".$temp;
            else $requete=$requete.",".$key." ".$champ;
        }
        echo $requete=$requete." );";
    //mysql_db_query ($db,$requete);
    return ;
}
 
function insert_replace ($ini_requete,$db,$table,$def) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    $compteur_a=0;
    while ($compteur_a<count($def)) {
        $detail=$def[$compteur_a];
        foreach ($detail as $key=>$champ) {
            $champ="'".$champ."'";
            if (!$req_id) $req_id=$ini_requete.$key;
            else $req_id=$req_id.", ".$key ;
            if (!$req_valeur) $req_valeur=$champ;
            else $req_valeur=$req_valeur.", ".$champ ;
 
        }
        $requete=$req_id." ) VALUES (".$req_valeur." );";
        mysql_db_query ($db,$requete);
        unset ($req_id);
        unset ($req_valeur);
        $compteur_a++;
    }
    return ;
}
 
function insertion ($db,$table,$def) {
    $ini_requete="INSERT INTO ".$table." ( ";   //structure requete
    insert_replace ($ini_requete,$db,$table,$def);
    return ;
}
 
function remplace ($db,$table,$def) {
    $ini_requete="REPLACE INTO ".$table." ( ";   //structure requete
    insert_replace ($ini_requete,$db,$table,$def);
    return ;
}
 
 
function requete ($db,$table,$def) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    $requete_ini="SELECT ";
    $requete_where="WHERE";       //structure requete
    if (is_array($def)) {          //mode assisté
        foreach ($def as $key=>$champ) {
            if (!$requete) $requete=$requete_ini." ".$key;
            else $requete=$requete.",".$key;
            if ($champ!=="" and $where) $where=$where." AND ".$key."="."'".$champ."'";
            if ($champ!=="" and !$where) $where=$key."="."'".$champ."'";
 
        }
        if ($where) $where=" ".$requete_where." ".$where.";";
        $requete=$requete." FROM ".$table.$where;  //structure requete
    }
    if (is_string($def)) $requete=$def;
    $requete;            //mode manuel
    $result_req=mysql_db_query ($db,$requete);  //requete
    $nbre_req=mysql_num_rows ($result_req);
    if ($nbre_req==0) return $result="aucune reponse";
    //----------------analyse requete-------------------//
    while ($compteur_a<$nbre_req) {
        mysql_data_seek ($result_req,$compteur_a);
        $detail=mysql_fetch_array ($result_req,MYSQL_ASSOC);
        foreach ($detail as $key=>$champ) {
            $result[$compteur_a][$key]=$champ;
        }
        $compteur_a++;
    }
    return $result;
}
 
 
 
function supprime ($db,$table,$def) {
    GLOBAL $sql;
    if (!$sql) $sql=connection (); //connection par defaut
    $requete_ini="DELETE ";//structure requete
    if (is_array($def)) {          //mode assisté
        foreach ($def as $key=>$champ) {
            if ($champ!=="" and $where) $where=$where." AND ".$key."="."'".$champ."'";
            if ($champ!=="" and !$where) $where=$key."="."'".$champ."'";
        }
        if ($where) $where=" WHERE ".$where.";";
        $requete=$requete_ini." FROM ".$table.$where;  //structure requete
    }
    if (is_string($def)) $requete=$def;         //mode manuel
    $result_req=mysql_db_query ($db,$requete);  //requete
    return $result;
}
 
?>
 
 
je n'ai pas eu le temps d'automatiser la supression comme je l'ai fait pour la creation.

n°240802
mrwiseman
SOS, windows ne plante pas...?
Posté le 06-11-2002 à 17:43:57  profilanswer
 

j'ai normailser mes sortie de requete et en traitement ca donne :
 
function tableaux ($result) {
    unset ($compteur_a);
    if (is_string($result)) {
        echo $result;
        die();
    }
    echo "<table>";
    while ($compteur_a<count($result)) {
        $detail=$result[$compteur_a];
        echo "<tr>";
        if (!$key) {
            foreach ($detail as $key=>$champ) {
                echo "<td>".$key."</td>";
            }
            echo "</tr><tr>";
        }
        foreach ($detail as $key=>$champ) {
            echo "<td>".$champ."</td>";
        }
        $compteur_a++;
        echo "</tr>";
    }
    echo "</table>";
    return ;
}
 
 
function formulaire ($def,$destination,$source) {
    echo $DATE=date ("Y-m-d H:i:s" );
    echo '<form action="'.$destination.'" method=post><br>';
    foreach ($def as $key=>$champ) {
        if (ereg("ID",$key)) echo '<input type="hidden" name="'.$key.'" value=""><br>';
        else if (ereg("MESSAGE",$key)) echo '<input type="hidden" name="'.$key.'" value=""><br>';
        else if ($key=="DATE" ) echo '<input type="hidden" name="'.$key.'" value="'.$DATE.'"><br>';
        else echo $key.': <input type="text" name="'.$key.'"><br>';
    }
    echo '<input type="hidden" name="source" value="'.$source.'"><br>';
    echo '<input type="submit" value="ok">';
    echo "</form>";
    return;
}

n°240824
omega2
Posté le 06-11-2002 à 18:06:15  profilanswer
 

mrwiseman a écrit a écrit :

 :pt1cable: merci pour le compliment omega.je n'ai que 4 mois de programmation (et qq base en basic BASIC:ATARI_ST POWA) et 3 jours de MySQL.
 
je ne sais pas si il y aura vraiment confusion entre les colonnes etant donné que chaque colonne correspond a une adresse dans la hierarchie...l'ensemble des colonnes Nn forme une adresse (imagine une adresse ip ou a chaque paquets de chiffre est stocké dans un champ a part...c'est un fonctionnemt par masque et qq soit le niveau de la table...N0 sera tjrs le numero dans l'index,N1 le numero dans le sous-index...et N2 le numero du post....
Le seul probleme sera une certain redondance des colonnes entre les table..
interet quand je remonte un reponse d'un cran hierarchique ca donne :
 
rep originel 5.12.40.1 (rep au 5eme index 12eme sous categorie 40eme post 1ere rep post)
devient
5.12.dernierpost+1 (rep au 5eme index 12eme sous categorie dernier post+1(nouveau post))
si il y a d'eventuelle reponse au poste deplacer...je creer une boucle qui les remontera tt vers 5.12.dernierpost+1.1(puis 2,3,etc...)
 
IL N Y A QU UNE SEULE COLONNE A CHANGER
je laisse en place l'adresse 5.12.40.1 et dans le thread je place (deplacer vers 5.12.dernierpost+1[genre lien])
en cas de supression du poste 4.11.5.1 je supprime :
 
delete * from tableN,tableN+1...(suivant le niveau de reponse autoriser) where N0=4 and N1=11 and N2=5 and N3=1
 
ca te parait faisable ?
 



Je parle pas de confusion entre les colones mais de confusion entre les diférentes sections du forum et les messages.
Mais c'est vrai qu'en y réfléchissant, je viens de réaliser qu'en fait, ils se trouvent pas dans la même table, il y a juste une grosse similitude entre les tables des messages et celle des sections.
Bref j'étais en erreur sur ce point. ;)
 
 
EDIT : J'oublier de répondre au reste du message.
Pour changer le niveau d'une réponse, si j'ai bien compris ton organisation, t'es obligé de créer une nouvelle réponse dans le nouveau niveau qui contient toutes les données de la réponse de départ et de suprimé l'ancienne réponse (changement de table de stockage).
Un delete, tu ne peux le faire que sur une seule table à la fois et la structure de la requête est fausse. (DELETE FROM table WHERE ... à la place de DELETE * FROM table WHERE) Si tu veux, j'ai une doc d'SQL au boulot qui pèse 470 ko (47 pages une fois le document ouvert) au format pdf. Comme ça tu te l'imprimes et t'auras ce qu'il faut dans ce domaine là pour bien faire tes requêtes et pas partir dans des trucs impossible à faire.  
Sinon, c'est faisable. :)


Message édité par omega2 le 06-11-2002 à 18:13:42
n°240832
omega2
Posté le 06-11-2002 à 18:22:37  profilanswer
 

De mon côté, pour gérer la base de donnée, j'ai :
 
// concetion à la base de donnée, les variables $locale_bd,$locale_user,$locale_code sont contenus dans un fichier à part
function db_connect()
{  
  global $db;
  global $service;
  global $service_general;
  global $bd_lkid;
  global $locale_bd;
  global $locale_user;
  global $locale_code;
 
  initialiseinfobd();
  $service="bechat_";
  $service_general="general_";
  $succ=mysql_connect($locale_bd,$locale_user,$locale_code);
  $bd_lkid=$succ;
  return $succ;
}
 
// pour exécuter une requête donée en paramêtre, (ne pas utilisé pour une supression ou une mise à jour ou une insertion)
//la variable globale $sql_err contient un état témoin de l'exécution de la requête, (une erreur, pas d'erreur mais aucune donnée récupérer, pas d'erreur et des données récupérées)
//la fonction retourne le résultat de la requête
function LanceRequete($sql)
{ global $db;
  global $sql_err;
  global $nb_req_lance;
 
  $nb_req_lance=$nb_req_lance+1;
//  echo "requete numero : ".$nb_req_lance." : ".$sql."<BR>";
 
  if ($res=send_sql($db,$sql))
  { if (mysql_num_rows($res)==0)
    { $sql_err=1;
    } else
    { $sql_err=0;
    }
  } else
  { $sql_err=2;
  }
//echo $sql_err;
  return $res;
}
 
 
 
 
// pour exécuter une requête (normalement d'insertion, de supression ou de mise à jour) donée en paramêtre,
//la variable globale $sql_err contient un état témoin de l'exécution de la requête, (pas d'erreur, une erreur)
//la fonction retourne le résultat de la requête (normalement rien)
function LanceRequete_insert($sql)
{ global $db;
  global $sql_err;
  global $nb_req_lance;
 
  $nb_req_lance=$nb_req_lance+1;
//  echo "requete numero : ".$nb_req_lance." : ".$sql."<BR>";
 
  if ($res=send_sql($db,$sql))
  { $sql_err=0;
  } else
  { $sql_err=2;
  }
//echo $sql_err;
  return $res;
}
 
 
 
Bon a côté, j'ai les requêtes elles mêmes dispersées dans divert fichiers. (un fichier générique + un fichier par module)

n°240932
KillerOnEa​rth
Posté le 06-11-2002 à 22:12:22  profilanswer
 

omega2 a écrit a écrit :

Tu veux dire que ca fait plusieurs requêtes ou que ca agis plus comme il faut?
T'as essayé en utilisant foreach ?
 
 
APrès lecture de l'aide de nexen, je penses que c'est :
$result=mysql_query("select id,titre,date,sender from base" );  
 
et en gardant dans le while la condition  
while ($obj=mysql_fetch_object($result))  
 
 
qu'il faut faire et t'as pas besoin de modifier le reste du code.
 
 
http://dev.nexen.net/docs/php/anno [...] object.php pour la doc de nexen relative à cette fonction avec un exemple simple.




 
Merci. ça va bien alléger mon script !

n°241291
mrwiseman
SOS, windows ne plante pas...?
Posté le 07-11-2002 à 15:21:15  profilanswer
 

oui une doc sql ca peut m'interesser...
bon je pense que ce we j'aurais codé le + gros...i hope

n°241308
omega2
Posté le 07-11-2002 à 15:36:03  profilanswer
 

mrwiseman a écrit a écrit :

oui une doc sql ca peut m'interesser...
bon je pense que ce we j'aurais codé le + gros...i hope



Bon, faudra me dire a quelle adresse je te l'envoie.
Par contre, c'est une doc faite a base de scan (c'est pas moi qui l'ai faite) et on a beaucoup de mal à la lire à l'écran car tout et écrit à la verticale (c'est chiant ça par contre).

n°241331
mrwiseman
SOS, windows ne plante pas...?
Posté le 07-11-2002 à 16:05:30  profilanswer
 

he bien je l'imprimerai au taff...tu peux me l'envoyer a :
vincent.voillot@wanadoo.fr
 
merci

n°241377
omega2
Posté le 07-11-2002 à 17:00:41  profilanswer
 

mrwiseman a écrit a écrit :

he bien je l'imprimerai au taff...tu peux me l'envoyer a :
vincent.voillot@wanadoo.fr
 
merci



Ca aprt dès ce soir, je sais pas pourquoi, j'arrive pas à rattacher des fichiers sous hotmail et comme je suis pas autorisé à divulgué mon adresse email pour autre chôse que le boulot, je le ferais depuis chez moi.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
connection a une base MySQL avec vb .NET !![C] Help !! pb avec fonctions
VB et recherche base de donnée est-ce possible?[PHP] Probleme avec les fonctions
session et cookie pour un forum[access] inserer une image dans une base
transfert de data d'un fichier csv dans une base de données mysqlQuestion de nioubi sur le forum PPC : affichage du code des smileys
[newby] oracle/sql : connaitre les table d'une base[ASP] petite question accès base acces?
Plus de sujets relatifs à : structure d'une base de donnés sql pour un forum et fonctions innovant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR