osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> SESSION Utilisateur
Ariochs
posté 25 Feb 2009, 11:18
Message #1


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 9
Inscrit : 2-February 09
Membre no 24409



Bonjour.

J'ignore un peu si je post au mauvaise endroit, mais j'ai un petit probleme par rapport a mon code que je veux mettre sur osC.

Donc voila, j'ai ajouté un autre systeme de vote au produit, ou chaque utilisateur ne peux voter qu'une fois (different de celui proposé aux produits).

Du coup dans mon code j'ai a un moment :

$id_user = $_SESSION['cle'];

Seul probleme, dans osC la session de l'utilisateur ce nomme pas comme ca.. Que dois-je mettre a la place de mon $_SESSION['cle']; ??

Merci de votre aide.
Go to the top of the page
 
lnsou
posté 25 Feb 2009, 11:56
Message #2


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 65
Inscrit : 28-October 08
Membre no 23524



Pour savoir ce que contient ta variable $_SESSION, fait un

Code
print_r($_SESSION);


tu aura alors un tableau avec tout ce que la variable contient, et t'y trouvera le nom qui contient l'id du client wink.gif
Go to the top of the page
 
Ariochs
posté 25 Feb 2009, 14:01
Message #3


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 9
Inscrit : 2-February 09
Membre no 24409



Merci de ton aide.

J'ai donc eu a un moment [customer_id] => 4 du coup j'ai remplacé mon
Citation
$id_user = $_SESSION['cle'];
par
Citation
$id_user = $_SESSION['customer_id'];


Seul probleme.. quand j'enregistre le vote, mon vote ne ce prend pas en compte, et ma session d'utilisateur ce ferme/detruit vu que je dois me reconnecter apres..

Sur mon autre code (ou y'avaus SESSION['cle']) sa marchait parfectement.

Aurais tu encore une idée ? S'il te plait. (ou me suis je trompé sur ma modification ?)

Ce message a été modifié par Ariochs - 25 Feb 2009, 14:02.
Go to the top of the page
 
shoprun
posté 25 Feb 2009, 16:37
Message #4


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Salut

A un moment discuter ne suffit plus, du moins à mon sens, il faut du code pour au moins constater où est ton erreur, et surtout mieux comprendre comment tu as goupillé tout ça.

Toujours est il que le principe est le même partout en général.
Tu dois avoir un formulaire, ( <form>...</form> ), et dans ce formulaire, soit des boutons radio, soit des cases à cochées, etc ... peu importe, et un bouton submit pour valider le choix.

Et bien la perte de session est surement dû à la création de la balise d'ouverture du formulaire, tu n'utilise peut être pas la fonction tep_draw_form() et surtout la fonction tep_href_link(), c'est cette dernière qui permet de conserver la session tout au long de la navigation.
Le plus simple c'est de prendre exemple sur des code existants, mais y mettre ton code c'est pas plus mal non plus.

Mais rien ne dit que tu as opté à la création d'un formulaire, faut ton code là encore, mais ça peut très bien être fait par de simple liens ... mais là encore la fonction tep_href_link() s'impose pour la même raison que ci-dessus.

A savoir que osC prévois effectivement une gestion de session, mais tout le contenu de la session ($_SESSION) est dispo sous forme de variables de session, ce qui veut dire que l'ID du client peut être récupéré par la variable : $customer_id
Mais si c'est la valeur de la session que tu veux, c'est la fonction tep_session_id() qui permet de la récupérée.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
Ariochs
posté 25 Feb 2009, 16:49
Message #5


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 9
Inscrit : 2-February 09
Membre no 24409



Effectivement je ne me suis pas servi de "tep_draw_form() et tep_href_link()". Pour etre franc j'ignore a quoi elles servent..

J'ai opté pour mon code, car je veux apprendre a me servir de osC mais aussi le codage (j'ai quelque notions, mais je suis pas un pro, j'en apprend un peu plus a chaque fois que j'essai de faire des trucs sur osC).

Donc je vais vous poster mon code, peux etre vous pourrez me dire ce qui va ou pas..

Bon alors, j'ai fais exactement ce qui etait expliquer pour l'ajout d'une nouvelle page. J'ai juste rajouté un peu de code au debut (du php), et ensuite sur la partie central mon code. Voici donc les deux parties :

Citation
<?php

require('includes/application_top.php');

require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_VOTE_IMAGE);

$breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_VOTE_IMAGE));

// ======AJOUT DU CODE ========
if (!empty($_POST))
{
$vote = $_POST['vote'];
$num_photo = $_POST['num_photo'];
$id_user = $_SESSION['customer_id'];

/*echo '<pre>';
print_r($_POST);
echo '</pre>';*/

$sql = "INSERT INTO customers_pictures (customers_id, id_pictures, note) VALUES ('$id_user','$num_photo','$vote')";
mysql_query($sql) or die(mysql_error()." <br>$sql");
}
?>


