LupusMic

  • Signature
    Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
  • Site web
  • Nombre de sujets
    26
  • Nombre de messages
    1 684
  • Nombre de commentaires
    4
  • Nombre de news
    Aucune
  • Niveau en PHP
    Gourou

Ses derniers messages sur les forums

LupusMic
le 04/07/2008 à 22:58
Probleme de SQl
Pour pouvoir t'aider, il faut :
- les create des tables en jeu
- le but de la requête
- le message d'erreur

Bon, ici il y a tellement d'erreurs que ce n'est pas la peine de nous donner le message d'erreur, ça ne servira à rien.
Je te conseille de reprendre à zéro, en lisant un cours sur SQL. Et surtout, fais des requêtes simples. Ce n'est pas la peine de t'embarquer dans des jointures si tu ne comprends pas la syntaxe de base d'une requête SQL.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 04/07/2008 à 10:28
visualiser ma bd
À cette étape, le plus simple est fait. Maintenant, on va s'attaquer au schéma de base de données.
Le schéma que tu as fait n'est pas bon. La raison est simple : le nombre d'enfants d'un nœud est arbitraire. On dit que la cardinalité du lien parent-enfant est 1-n. Alors qu'au contraire, un enfant ne peut avoir qu'un parent ou aucun, ce qui fait que la carinalité du lien enfant-parent est de 1-1?. On aurait alors quelque chose dans ce goût là :

create table indicateur
( id integer auto_increment
, label varchar(100) not null
, indice integer
, parent_id integer

, primary key (id)
, foreign key (parent_id) references indicateur (id)
) engine='InnoDB' ;


Ainsi tu insérerais les données comme suit :

insert into table indicateur (label, indice)
values ('environnemnt', 1)
, ('industrie', 2)
;

insert into table indicateur (label, indice, parent_id)
values ('foret', 1, (select id from indicateur where indice = 1))
;

insert into table indicateur (label, indice, parent_id)
values ('arbre', 1
, (select id from indicateur where label = 'foret'))
;


Une fois que tu as fait tout ça, tu peux commencer à réfléchir aux requêtes de consultation de la table, d'en utiliser les résultats pour décorer ton arbre de Noël, puis d'afficher l'arbre.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 04/07/2008 à 09:55
visualiser ma bd
Dans un premier temps, tu vas me faire le plaisir d'installer un correcteur orthographique, et de te relire avant de valider tes futurs messages :)

Générer l'indicateur dans ton script PHP plutôt que de laisser la base le faire automatiquement, c'est s'assurer que tes identifiant entrerons en collision un jour.

integer est un type de choix pour représenter un nombre entier. varchar, c'est bien pour les chaînes de caractères, dans lesquelles il y a autre chose que des chiffres.

Ce que tu veux faire, c'est aplatir un arbre dans une base de données. C'est pénible à faire, ce n'est pas ce qu'il y a de plus facile pour aborder le développement. Mais bon, c'est pas insurmontable. Alors je vais te conseiller la démarche suivante :

Développes un modèle PHP permettant la représentation d'un arbre. Tu peux implémenter une l'interface suivante :
<?php
interface iNode
{
function __construct($precious, $parent=null, $childs=null) ;
function set_parent(iNode $new_parent) ;
function append_child(iNode $new_child) ;

/** Permet d'attacher quelque chose au nœud.
*/
function set_burden($precious) ;
}

class node implements iNode
{
public $parent ;
public $childs ;

public $precious ;

/* l'impementation que tu auras choisi */
}

// Exemple d'utilisation :

$doc = new node(null) ;
$section = $doc->append_child(new node('1')) ;
$section->append_child(new node('1')) ;
$section->append_child(new node('2')) ;
$soussection = $section->append_child(new node('3')) ;

$soussection->append_child(new node('1')) ;
$soussection->append_child(new node('2')) ;

?>


La gestion d'un arbre dont les nœuds transportent un nombre est bien sûr un exemple. Tu peux très bien imaginer remplacer les nombres par un objet qui représentes un indicateur.

Maintenant que tu as ton arbre, modélises les précieux fruits qu'il transporte, à savoir tes indicateurs.

Ceci fait, écrit le code qui permet de traduire un arbre chargé de fruits en sa représentation visuelle.

