Un dernier truc tu entend quoi par : "j'utilise plutot un int unsigned"

il s'agit d'une option de mysql et non quelque chose de normé, donc à ne pas utiliser si tu compte changer de sgbd un jour
Tous les types entiers ont un attribut optionnel (non-standard) UNSIGNED (non-signé, en fran¸ais). Les valeurs non-signées peuvent être utilisées pour n'autoriser que des valeurs positives dans une colonne, ou bien pour exploiter un intervalle de validité plus haut.
....
Lorsque MySQL doit stocker une valeur qui est hors de l'intervalle de validité d'une colonne, il ramène la valeur à la plus proche possible, et stocke cette valeur. Par exemple, l'intervalle de validité d'une colonne d'entiers INT va de -2147483648 à 2147483647. Si vous essayez d'insérer -9999999999 dans une colonne de ce type, la valeur sera ramenée à la plus proche possible, c'est à dire -2147483648. De même, si vous essayez d'insérer 9999999999, 2147483647 sera stocké à la place.
Si la colonne INT possède l'attribut UNSIGNED, l'intervalle de validité est aussi large, mais les valeurs extrêmes se décalent vers 0 et 4294967295. Si vous essayez de stocker -9999999999 et 9999999999 dans cette colonne, vous obtiendrez respectivement 0 et 4294967296.
Taille des entiers
Type Octets De A
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807
Plus d'infos =>
http://dev.mysql.com/doc/refman/5.0/fr/ ... types.html
Pour la 1ère question SQL :
- alter est la commande sql qui permet de modifier quelque chose. dans ce cas précis il s'agit d'une table (alter table) et de la tablejeux_desc (ALTER TABLE jeux_desc)
- le ADD indique que l'on ajoute une quelque chose