et celle au milieu

Citation
<td class="main">Image 01 :
<?php
$sql = "SELECT url, description, createur FROM pictures WHERE id_pictures=1";
$enreg = mysql_query($sql);
while($result = mysql_fetch_array($enreg)){
echo "<img src='./admin/".$result['url']."' alt='".$result['description']."' width='385' height='69' /><br />";
echo "By : ".$result['createur']."";
}
?>
<br/>
<form action="#" method="POST" enctype="multipart/form-data">
<select name="vote">
<option value="0">-</option>
<option value="1">0</option>
<option value="2">1</option>
<option value="3">2</option>
<option value="4">3</option>
<option value="5">4</option>
<option value="6">5</option>
</select>
<input type="submit" name="ok" value="Envoyer" />
<input type = "hidden" name="num_photo" value = "1" />
</form>



Pour ce qui est des tables, vous me direz qu'elles n'existent pas, mais si je l'ai est bien ajouté a la BDD.
Go to the top of the page
 
shoprun
posté 25 Feb 2009, 17:17
Message #6


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Ok ... si tu compte coder, faire évoluer ton osC, je te conseille d'apprendre petit à petit les fonctions que osC te mets à disposition, tu as beaucoup à gagner à les apprendre blush.gif

Les 1ères fonction à apprendre à mon sens sont celles concernant la BDD, donc d'abandonner le plus rapidement possible les fonctions natives de Php sur ce point.
C'est loin d'être compliqué, car ce sont quasi les mêmes : (dans includes/functions/database.php)
tep_db_query() pour mysql_query()
tep_fetch_array() pour mysql_fetch_array()
etc ... pas bien compliqué, non ?

La dessus, pour la création du formulaire : (dans includes/functions/hrml_output.php)
il y a la fonction tep_draw_form()

Code
<?php
echo tep_draw_form('vote', tep_href_link(FILENAME_VOTE_IMAGE, '', 'SSL'), 'post', 'enctype="multipart/form-data"');
echo '<br />';
//
$select_array[] = array('id' => 0, 'text' => '-');
$select_array[] = array('id' => 1, 'text' => 0);
$select_array[] = array('id' => 2, 'text' => 1);
$select_array[] = array('id' => 3, 'text' => 2);
$select_array[] = array('id' => 4, 'text' => 3);
$select_array[] = array('id' => 5, 'text' => 4);
//
echo tep_draw_pull_down_menu('vote', $select_array);
echo '<br />';
echo tep_image_submit('button_continue.gif', 'envoyer');
echo tep_draw_hidden_field('id_pictures', '1');
echo '<br />';
?>


Pour récupérer les données :
Code
if (!empty($_POST) && !empty($_POST['id_pictures'])) {
    $vote = tep_db_prepare_input($_POST['vote']);
    $id_pictures = tep_db_prepare_input($_POST['id_pictures']);
    //ne sert à rien : $id_user = $_SESSION['customer_id'];
    tep_db_query("INSERT INTO customers_pictures (customers_id, id_pictures, vote) VALUES ('".(int)$customer_id."', '".(int)$id_pictures."', '".(int)$vote."')");
}


En gros, voilà la même chose mais en exploitant les fonctions de osC.
Pas du tout tester ...


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
Ariochs
posté 26 Feb 2009, 16:29
Message #7


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 9
Inscrit : 2-February 09
Membre no 24409



Bonjour.

Je tenais a vous remercier pour votre aide. Maintenant tout fonctionne parfaitement (apres quelques petits changement, il y avait des erreurs sur les noms de table dans le code, mais pas improtant, vite corrigé).

Tu me conseil d'apprendre les fonctions que osC me mets a dispotistion, il y a un endroit ou elle ce trouve avec les explications ?

Vu que je debute en php tout n'est pas facile.. J'aimerai bien apprendre en meme temps ce qu'on la POO, mais j'ai pas assé de temps.. Il est clair que j'ai beaucoup a apprendre encore.

Sinon par rapport au code que tu m'as mis j'aurai une question (oui c'est bien d'avoir le code, mais le comprendre serait mieux..).
Tu me dis que mon $id_user = $_SESSION['customer_id']; ne sert a rien.

J'aimerai savoir ce qui le remplace, et vu que l'enregistrement de mon code dans la BDD marche, savoir comment il fait pour connaitre quel utilisateurs est connecté.

J'ai vu qu'il y a (int)$customer_id dans VALUES, mais on defini jamais $customer_id. Donc comment il connait sa valeur ? Et que veux dire le (int) avant ?

En esperant que tu auras le temps de repondre.