La suite à mon prochain poste ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 02/07/2008 à 20:37
checkbox, SQL et boucle
(krma) Quand un mot de passe est compromis, on le change ;)

Pour en revenir au fond, je te proposes une solution plus simple. Parce qu'en fait, tu compliques tout pour rien (et je m'y connais ;) ).

Simplification :
<?php
if (isset($_POST['image']))
{

$images = implode(';', $_POST['image']) ;

$base2 = mysql_connect ('***', '***', '***');
mysql_select_db ('***', $base2) ;

$sql_tpl = "INSERT INTO 2008_test VALUES ('','%s','%s','%s','%s','%s','%s','%s')" ;
$sql = sql_build($sql_tpl, array($type ,$status, $home, $titre, $url, $texte, $images)) ;

mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
}

function sql_build($sql_fmt, $args)
{
$escaped_args = array() ;

foreach($args as $value)
$escaped_args = mysql_escape_string($value) ;

$sql = call_user_func_array('sprintf'
, array_merge(array($sql_fmt), $escaped_args)) ;

return $sql ;
}


?>
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 29/06/2008 à 15:21
Problème d'accent
(Willy54) addslashes est à proscrire. Ça ne protèges rien du tout, en te donnant un sentiment de sécurité.

Pour entrer des données dans ta base MySQL, il faut effectivement utiliser mysql_escape_string ou mysql_real_escape_string, sur les données soumises. Et uniquement quand elle ne sont pas sûres (c'est inutile d'échapper une chaîne constante que tu sais ne contenir aucun caractère spécial).

Et ensuite, à l'affichage, si tu fais une application Web et que tu jette les données dans un document HTML, il faut que tu échappe un certain nombre de caractères. Tu peux le faire avec htmlspecialchars.

Et n'oublie pas qu'il ne faut jamais avoir confiance en ce qui provient de l'extérieur. Tout ce qui provient des tableaux superglobaux, de la base de données ou de fichiers doit être sécurisé, en sachant comment le sécuriser. Sinon tu risque d'aggraver le problème. C'est par exemple le cas avec addslashes et stripslashes.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 25/06/2008 à 06:00
Trier un tableau HTML en javascript.
Tu as regardé mon script pour voir si ça t'aurais convenu ?

Et pour information, j'y ai consacré 20h de travail.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 25/06/2008 à 01:45
relancer une connexion mysql
Ce que tu peux faire, c'est modifier ta classe de gestion de la base de donnée pour en faire une version fainéante.

Par exemple :
<?php
class db
{
public $host ;
public $user ;
public $password ;
public $space ;
public $port ;
public $socket ;


protected $con ; // object that binds database

public function __construct($uri)
{
$params = $this->parse($uri) ;

$this->host = $param['host'] ;
/* transfert des paramètres du tableau vers l'objet
*/
$this->socket = $param['socket'] ;
}

public function query($sql)
{
$this->lazy_con() ;
$this->con->query($sql) ;
}

protected function lazy_con()
{
if($this->con)
{
//réactive la connection si elle est perdue
if(!$this->con->ping())
throw new exception($this->con->error) ;
}
else
$this->con = mysqli
( $this->host
, $this->username
, $this->password
, $this->space
, $this->port
, $this->socket) ;

if($this->con->connect_errno)
throw new exception($this->con->error) ;
}

public function parse($uri)
{
// transformation de l'uri en paramètres
return $params ;
}
}
?>
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 24/06/2008 à 00:37
Trier un tableau HTML en javascript.
C'est vrai que, étonnamment, je ne suis pas le plus lourd. Il y a bien un plugin pour jQuery, mais il fait 20 jo, jquery non-compris. Mais j'avoue qu'il a quelques fonctionnalités en plus.

Enfin bref, mon grand challenge ça va être de gérer les colspan et rowspan. Ça ne va pas être de la tarte (échange de cellules entre lignes, recherche de la valeur de la cellule virtuelle, etc.).

Mais bon ça m'amuse bien :)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 22/06/2008 à 01:19
Limiter une chaine de caracteres
Tu as aussi une autre solution, qui consiste à utiliser des la propriété CSS max-width avec un pseudosélecteur :after. Mais ça ne marche qu'avec des navigateurs corrects :)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LoadingChargement en cours