76

(27 réponses, dans Programmation)

merci pour la redirection !

77

(27 réponses, dans Programmation)

Bonjour
Le code fonctionne sans donner d'erreur en local mais sur l'hébergeur ça donne l'erreur suivante :

Warning: session_start()[function.session-start]:Cannot send session cache limiter – headers already sent (output started at/var……………. ajoutarticle.php:2) in/var…………….session.php on line 2

Fichier ajoutarticle contient au début :

<?php
include("../member/session.php");
require("../member/prise.php");
   $sql = "select idclient from client where nom = '".$_SESSION['nom']."'";

Fichier session.php contient au début  :

<?php
    session_start();     /// erreur ligne 2 ////
    if(isset($_SESSION['timeout']))

Pouvez vous m'expliquer ou me dire ce que je dois faire ?
Merci pour votre aide.

78

(27 réponses, dans Programmation)

Bonjour NooD

Ca ne marché pas, erreur à la ligne 5

<?php
    session_start();

    if(isset($_SESSION['timeout'])
    {                        /// erreur ligne 5 ///
         $current = time();

         // si timeout est stocké en session sous un format d'unix timestamp
         $diff = $current - $_SESSION['timeout'];

         // session expirée, on peut la détruire complètement ou partiellement
         if ($diff > (10*60)) {   // 10 minutes
         // session expirée

         }
    }

    // session ok et on met a jour la valeur de $_SESSION['timeout']
    $_SESSION['timeout'] = time();
    ?>

Il manqué le " ) " en fin de      if(isset($_SESSION['timeout'])

En fait j'ai regardé le 1er code de toad et le tient.
Déduction j'ai fait ceci et apparemment ça marche,

<?php
    session_start();

    if(isset($_SESSION['timeout']))
    {
         $current = time();

         // si timeout est stocké en session sous un format d'unix timestamp
         $diff = $current - $_SESSION['timeout'];

         // session expirée, on peut la détruire complètement ou partiellement
         if ($diff > (10*60)) {   // 10 minutes
         // session expirée
         }
    }
else {

    // session ok et on met a jour la valeur de $_SESSION['timeout']
    $_SESSION['timeout'] = time();
}
?>

en fait j'ai ajouté le " else"
apparamment ça marche mais pourrez tu me dire si mon ajout de " else " est bon. Bref si tout mon code est bon ?

Merci à vous deux pour votre aide

79

(27 réponses, dans Programmation)

Bonjour toad

Evidemment tu dois créer $_SESSION['timeout'] quand tu démarres ta session.. et fais un if (isset()) pour tester si la valeur est là.

Ne sachant pas comment faire, j'ai mis ton code en include :

include("session.php");
$_SESSION['timeout']
require("../member/prise.php");

mais il me donne les erreurs pour les includes (ou require) suivant.

Donc que dois je mettre et où ?
Pareil pour le IF (isset())  je le mets où ?
Si je ne me trompe pas après un IF il a des "else" et "echo" mais mettre quoi ?

80

(27 réponses, dans Programmation)

J'avais mis résolu pour la fermeture de session, ce qui est vrai, mais j'ai un problème avec le code de toad.
J'ai mis un include pour chaque page comme me la dit NooD mais à toute les pages j'ai l'erreur à la ligne 7.
l'erreur : Notice: Undefined index: timeout in

<?php
session_start();

$current = time();

// si timeout est stocké en session sous un format d'unix timestamp
$diff = $current - $_SESSION['timeout'];        // erreur ligne 7 //

// session expirée, on peut la détruire complètement ou partiellement
if ($diff > (10*60)) {   // 10 minutes

// la derniere requete a eu lieu il  y a moins de 10 minutes, on accepte
} else {   

// et on met a jour la valeur de $_SESSION['timeout']
$_SESSION['timeout'] = time();
}
?>

j'ai du oublier quelque chose ?

81

(27 réponses, dans Programmation)

Bonsoir

Merci toad et NooD pour votre aide.

A bientôt je pense pour d'autre question.

82

(27 réponses, dans Programmation)

Bonjour toad

Je suppose que la page qui contient ce code doit être ouverte pour fonctionner !

<?php
session_start();

$current = time();

// si timeout est stocké en session sous un format d'unix timestamp
$diff = $current - $_SESSION['timeout'];

// session expirée, on peut la détruire complètement ou partiellement
if ($diff > (10*60)) {   // 10 minutes

// la derniere requete a eu lieu il  y a moins de 10 minutes, on accepte
} else {   

// et on met a jour la valeur de $_SESSION['timeout']
$_SESSION['timeout'] = time();
}
?>

Donc je dois mettre le code sur toutes les pages qui s'ouvre ?

Merci pour ton aide précieuse.

83

(27 réponses, dans Programmation)

Bonjour

Pouvez vous me dire si ce script de fermeture de session est bon ?
Je ne sais pas si ça marche ou pas.

<?php
session_start();

$_SESSION = array();
unset($_SESSION);
session_destroy();

echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="../accueil.htm" </SCRIPT>';
?>

Et comment faire pour que la fermeture se fasse automatiquement après un certain temps au cas ou le client n'a pas penser à la fermée ?
(toujours pour ma tit boutik ha ha ha)

Merci pour votre aide

84

(32 réponses, dans Bases de données)

Bonjour NooD

Merci, je n'ai plus de code d'erreur.
La je viens de mettre le site à jour, j'ai remis la session pour le nom du client et récupérer son "idclient" pour le renoyé sur le "idclient" dans com.

Si vous avez d'autre conseils je suis preneur.
J'ai d'autre questions mais à mon avis je devrais cloturer ce post et en refaire un autre non ?
Merci pour tout

85

(32 réponses, dans Bases de données)

Bonjour toad

Ce n'est pas parfait non plus, utilise plutot les sessions pour conserver le client_id (pour éviter que quelqu'un s'amuse à changer le code html de tes formulaires et n'envoie un mauvais client_id).

Je ne savais pas que l'on pouvais changer un code html sur un site, la je suis étonné et loin d'imaginais tous ce que l'on peut faire quand on connait les astuces. J'imagine donc que pour le php c'est pareil.
Avec toutes les contradictions je ne sais plus comment faire ni quoi faire.
Pour les "hidden" s'est galère d'envoyé le "idclient" sur chaque page car je dois faire des "<form" pour les envoyer donc ouvrir plus de page, alors qu'avec la session il y avait des redirections.
Le site en exemple marche impeccable en local mais sur l'hébergeur je vois des messages d'erreur sur le fichier "connexion" à la ligne 18  à -  session_start();  -.
Voici le code

<?php
require("prise.php");

if(isset($_POST) && !empty($_POST['nom']) && !empty($_POST['password'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select password from client where nom='".$nom."'";
  $req = mysql_query($sql) or die ("erreur de connexion");

  $data = mysql_fetch_assoc($req);

  if($data['password'] != $password) {
        echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="inscription.php" </SCRIPT>';
    exit;
  }
  else {
     session_start();       //----ligne18 erreur de code--//
    $_SESSION['nom'] = $nom;
   
    echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="../accueil.php" </SCRIPT>';
  }   
}
else {
   echo '<SCRIPT LANGUAGE="JavaScript">
document.location.href="inscription.php" </SCRIPT>';
   exit;
}
?>

Pourrais tu voir l'erreur et éventuellement la corriger et me permettre de récupérer le nom avec le prénom du client (nom + prenom donne moins d'erreur que le nom seul) pour obtenir son "idclient" ?
S'est un script récupéré j'ai juste changé les adresses de fichiers

Merci pour ton aide

86

(32 réponses, dans Bases de données)

Bonsoir NooD et Infobarquee
J'avais répondu avant infobarquee et lu ma réponse sur le forum mais la je ne vois plus mon message ?? Bug est tu la ? ha ha ha
Ce n'est pas grâve.
Ma session ne gardé que le nom de celui inscrit, et je m'en servais en dernier pour récupérer le "idclient" sur chaque page. Mais comme la fait remarqué Infobarquee le nom de famille peut être d'une personne autre que celui qui s'est inscrit, d’où mon changement et revenir sur le "idclient" mais en enlevant la session.
J'avance doucement mais surement. J'utilise des "hidden" pour garder le "idclient" venant de la table client,  sur chaque page qui s'ouvre. Delà je rempli la table "com" avec le idclient (client) dans le "idclient" de la table com.

Pour la sécurité : non je n'utilise pas le https, je suis sur http simplement parce que pas besoin de protection renforcé.
Le client doit imprimer la commande et me l'envoyer avec un chèque car pour le moment je n'utilise pas d'autre moyen de payement.
Mon site n'est pour le moment qu'en "fabrication"  j'ai modifié mes fichiers de l'exemple dont j'ai mis l'adresse du site dans les premiers messages. Ce n'est pas au point mais ça vient doucement.
Ma préoccupation de départ été et est toujours le problème de mélange des commandes avec d'autre client, là je pense que c'est résolu mais pas mal de chose à régler.

Merci pour votre aide.

87

(32 réponses, dans Bases de données)

Bonjour Infobarquee

Pour l'effacement des données client
Je pense que tu as raison, je vais retirais la commande qui efface les données. Par contre je vais mettre un lien dans le panier et en commande finale au cas ou le client préfèrerais ne pas laisser ses données, libre choix en somme.

Au sujet d'effacer la 1ere commande avec la 2eme, je trouve ça normale, car si le client na pas commander la 1ere fois s'est que ça ne l'intéresse pas.

il faut que tu trouves une parade pour que chaque commande corresponde à un numéro unique.

La session, je vais voir pour la supprimer. (pas confiance)
Comme je commence à comprendre le système de "reprise de ID" je pourrais par exemple la reprendre à chaque commande.
Ca va me faire des scripts assez longs mais il ni aurat que du PHP et ça rejoindra la "parade" que tu dis (à moins que tu pensé autre chose)

Après je verrais pour que la commande soit envoyer directement dans la boite mail du client et un double pour le webmaster, ça éviteras l'impression de la commande et restera juste à envoyer le chèque.
Je sais faire ce genre de formulaire.

Merci pour ton aide

88

(32 réponses, dans Bases de données)

Re Bonjour

J'ai trouvé l'erreur, en fait j'ais inversé les commandes d'effacement, je détruits le "idclient" et je le rappel donc c'est normale que ça ne marche plus, la j'ai remis l'effacement de la table com en 1er et l'effacement de la table client en dernier et la ça marche.

Il me reste à vérifier s'il ni a pas d'erreur possible dans la commande.

89

(32 réponses, dans Bases de données)

Bonjour à tout le monde

J'étais occupé pour les changements. Infobarquee a raison pour les noms.
Donc j'ai remplacé le nom du client par le "idclient" dans la table client et le "idclient" dans la table "com"
Tout marche sauf pour la destruction des commandes par rapport aux "idclient"
Pour la table client pas de problème d'effacement mais la table "com" ne veut rien savoir et n'éfface pas (plus) les commandes.
Pour effacer les commandes dans "com" je dois ressortir le "idclient" du client pour le renvoyer dans le "idclient" dans com mais la ça coince, voici mes scripts (cafouilli) que j'utilise pour l'effacement :

Fonction qui marcher bien :

<?php

session_start();

$nom = $_SESSION['nom'];

include_once ('prise.php');

$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");

$reqmod = mysql_query("DELETE FROM com WHERE nom = '$nom' " ); 

include_once ('prise.php');

$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");

$reqmod = mysql_query("DELETE FROM client WHERE nom = '$nom' " ); 

mysql_close();

?>

Fonction qui ne marche plus :

<?php

session_start();

$nom = $_SESSION['nom'];

include('prise.php');

//suppression des coordonnées client et ça marche///
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");

$reqmod = mysql_query("DELETE FROM client WHERE nom = '$nom' " );

//-------------------------------------------------------//
//reprise du idclient - je n'obtiens rien - essayer avec echo//

include('prise.php');

$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");

$reqmod = mysql_query("SELECT idclient FROM client WHERE nom = '$nom'");
$resultat = mysql_fetch_array($reqmod);
$resultat['idclient'];

//normalement renvoi du idclient pour l'effacement mais pas de reception idclient//
include("prise.php");

$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");

$reqmod = mysql_query("DELETE FROM com WHERE nom = '$resultat' " );

mysql_close();

?>

Je continu mes essais.

Je remercie tout le monde pour l'aide que vous m'apporter.

90

(32 réponses, dans Bases de données)

Bonsoir

Je pense avoir trouvé la meilleur solution et ça à l'air de fonctionné.
Modification des tables :

CREATE TABLE `client` (
  `id` int(11) NOT NULL auto_increment,
  `nom` varchar(20) NOT NULL,
  `prenom` varchar(20) NOT NULL,
  `adresse` longtext NOT NULL,
  `cp` varchar(10) NOT NULL,
  `ville` varchar(30) NOT NULL,
  `pays` varchar(20) NOT NULL,
  `mail` longtext NOT NULL,
  `tl` varchar(15) NOT NULL,
  `password` varchar(25) NOT NULL,
  PRIMARY KEY (`idclient`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

CREATE TABLE `com` (
  `id` int(11) NOT NULL auto_increment,
  `nom` varchar(20) NOT NULL,
  `ref` varchar(20) NOT NULL,
  `type` varchar(40) NOT NULL,
  `titre` varchar(40) NOT NULL,
  `prix` varchar(10) default NULL,
  `qte` varchar(5) default NULL,
  `total` varchar(10) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

Je suis arrivé à installer une connection de clients, bon je n'ai pas eu trop de mal vue que je l'ai trouvé presque fait entièrement, juste des modification très simple (ho que je suis modeste ha ha ha)
S'est en sessions, et ma table client.

Donc voila le principe, je récupère le nom du client par la session, je l'ai donc sur toutes les pages. Avec le nom du client je peux récupérer les commandes, récupérer les coordonnées du client et cerise sur le gâteau je peux supprimer les commandes ou données à partir de se nom de client.

Chu trop fort, vive moi... Hum hum restons modeste
Bon aller ! C'est aussi grâce à vous, vous m'avez quand même la puce à l'oreille ha ha ha ha chu trop fort hi hi hi

91

(32 réponses, dans Bases de données)

Bonjour NooD et infobarquee
Les sessions !
Dur pour moi, je galère trop, je fouille les forums et aucun n'a d'exemple, juste des bribes de scripts. Puis pas trop conseillé car comme le dit infobarquee, on ne sait pas si c'est fermé.

Les cookies, pas la peine car beaucoup les bloques.

Les "idclient" etc, j'ai mis mais la on ne me dit pas ce que je dois faire ensuite pour garder la commande d'un client sans qu'un autre mélange les commandes.

Faire une table relais ?
Je ne vois pas comment intervenir et je pense que ça reviendra au même que la vraie table qui reçois tout, car les commandes passeront par la table relais pour tous les clients.

Il doit bien avoir un moyen d'utiliser les "id" des commandes du client.
Par exemple :
Dans le panier qui se rempli j'utilise les "id" de chaque commande pour effacer une commande, donc on devrais pouvoir réutiliser ses numéros  "id" pour récupérer seulement les commandes concernés.

Dans la table qui contient toutes les commandes de plusieurs clients, on recherche la commande grâce au "id", est-ce possible ?

$req = mysql_query("SELECT id from com WHERE id='id1', id='id2', id='id3' ") or die ("erreur requête");

Mais la pareil, comment stoker les "id" pour le rappelle des commandes ?

Je commence à avoir mal au crane ha ha ha ha.
Merci à vous deux pour votre aide, on finira bien par trouver la solution…

92

(32 réponses, dans Bases de données)

Bonjour NooD

Désolé mais le site proposé n'explique que les "ouverture, fermeture et suppressions de sessions". J'ai parcouru le site sans rien apprendre. Les exemples donnés sont trop court pour moi.

J'ai visité plusieurs autre sites qui expliquent les sessions, (même le "siteduzero" ) mais malheureusement pas d'exemple réel.
Un exemple qu'il suffirait de modifier pour obtenir ce que l'on veut.

Pour moi c'est l'incompréhension totale.
Pourriez vous, s'il vous plait, à partir de ma commande avec les fameux "hidden" (ou autre si cela n'est pas possible) de me dire comment les incrustés dans une session, puis de les accumulés avec d'autres commandes qui grossirais le panier et de les ressortir  après avoir donné les coordonnées du client ?
Merci beaucoup pour votre patience envers moi.

93

(32 réponses, dans Bases de données)

Merci NooD
Je vais parcourir le site que tu propose, si j'ai la solution je reviendrais donner l'explication.

94

(32 réponses, dans Bases de données)

Bonjour NooD

Merci pour ta réponse.

Explication de mes fichiers :
En fait ma petite boutik est simple il faut seulement "imprimer" la commande.

La page accueil contient les articles à commander, lorsque l'on clique sur "commande", la partie de cette commande contient ceci :

<form action="modif/ajoutarticle.php" method="post">
   <input type="hidden" name="ref" value="0126">
   <input type="hidden" name="type" value="BASTER">
   <input type="hidden" name="titre" value="Moin lé pa la">
   <input type="hidden" name="prix" value="6.50">   
   <input type="hidden" name="qte" value="1">
   <input type="hidden" name="total" value="6.00">
   <input type="image" name="submit" src="imag/com.gif">

le tout envoyé dans le fichier "ajoutarticle" qui renvoi dans la table "com" puis ce fichier a une redirection vers la page "commande" .
Cette page commande, reçois les données de la table "com" et permet de voir sa commande et de revenir sur la page accueil pour refaire une autre commande, ainsi de suite.

Le client qui a rempli son panier et qui décide de commander, clic sur un lien qui l'envoi sur une autre page pour remplir un formulaire de données personnelles.
A  l'envoi du formulaire les données vont dans la page "ajoutcoor" et ajouter dans la table "client".

Cette page "ajoutcoor" donne un lien pour voir la commande finale à imprimer.
Lorsque l'on clic sur le lien il se passe deux actions.
1 er  action, la page finale s'ouvre pour être imprimé
2 eme action qui part dans le fichier "deltabl" pour vider les 2 tables "com" et "client"

D’où mon problème de sauvegarde d'un éventuel autre client en ligne au même moment.

Tous cela parce que je ni connais pas vraiment en script et  suivant ce que j'arrive à faire.

Avec des sessions (sans cookie) je n'aurais pas besoin de table, mais je ne sais pas les faire

Si vous le voulez je peux vous envoyer mes fichiers pour mieux comprendre et peut être m'aider plus pour le problème de mélange de commandes et de destruction de tables, ou mieux, pour remplacer les tables par des sessions.

Pour les adresses je dois mettre des  "longtext" car parfois les adresses sont de type :
appartement  4, bâtiment "C" rue des bidules etc.

Merci pour votre aide.

95

(32 réponses, dans Bases de données)

Bonjour
Merci  infobarquee.
J'ai ajouté les id comme vous le suggérez.

CREATE TABLE `client` (
  `idclient` int(11) NOT NULL auto_increment,
  `date_verif` varchar(20) NOT NULL,
  `date` varchar(20) NOT NULL,
  `nom` varchar(20) NOT NULL,
  `prenom` varchar(20) NOT NULL,
  `adresse` longtext NOT NULL,
  `cp` varchar(10) NOT NULL,
  `ville` longtext NOT NULL,
  `pays` varchar(20) NOT NULL,
  `mel` longtext NOT NULL,
  `tl` varchar(15) default NULL,
  PRIMARY KEY (`idclient`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

CREATE TABLE `com` (
  `idcommande` int(11) NOT NULL auto_increment,
  `idclient` int(11) NOT NULL,
  `date_verif` varchar(20) NOT NULL,
  `date` varchar(20) NOT NULL,
  `ref` varchar(20) NOT NULL,
  `type` varchar(40) NOT NULL,
  `titre` varchar(40) NOT NULL,
  `prix` varchar(10) default NULL,
  `qte` varchar(5) default NULL,
  `total` varchar(10) default NULL,
  PRIMARY KEY  (`idcommande`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

Les PRIMARY KEY sont ils bon ? (Je n'ai pas d'erreur en local)

Par contre quelles lignes ou script je dois faire pour les utiliser ?

Merci pour votre aide.

96

(32 réponses, dans Bases de données)

Bonjour

Pouvez vous me dire quels champs manque dans la table com ?

Cordialement
Gilledunord

Bonjour

je n'y connais rien dans le fonctionnement en php mais en recolant des scripts trouvé par-ci par-la j'arrive à m'en sortir.
Par contre pour les sessions, la je n'y comprend absolument rien.

J'essaye de faire ma petite boutique perso tout simple et qui marche bien.
(en essais ici  http://logicmaison.shos.fr/boutik/accueil.htm  )

par contre je me suis aperçu que si plusieurs personnes fais une commande, tous ce mélange dans ma table, donc des articles non désiré ce retrouve dans la commande.

et le plus bête est que j'ai mis un lien qui efface les deux tables après la fabrication de la commande finale.
Donc si une 2eme commande est faite par une autre personne, il se retrouve avec une commande vide...

Des sessions permettrais de garder les commandes en mémoire et de les envoyer dans une table protèger par le ID du client (en fait je n'en sais rien comment ça marche)

mes deux tables :
CREATE TABLE `client` (
  `id` int(11) NOT NULL auto_increment,
  `date_verif` varchar(20) NOT NULL,
  `date` varchar(20) NOT NULL,
  `nom` varchar(20) NOT NULL,
  `prenom` varchar(20) NOT NULL,
  `adresse` longtext NOT NULL,
  `cp` varchar(10) NOT NULL,
  `ville` longtext NOT NULL,
  `pays` varchar(20) NOT NULL,
  `mel` longtext NOT NULL,
  `tl` varchar(15) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;


CREATE TABLE `com` (
  `id` int(11) NOT NULL auto_increment,
  `date_verif` varchar(20) NOT NULL,
  `date` varchar(20) NOT NULL,
  `ref` varchar(20) NOT NULL,
  `type` varchar(40) NOT NULL,
  `titre` varchar(40) NOT NULL,
  `prix` varchar(10) default NULL,
  `qte` varchar(5) default NULL,
  `total` varchar(10) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

Pouvez vous m'aider pour la fabrication des sessions, qui éviterons les mélanges de commande et aussi de ne pas supprimer les commande d'un autre ?

Merci pour votre aide
Cordialement
Gilledunord

98

(2 réponses, dans Bases de données)

Bonjour
Merci toad, ça marche.

Cordialement
Gilledunord

Bonjour

Je voudrais récupérer le ID d'un nom spécifique dans une base de données, malgré plusieurs tentative je n'obtiens rien.
Voila ce que je mets pour récupérer le id du nom marcel :

$req = mysql_query("SELECT id from base WHERE nom = marcel");
 
  $resultat = ($req);
   
   echo ' ID'.$resultat['id'].' ';

Merci pour votre aide
Gilledunord

100

(19 réponses, dans Problèmes)

Bonjour

Ca marche avec le  LeechFTP
Mais problème s'est qu'avec lui on ne peut pas voir les fichiers cachés genre ".htaccess"