Merci encore.
Go to the top of the page
 
shoprun
posté 26 Feb 2009, 20:43
Message #8


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Sorry pour les petites erreurs ... ça été fait directement ici, vite fait et sans faire d'essai confused.gif

Citation (Ariochs)
J'ai vu qu'il y a (int)$customer_id dans VALUES, mais on defini jamais $customer_id. Donc comment il connait sa valeur ? Et que veux dire le (int) avant ?
Si, le $customer_id est créé lorsqu'un client s'identifie et lorsqu'un compte client est créé. Voir dans le login.php et create_account.php.
Exemple :
Code
$customer_id = $check_customer['customers_id']; // On initialise la variable
...
tep_session_register('customer_id'); // On crée une variable de session nommée customer_id.



Aussi, la partie de code qui permet d'exploiter chaque variable de session (donc sans utiliser la syntaxe $_SESSION) se passe dans le includes/application_top.php :
Code
  if ( ($session_started == true) && (PHP_VERSION >= 4.3) && function_exists('ini_get') && (ini_get('register_globals') == false) ) {
    extract($_SESSION, EXTR_OVERWRITE+EXTR_REFS);
  }
Ici, on extrait la totalité du tableau superglobal $_SESSION, et on créé des variables.
C'est donc pour cela qu'on peu directement utiliser $customer_id, etc ...
Je dirais que c'est une spécificité de osC, qui, faut le dire, n'est plus d'actualité. Mais cela reste néanmoins la méthode à appliquer.
Ce point sera corrigé dans la futur version MS3 (heuuuu ... faut espérer blush.gif ) -> C'est une parenthèse.


Pour apprendre osC à mon sens, c'est de parcourir chaque répertoire, et chaque fichiers un par un, et d'en comprendre déjà l'organisation de tout ça. Rien n'est fait au hasard, il y a une logique à comprendre, à apprendre. Elle me parait assez simple, et logique, donc loin d'être insurmontable.
T'expliquer tout ça n'est pas possible, imagine un instant que tous les membres le demande, on s'en sortirait plus, c'est trop long, tout simplement.
Puis j'estime que c'est un travail que chaque osCien doit faire soit même, c'est bien plus efficace comme apprentissage, on apprend bien mieux en cherchant soit même.
Apparemment tu as déjà des pré-requis, alors tout devrait bien se passer, c'est juste une question de temps.
OsCommerce n'est pas une usine à gaz, en tout cas pas d'origine, il y a bien plus compliqué que ça comme Soft.
C'est à la portée de beaucoup de personnes, voir à tous, tout est une question de motivation à mon sens.

La POO reste néanmoins une façon de programmer assez particulière, et petit à petit ça sera à mon sens la plus largement répandue, mais on y est pas encore.
Cette méthode me parais assez complexe, mais ça dépend du contexte quand même.
A mon sens ça ne devine pas pas, je pense vraiment que sans bouquin(s) ça risque d'être difficile à apprivoiser.
Il est incontestable que la POO apporte un réel plus dans un développement, je dirais même que cela devient indispensable, car les besoins sont de plus en plus pointus, exigeant, donc souvent complexes.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
Ariochs
posté 10 Mar 2009, 16:14
Message #9


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 9
Inscrit : 2-February 09
Membre no 24409



Bon en faite je reviens a la charge.

Il s'avère qu'en faite il y a une erreur.. Et malheureusement apres 2 jours, je n'arrive toujours pas a la résoudre..
N'étant pas très malin (faut bien le croire), j'ai fait tout mes test sur la meme image, ce qui fait que je n'avais pas remarquer l'erreur..

Donc voila le probleme. Sur les 4 images, quand je vote pour la 4eme tout ce passe bien, mais ce que j'avais pas vu c'est si je vote pour l'image 1, 2 ou 3 sa ne fonctionne pas..

Explication : Je met un 3 a l'image 4 sa va donner : l'id de l'user / l'id de l'image (4 dans cet exemple) et la note (3 dans cet exemple).
Je vote pour l'image 2 avec une note de 3, j'ai donc : l'id de l'user / l'id de l'image 4 (d'ou le probleme) et la note (2 dans cet exemple).

En gros tout les votes sont pour l'images 4. Sauf que que si je clique sur envoyer de l'iamge 1,2 ou 3 il prend la valeur qu'il y a pour l'image 4 (zero par default..)

(partie b) Apres plusieurs modification, j'ai réussi a faire un truc ou mes votes ce prennent bien en compte selon l'image, seul probleme c'est que si je vote pour l'image 3 et que je donne un 2 en note, il va mettre 2 a l'image 3 mais zero a toutes les autres.. En gros en une fois je vote pour toutes les images..

Je met le code de la 1ere partie du probleme, car celui de la partie B est plus galere, je pense pas qu'il aidera mieux.. Mais si vous le voulez je le posterai aussi.


Code
if (!empty($_POST) && !empty($_POST['id_pictures'])) {
         $vote = tep_db_prepare_input($_POST['vote']);
         $id_pictures = tep_db_prepare_input($_POST['id_pictures']);
         tep_db_query("INSERT INTO pictures_customers (customers_id, id_pictures, note) VALUES ('".(int)$customer_id."', '".(int)$id_pictures."', '".(int)$vote."')");
}


et (j'ai un peu retrecie, pas mis le code pour l'image 3 et 4)

Code
<td class="main">Image 01 :
             <?php
                 echo $erreur;
                 $sql = "SELECT url FROM pictures WHERE id_pictures=1";
                 $enreg = mysql_query($sql);
                 while($result = mysql_fetch_array($enreg)){
                     echo "<img src='./admin/".$result['url']."' alt='".$result['description']."' width='385' height='69' />
";
                 }
                 echo tep_draw_form('vote', tep_href_link(FILENAME_VOTE_IMAGE, '', 'SSL'), 'post', 'enctype="multipart/form-data"');
                 echo '
';
                 //
                 $select_array[] = array('id' => 0, 'text' => '-');
                 $select_array[] = array('id' => 1, 'text' => 1);
                 $select_array[] = array('id' => 2, 'text' => 2);
                 $select_array[] = array('id' => 3, 'text' => 3);
                 $select_array[] = array('id' => 4, 'text' => 4);
                 //
                 echo tep_draw_pull_down_menu('vote', $select_array);
                 echo '
';
                 echo tep_image_submit('button_continue.gif', 'envoyer');
                 echo tep_draw_hidden_field('id_pictures', '1');
                 echo '
';
             ?>
        

              <hr/>
            
             Image 02 :
             <?php
                 $sql = "SELECT url FROM pictures WHERE id_pictures=2";
                 $enreg = mysql_query($sql);
                 while($result = mysql_fetch_array($enreg)){
                     echo "<img src='./admin/".$result['url']."' alt='".$result['description']."' width='385' height='69' />
";
                 }
                 echo tep_draw_form('vote', tep_href_link(FILENAME_VOTE_IMAGE, '', 'SSL'), 'post', 'enctype="multipart/form-data"');
                 echo '
';
                 //
                 $select_array1[] = array('id' => 0, 'text' => '-');
                 $select_array1[] = array('id' => 1, 'text' => 1);
                 $select_array1[] = array('id' => 2, 'text' => 2);
                 $select_array1[] = array('id' => 3, 'text' => 3);
                 $select_array1[] = array('id' => 4, 'text' => 4);
                 //
                 echo tep_draw_pull_down_menu('vote', $select_array1);
                 echo '
';
                 echo tep_image_submit('button_continue.gif', 'envoyer');
                 echo tep_draw_hidden_field('id_pictures', '2');
                 echo '
';
             ?>
            
            <hr/>



Merci encore pour votre aide.

Ariochs ptit boulet en php
Go to the top of the page
 
shoprun
posté 10 Mar 2009, 19:45
Message #10


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Je pense qu'il manque la fermeture de la balise </form> au niveau de chaque formulaire :
Code
... code etc ...
echo tep_image_submit('button_continue.gif', 'envoyer');
echo tep_draw_hidden_field('id_pictures', '1');
echo '</form>'; // Fermeture du formulaire (id_pictures -> 1)
?>
<hr />


Tu utilise toujours les fonctions native de MySQL, soit mysql_query() ... mysql_fectch_array().
Remplace cela respectivement par : tep_db_query() ... tep_db_fetch_array()

Un de ces 4 ça va te jouer un sale tour, ça va être la croix et la bannière de déduire que le problème viendrait de là.
En utilisant les fonctions de osC, l'identifiant unique ($link) accordé à chaque connexion de la BDD est correctement suivi.
A l'inverse, c'est un peu l'inconnue. Théoriquement oui, mais sera t'il toujours le cas ? pas sûr ...


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
Ariochs
posté 12 Mar 2009, 10:46
Message #11


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 9
Inscrit : 2-February 09
Membre no 24409



Merci pour ton aide.

En fait c'etait vraiment tout bete.

J'avais bien remarqué que mon formulaire ce fermé a aucun moment, mais je voyais pas comment le fermer.. Vu qu'on l'ouvre avec tep_draw_form je me disais que peux etre il ce fermé automatiquement dès qu'il aurait rencontré un nouveau tep_draw_form, ou alors qu'il fallait un /tep_draw_form quelque part lol. (moui bon ok je suis nul..)

En tout cas merci pour ton aide.
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 28th March 2024 - 19:57
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)