ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 18 mars 2007 - 14 h 54 m 29 s |
|
|
Hello
Je souhaite creer un livre d'or. Pour ça pas de souci, j'utilise une DB + formulaire.
Ce que je voudrais, c'est permettre a l'admin du site de valider les données a afficher. En gros, il se connecte sur une interface admin, il voit les messages en attente, et peut valider ceux qu'il veut afficher sur son site et ceux qu'il veut supprimer.
Comment faire cela avec dreamweaver ?
Merci pour votre aide
|
|
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 616 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 18 mars 2007 - 15 h 51 m 52 s |
|
|
Une solution simple que je vois (DreamWeaver ou non), c'est d'ajouter à une entrée du livre d'or un champ binaire qui dit si elle est validée ou non. Et pourquoi pas, transformer le champ binaire en enum et ajouter la possibilité de marquer une entrée comme refusée.
Dans le livre d'or, tu n'affiches que les entrées acceptées, et dans le formulaire admin, tu affiches une liste des entrées non validées, et une case à cochée pour chacune pour savoir si elle est validée ou non. Ou alors une liste ou des boutons radio qui permet aussi de refuser.
|
|
| |
Huile de fraise.
|
ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 18 mars 2007 - 18 h 56 m 15 s |
|
|
je saisi le principe mais c'est au niveau du code que je vais bloquer...
|
|
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 616 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 19 mars 2007 - 02 h 13 m 07 s |
|
|
Qu'est-ce qui te manque ? Le HTML, ou le PHP et le SQL ? Ou les deux ?
|
|
| |
Huile de fraise.
|
ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 19 mars 2007 - 18 h 31 m 58 s |
|
|
en fait plutot la méthodologie et le php.
En fait je ne sais pas très bien comment m'organiser...
dis moi si je me trompe :
Je suis capable d'ajouter a ma base de donnée un champs boléen avec un true ou un false.
tout les messages stockés dans la base sont false par defaut
Sur l'interface admin, j'affiche tout les messages.
Pour chaque message, je fais des cases a cocher qui modifie dans la base l'état true ou false. (l'admin met en true ceux qu'il veut voir paraitre sur son site)
Enfin, le site n'affiche que les true
c'est ça ?
Si c'est le cas, je vais coincer un peu pour faire mon interface "true/false" pour l'admin.
Car en fait, ça revient a modifier un entrée existente dans la DB et pas a en faire une nouvelle.
En plus avec cette méthode la DB s'encrasse de pleins de message non publiés...
J'ai bon dans mon raisonnement ?
|
|
| |
|
EM.Bzzz
Messages : 60 Inscrit le 04/01/07
Non connecté
|
|
Posté le 19 mars 2007 - 18 h 50 m 22 s |
|
|
Bonjour,
Le 19 mars 2007 - 18 h 31, ze.bassman a écrit :
en fait plutot la méthodologie et le php.
Je suis capable d'ajouter a ma base de donnée un champs boléen avec un true ou un false.
tout les messages stockés dans la base sont false par defaut |
La suggestion de passer par un numérique au lieu de booléen est bonne : tu pourras gérer plus de cas (mais si pas besoin tout de suite)
| Sur l'interface admin, j'affiche tout les messages. |
Oui
| Pour chaque message, je fais des cases a cocher qui modifie dans la base l'état true ou false. (l'admin met en true ceux qu'il veut voir paraitre sur son site) |
Tout bon
| Enfin, le site n'affiche que les true |
Nickel
Si c'est le cas, je vais coincer un peu pour faire mon interface "true/false" pour l'admin.
Car en fait, ça revient a modifier un entrée existente dans la DB et pas a en faire une nouvelle. |
Pas de pb : pour l'afficher tu auras récuperé la clé correspondante.
Au click sur la checkbox (true/false) tu n'as qu'à lancer une requete style "update la_table set status='1' where cle=ta_cle_recuperee_lors_de_l_affichage;"
Avec Ajax, tu peux même le faire en live (sans rechargement de la page) ...
| En plus avec cette méthode la DB s'encrasse de pleins de message non publiés... |
Faut prévoir une page pour l'admin : "Vider les messages non validés", dans laquelle il choisit une date au-delà de laquelle les message seront supprimés
A+
|
|
| |
Message édité 1 fois, la dernière par EM.Bzzz le 19 mars 2007 - 18 h 52. |
| |
|
ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 20 mars 2007 - 20 h 11 m 57 s |
|
|
merci pour votre aide précieuse.
Comment parametrer dans ma base de donnée mon champ "boleen" ?
C'est quoi ? un ENUM avec 2 valeurs : "1" et "2", avec par exemple "1" par défaut lors de la saisie initiale ?
J'ai bon ?
|
|
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 616 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 20 mars 2007 - 23 h 57 m 44 s |
|
|
En fait, le booléen n'existe pas en tant que tel, ça revient à un entier. L'avantage de l'ENUM, c'est que c'est un ensemble donné et validé de valeurs chaîne. Donc tu peux avoir "valide" et "refuse", ou "1" et "2", ou "cake aux olives", "42" et "false". À toi de voir.
Donc dans le fond, oui, tu as bon, en autant que tu te souviennes ce que 1 et 2 signifient. Moi, je verrais plutôt, pour commencer, 0 comme non validé et 1 comme validé.
|
|
| |
Huile de fraise.
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 018 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
Posté le 21 mars 2007 - 09 h 20 m 00 s |
|
|
L'avantage de mettre 0 en non validé, et 1 en validé, c'est que dans le code php, tu pourra avoir du code plus explicite comme par exemple :
la variable $est_valide contient la valeur de ce champ.
if (!$est_valide) alors n'est pas valide.
enfin quelque chose dans le genre.
|
|
| |
Totalement inutile, donc completement indispensable 
|
EM.Bzzz
Messages : 60 Inscrit le 04/01/07
Non connecté
|
|
Posté le 21 mars 2007 - 09 h 46 m 51 s |
|
|
Le 21 mars 2007 - 09 h 20, Woofy a écrit :
L'avantage de mettre 0 en non validé, et 1 en validé, c'est que dans le code php, tu pourra avoir du code plus explicite comme par exemple :
la variable $est_valide contient la valeur de ce champ.
if (!$est_valide) alors n'est pas valide. |
+1
De même en Javascript (où 0=false, autre=true) ...
La signification, et donc l'utilisation, devenant la même qqsoit le langage, tu t'apercevras que c'est tout de suite beaucoup + pratique
|
|
| |
|
ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 21 mars 2007 - 23 h 15 m 13 s |
|
|
Bien compris.
Encore une question que je ne sais pas régler tt seul :
sur ma page de listing des entrées de la base de donnée, j'ai paramétré un maximun de visualistation simultanées de 4 entrées (histoire de na pas avoir une page de 8 milliard de pixels de haut une fois que la base de données sera bien remplie).
Le souci, c'est que les autres entrées ne sonr pas visible...
J'aimerai avoir en bas de ma page des numéros (ou un système "page suivante / page précédente" pour pouvoir lire toutes les entrées de la base.
comment procéder ?
Encore merci
|
|
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 616 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 22 mars 2007 - 04 h 13 m 13 s |
|
|
Tu peux utiliser le "paramètre" LIMIT a, b dans ta requête, a et b étant l'ordre minimum et maximum des enregistrements que tu veux afficher.
Pour afficher les 4 premiers, c'est LIMIT 1, 4
Pour les 4 suivants, LIMIT 5, 8
Mais je ne sais plus où il se met, je te remets dans les mains de Woofy pour ça... Ou dans la doc de MySQL.
|
|
| |
Huile de fraise.
|
Woofy
Pour les bons tuyaux me demander
Messages : 26 018 Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
|
|
Posté le 22 mars 2007 - 08 h 49 m 47 s |
|
|
A la fin de ta requête SELECT.
Genre SELECT * FROM table WHERE conditions LIMIT a,b
|
|
| |
Totalement inutile, donc completement indispensable 
|
ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 22 mars 2007 - 11 h 16 m 42 s |
|
|
cool, ça marche !!! (c'est fou comme on devient efficace quand on est bien entouré !!!)
Voila ou j'en suis :
page d'affichage finale : OK
formulaire d'envoi des messages : probleme : saisis deux fois le meme entrée dxans la base de donnée !!!!
interface admin de validation des messages. J'arrive a obtenir une liste de toutes les entrées de la base, avec leur état. (0 ou 1), mais si je change l'état, ça supprime carrément la valeur de l'entrée ! elle n'est plus 0 ni 1, elle n'a plus de valeur....
Savez vous d'ou peuvent venir ces soucis ?
|
|
| |
Message édité 2 fois, la dernière par ze.bassman le 22 mars 2007 - 20 h 17. |
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 616 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 23 mars 2007 - 00 h 40 m 34 s |
|
|
pour le 2. euh... tu fais deux INSERTs ?
pour le 3. euh... tu t'es planté dans ton UPDATE ? Fais-nous donc voir tout ça !
|
|
| |
Huile de fraise.
|
ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 23 mars 2007 - 14 h 44 m 42 s |
|
|
Le probleme 2 est réglé...
Reste le 3 !!!
Je pense qu'il est possible que le formulaire fasse mal son job. Je pense qu'il ne modifie aucune valeur...
mais je ne sais pas résoudre le probleme.
Voici ma page
<?php require_once('Connections/RSlivredor.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
$updateSQL = sprintf("UPDATE livredor SET affichage=%s WHERE ID=%s",
GetSQLValueString($_POST['ID'], "text"),
GetSQLValueString($_POST['ID'], "int"));
mysql_select_db($database_RSlivredor, $RSlivredor);
$Result1 = mysql_query($updateSQL, $RSlivredor) or die(mysql_error());
$updateGoTo = "/gestionLivreDor03.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}
mysql_select_db($database_RSlivredor, $RSlivredor);
$query_RStoto = "SELECT * FROM livredor ORDER BY ID DESC";
$RStoto = mysql_query($query_RStoto, $RSlivredor) or die(mysql_error());
$row_RStoto = mysql_fetch_assoc($RStoto);
$totalRows_RStoto = mysql_num_rows($RStoto);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>
<body>
<?php do { ?>
<form id="form1" name="form1" method="POST" action="<?php echo $editFormAction; ?>">
<table width="527" border="0" cellpadding="0" cellspacing="0">
<!--DWLayoutTable-->
<tr>
<td width="90" height="41" valign="top"><?php echo $row_RStoto['pseudo']; ?></td>
<td width="163" valign="top"><?php echo $row_RStoto['message']; ?></td>
<td width="135" valign="top"><p>
<input <?php if (!(strcmp($row_RStoto['affichage'],"1"))) {echo "checked=\"checked\"";} ?> type="radio" name="etat" value="1" />
oui</p>
<p>
<input <?php if (!(strcmp($row_RStoto['affichage'],"2"))) {echo "checked=\"checked\"";} ?> type="radio" name="etat" value="2" />
non</p></td>
<td width="139" valign="top"><label for="Submit">ok</label>
<input name="ID" type="hidden" id="ID" value="<?php echo $row_RStoto['affichage']; ?>" />
<input type="submit" name="Submit" value="Envoyer" id="Submit" /></td>
</tr>
</table>
<input type="hidden" name="MM_update" value="form1">
</form>
<?php } while ($row_RStoto = mysql_fetch_assoc($RStoto)); ?><p> </p>
<p> </p>
</body>
</html>
<?php
mysql_free_result($RStoto);
?> |
|
|
| |
Message édité 1 fois, la dernière par ze.bassman le 23 mars 2007 - 14 h 53. |
| |
|
coin_coin_38
Messages : 127 Inscrit le 08/12/03
Ville : grenoble(ville)
Non connecté
|
|
Posté le 23 mars 2007 - 15 h 20 m 51 s |
|
|
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
$updateSQL = sprintf("UPDATE livredor SET affichage=%s WHERE ID=%s",
GetSQLValueString($_POST['ID'], "text"),
GetSQLValueString($_POST['ID'], "int"));
%s va prendre une valeur int pour identifier l'id mais pourquoi tu met affichage a set valeur ?
moir je ferai ca :
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
$updateSQL = sprintf("UPDATE livredor SET affichage=1 HERE ID=%s",
GetSQLValueString($_POST['ID'], "text"),
GetSQLValueString($_POST['ID'], "int"));
si tu veut pas l'affiché tu SET affichage=0
voila essaye ca
|
|
| |
coinnnnnnnnnnnnnnnnnn
|
coin_coin_38
Messages : 127 Inscrit le 08/12/03
Ville : grenoble(ville)
Non connecté
|
|
Posté le 23 mars 2007 - 15 h 26 m 29 s |
|
|
j'ai pas l'habitude d'une syntaxe comme la tienne mais si affichage est en boolean (true / false) dans ton formulaire il faudrai metre en valer true = 1 et false = 0
<input <?php if (!(strcmp($row_RStoto['affichage'],"1"))) {echo "checked=\"checked\"";} ?> type="radio" name="etat" value="1" />
oui</p>
<p>
<input <?php if (!(strcmp($row_RStoto['affichage'],"2"))) {echo "checked=\"checked\"";} ?> type="radio" name="etat" value="0" />
non</p></td>
je suis pas un expert je laisse les autres confirmer !
|
|
| |
coinnnnnnnnnnnnnnnnnn
|
ze.bassman
Messages : 781 Inscrit le 14/10/02
Ville : grenoble
Non connecté
|
|
Posté le 23 mars 2007 - 18 h 04 m 02 s |
|
|
en fait dans ma base de donnée, il y a un champ colonne "affichage" qui est de type enum avec deux valeurs (1 et 2) (je mettrais 0 et 1 a la fin pour respecter les conseils des posts ci dessus...)
Je veux que la page me liste ttes les entrées de la base avec leur valeurs "affichage" qui apparaissent dans des boutons radio (1 ou 2)
Ensuite, je veux que pour chaque ligne, je puisse modifier pour chaque entrée de la base l'état "affichage" 1 ou 2 (pour mémoire, cet état détermine si l'entrée est publiée sur un autre page ou pas)
je sais pas si je suis clair ?
en tt cas, je vaisqq essayer ta méthode et je te tiens au jus
EDIT : j'ai essayé avec ta méthode, mais il semble que cela ne passe pas. mes formulaires ne changent pas la valeur "affichage" de 1 en 2 dans la database...
super merci pour ton aide
|
|
| |
Message édité 2 fois, la dernière par ze.bassman le 23 mars 2007 - 18 h 35. |
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 616 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 24 mars 2007 - 18 h 25 m 38 s |
|
|
Il y a deux trucs qui ne vont pas a mon avis.
Soit tu ne fais qu'un seul formulaire, et chaque message est affiché sur une nouvelle ligne, et tu utilises des tableaux de contrôles.
Soit tu en fais un par message, mais alors le "name" doit être différent pour chacun. Sinon, ça ne va pas aller. Enfin je crois.
Ensuite, je reviens a l'idée de mettre 3 états:
1. message non traité
2. message accepté
3. message refusé
Comme ça, tu n'affiches dans l'interface d'administration que les messages non traités.
Chaque message non traité est donc affiché avec son radio. Comme ça, tu peux accepter, refuser ou laisser non traité chaque message.
Bien sûr, le livre d'or n'affiche que les "accepté".
Je ne peux pas te faire de code HTML ou PHP là maintenant parce que ça fait longtemps que je n'en ai pas pondu et j'ai faim
Je ne sais pas si je me fais bien comprendre...
Note au passagele bon usage veut qu'on sépare si possible la logique de l'affichage, à savoir que le code PHP de gestion des messages devrait avoir son propre script qui redirige ensuite vers la page d'affichage, ou une méthode équivalente.
edit:
ah, oui, il ne faut pas mettre les boutons radio dans des groupes de contrôles pour que ça marche bien ?
|
|
| |
Message édité 1 fois, la dernière par Petit_PimoOosE le 24 mars 2007 - 18 h 27. |
| |
Huile de fraise.
|