, dans notre cas il s'agit d'une contrainte (constraint) avec un nom (FK_xxxx)
- FOREIGN KEY : cette contrainte sera dite de clef étrangère O_o : késako ? c'est simplement une référence à une autre table (dans la table jeux_desc l'on fait référence aux tables : support, classification, type et developpeur). c'est une contrainte de clef, parce qu'elle s'effectue sur les clef primaire. simplement parce que la clef primaire est l'élément unique permettant de trouver un tuple (pas de confusion possible). donc lorsque dans la tabel jeux_desc j'utilise l'idtype cette contrainte
impose l'idtype que l'on essai d'utiliser existe dans la table type.
ce mécanisme permet de s'assurer de la cohérence de la base de données (que tu n'ai pas un type indiqué dans la table jeux alors qu'il n'existe pas en vrai

).
Les 4 lignes que tu indique permette d'ajouter les contrainte de clef étrangère aux tables créer avant.
Il est aussi possible de créer ces contraintes dans la déclaration de la table (create table) mais cela impose un ordre dans la création des tables (tu ne fait pas référence à une table qui n'existe pas). donc c'est plus pratique d'utiliser un ordre alter.
Attention si tu dois utiliser mon script tu va perdre les données existante dans la table jeux_desc que tu a déjà. si tu veux le conserver il faut modifier la table, créer les 4 tables en plus et ensuite créer les 4 contraintes de tables,
seulement lorsque les données de la table jeux_desc seront corrects (c'est a dire que les clef étrangère seront renseignées et existante dans les autes tables

).
plus d'info sur
L'intégrité référentielle
sans oublier la base sur les contraintes
http://sqlpro.developpez.com/cours/sqlaz/ddl/#L7.3
Bonh j'imagine que apres niveau php se serra bien plus complexe ensuite avec ce systeme mais tant mieux j'apprendrai *o*
Pas forcément

Mais par contre c'est la que l'on entrevois l'utilité de la POO (programmation orientée objet) mais c'est un autre débat
donc au lieu d'un select en dur tu va faire (par exemple pour le type)
<?php
// je te laisse faire la connexion au sgbd tu sais faire
$sql = 'select * from type';
$ret = mysql_query($sql);
if ($ret === false)
echo '<p class="alert_error">Erreur SQL : <br />' . mysql_error () . '</p>';
else {
echo '<select name="type">'."\n";
while($data = mysql_fetch_assoc($ret)) {
echo '<option value="'.$data['idType'].'">'.$data['nomtype'].'</option>'."\n";
}
mysql_free_result($ret);
echo '</select>';
}
?>
idem pour les autres.
tu passe les clef primaire avec le value="", la nom ou la description c'est juste pour que l'utilisateur s'y retrouve mais la base de données elle n'utilise que les clefs.
Un dernier truc-bis : le champ " commentaire" a vrai dire ne me servira pas tant que ca je l'ai ajoutée juste au cas ou mais je prefere l'enlever ... sa prend de la place pour rien ;D
c'est juste une remarque, suivant ton cahier des charges ce champs peu être cohérent
la fonction up_error doit être déclarée
avant tous cela (dans un autre fichier que tu inclus par exemple). et tu l'utilise de la même façon que la fonction verifieTypeMime (), avec un if et tout, a la ligne du dessous et le code qui suis sera utilisé seulement si la fonction retourne true dans l'index zéro du tableau qu'elle retroune.
en gros
<?php
$v = up_error($_FILES['image']['error'], 'le nom du champ file');
if ($v[0] === true) {
// le code de copie, de redimensionnement et d'insertion dans la db
}
else {
// à bah non boulette echo $v[1];
}
?>
si tu veux que ton code soit plus lisible, je te conseil de créer des fonctions pour la génération des select histoire de pas avoir des pâtés de code partout. une fonction générique qui prend en paramètre le nom du select et un table de donnée avec des index précis, comme $data['value'] et $data['label'] par exemple. il te faut aussi prévoir de normaliser ou les requete ou les données, les requêtes c'est le plus simple. pour cela utilise un alias sur les colonnes (as)
par exemple
select idType as value, nomtype as label from type;
un mysl_fetch_assoc pour avoir les résultat et tu passe la chose à la fonction (attention, soit tu passe un jeux de résultat, doit tu passe un tableau et la tu est "universel").
@+
edit : j'allais oublier : bonne lecture

[quote="toto69"]Un dernier truc tu entend quoi par : "j'utilise plutot un int unsigned" :)[/quote]
il s'agit d'une option de mysql et non quelque chose de normé, donc à ne pas utiliser si tu compte changer de sgbd un jour ;)
[quote]
Tous les types entiers ont un attribut optionnel (non-standard) UNSIGNED (non-signé, en fran¸ais). Les valeurs non-signées peuvent être utilisées pour n'autoriser que des valeurs positives dans une colonne, ou bien pour exploiter un intervalle de validité plus haut.
....
Lorsque MySQL doit stocker une valeur qui est hors de l'intervalle de validité d'une colonne, il ramène la valeur à la plus proche possible, et stocke cette valeur. Par exemple, l'intervalle de validité d'une colonne d'entiers INT va de -2147483648 à 2147483647. Si vous essayez d'insérer -9999999999 dans une colonne de ce type, la valeur sera ramenée à la plus proche possible, c'est à dire -2147483648. De même, si vous essayez d'insérer 9999999999, 2147483647 sera stocké à la place.
[b]Si la colonne INT possède l'attribut UNSIGNED, l'intervalle de validité est aussi large, mais les valeurs extrêmes se décalent vers 0 et 4294967295.[/b] Si vous essayez de stocker -9999999999 et 9999999999 dans cette colonne, vous obtiendrez respectivement 0 et 4294967296.
[/quote]
Taille des entiers
Type Octets De A
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807
Plus d'infos => [url]http://dev.mysql.com/doc/refman/5.0/fr/numeric-types.html[/url]
Pour la 1ère question SQL :
- alter est la commande sql qui permet de modifier quelque chose. dans ce cas précis il s'agit d'une table (alter table) et de la tablejeux_desc (ALTER TABLE jeux_desc)
- le ADD indique que l'on ajoute une quelque chose :), dans notre cas il s'agit d'une contrainte (constraint) avec un nom (FK_xxxx)
- FOREIGN KEY : cette contrainte sera dite de clef étrangère O_o : késako ? c'est simplement une référence à une autre table (dans la table jeux_desc l'on fait référence aux tables : support, classification, type et developpeur). c'est une contrainte de clef, parce qu'elle s'effectue sur les clef primaire. simplement parce que la clef primaire est l'élément unique permettant de trouver un tuple (pas de confusion possible). donc lorsque dans la tabel jeux_desc j'utilise l'idtype cette contrainte [b]impose[/b] l'idtype que l'on essai d'utiliser existe dans la table type.
ce mécanisme permet de s'assurer de la cohérence de la base de données (que tu n'ai pas un type indiqué dans la table jeux alors qu'il n'existe pas en vrai :)).
Les 4 lignes que tu indique permette d'ajouter les contrainte de clef étrangère aux tables créer avant.
Il est aussi possible de créer ces contraintes dans la déclaration de la table (create table) mais cela impose un ordre dans la création des tables (tu ne fait pas référence à une table qui n'existe pas). donc c'est plus pratique d'utiliser un ordre alter.
Attention si tu dois utiliser mon script tu va perdre les données existante dans la table jeux_desc que tu a déjà. si tu veux le conserver il faut modifier la table, créer les 4 tables en plus et ensuite créer les 4 contraintes de tables, [b]seulement[/b] lorsque les données de la table jeux_desc seront corrects (c'est a dire que les clef étrangère seront renseignées et existante dans les autes tables :) ).
plus d'info sur [url=http://sqlpro.developpez.com/cours/sqlaz/techniques/#L2]L'intégrité référentielle[/url]
sans oublier la base sur les contraintes [url]http://sqlpro.developpez.com/cours/sqlaz/ddl/#L7.3[/url]
[quote="toto69"]Bonh j'imagine que apres niveau php se serra bien plus complexe ensuite avec ce systeme mais tant mieux j'apprendrai *o*[/quote]
Pas forcément :)
Mais par contre c'est la que l'on entrevois l'utilité de la POO (programmation orientée objet) mais c'est un autre débat :)
donc au lieu d'un select en dur tu va faire (par exemple pour le type)
[php]
<?php
// je te laisse faire la connexion au sgbd tu sais faire
$sql = 'select * from type';
$ret = mysql_query($sql);
if ($ret === false)
echo '<p class="alert_error">Erreur SQL : <br />' . mysql_error () . '</p>';
else {
echo '<select name="type">'."\n";
while($data = mysql_fetch_assoc($ret)) {
echo '<option value="'.$data['idType'].'">'.$data['nomtype'].'</option>'."\n";
}
mysql_free_result($ret);
echo '</select>';
}
?>[/php]
idem pour les autres.
tu passe les clef primaire avec le value="", la nom ou la description c'est juste pour que l'utilisateur s'y retrouve mais la base de données elle n'utilise que les clefs.
[quote="toto69"]Un dernier truc-bis : le champ " commentaire" a vrai dire ne me servira pas tant que ca je l'ai ajoutée juste au cas ou mais je prefere l'enlever ... sa prend de la place pour rien ;D[/quote]
c'est juste une remarque, suivant ton cahier des charges ce champs peu être cohérent ;)
la fonction up_error doit être déclarée [b]avant[/b] tous cela (dans un autre fichier que tu inclus par exemple). et tu l'utilise de la même façon que la fonction verifieTypeMime (), avec un if et tout, a la ligne du dessous et le code qui suis sera utilisé seulement si la fonction retourne true dans l'index zéro du tableau qu'elle retroune.
en gros
[php]
<?php
$v = up_error($_FILES['image']['error'], 'le nom du champ file');
if ($v[0] === true) {
// le code de copie, de redimensionnement et d'insertion dans la db
}
else {
// à bah non boulette echo $v[1];
}
?>[/php]
si tu veux que ton code soit plus lisible, je te conseil de créer des fonctions pour la génération des select histoire de pas avoir des pâtés de code partout. une fonction générique qui prend en paramètre le nom du select et un table de donnée avec des index précis, comme $data['value'] et $data['label'] par exemple. il te faut aussi prévoir de normaliser ou les requete ou les données, les requêtes c'est le plus simple. pour cela utilise un alias sur les colonnes (as)
par exemple[sql] select idType as value, nomtype as label from type;[/sql]
un mysl_fetch_assoc pour avoir les résultat et tu passe la chose à la fonction (attention, soit tu passe un jeux de résultat, doit tu passe un tableau et la tu est "universel").
@+
edit : j'allais oublier : bonne lecture :mrgreen: :mrgreen: :mrgreen: :mrgreen: