Générer un code client avec le code postal...

Fermé
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 19 juin 2013 à 16:58
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 23 juin 2013 à 05:58
Bjr,

Comment pourrais-je m'y prendre pour qu'après avoir rempli un formulaire d'inscription un client reçoive automatiquement un mail de confirmation (après ttes les vérifications d'usage) qui aura généré automatiquement un code client du genre :

765-102 = trois 1er chiffre du code postal - increment ID

Ici 76500 (Elbeuf sur seine) et 102e inscription.

je précise qu'il faut me prendre par la main. :)

Merci d'avance en tous cas.
A voir également:

16 réponses

alexdu17200 Messages postés 1302 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 7 mars 2016 835
Modifié par alexdu17200 le 19/06/2013 à 17:14
Salut, je m'y connais un petit peu en php, pour récupérer les 3 premiers caractères du code postal, tu as cette fonction substr, essaye çà:
$cp = le code postal

$code=substr($cp, 0, 3);

Ca devrait te renvoyer les 3 premiers caractères techniquement, mais je peux pas la tester actuellement
Je ne sais pas comment récupérer l'increment ID.
Après pour ajouter 2 chaînes à la suite:

$codefinal = $code.$incrementid;
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
19 juin 2013 à 17:21
Bjr,
merci pour la piste, mais il me faut des scripts complet car je ne fais qu'adapter, suis pas assez balaise pour les construire de a à z.
Cdlt.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
19 juin 2013 à 17:22
Salut !

Alex t'as donné la solution pour la première partie de ce que tu veux faire.

Par contre, pour récupérer l'id il y a un petit soucis :
Ton champ id dans ta table est autoincrémenté, mais ce que tu veux y insérer à la place de l'id n'est pas un nombre, tu auras donc une erreur.

Il te faut alors un champ code_client en plus de l'id.
Tu feras alors ton insert into client où tu laisseras le champ code client vide pour le moment.
Si tu utilise PDO, il existe la fonction last_insert_id qui te retourne le dernier id :)
Tu as donc plus qu'a généré ton code client avec le substring du code postal, la concaténation du caractère - et l'id récupéré juste avant.

Si je n'ai pas été assez clair, dis le moi :)
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 19/06/2013 à 17:34
Merci les amis.
J'ai compris le principe d'une requête avec des champs qui récupère les 3 1er chiffre du CP, un autre qui récupère l'ID client et un troisième pour concaténer les deux autres. Je connais le principe, mais comment Mettre cela en exergue dans le script ci-dessous qui existe déjà, d'ailleurs est-ce la bonne solution ?

<?php
if(isset($_POST['type_reexpedition'])) $type_reexpedition=$_POST['type_reexpedition'];
else $type_reexpedition="";

if(isset($_POST['emballage'])) $emballage=$_POST['emballage'];
else $emballage="";

if(isset($_POST['titre'])) $titre=$_POST['titre'];
else $titre="";

if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";

if(isset($_POST['prenom'])) $prenom=$_POST['prenom'];
else $prenom="";

if(isset($_POST['adresse1'])) $adresse1=$_POST['adresse1'];
else $adresse1="";

if(isset($_POST['adresse2'])) $adresse2=$_POST['adresse2'];
else $adresse2="";

if(isset($_POST['cp'])) $cp=$_POST['cp'];
else $cp="";

if(isset($_POST['ville'])) $ville=$_POST['ville'];
else $ville="";

if(isset($_POST['telephone'])) $telephone=$_POST['telephone'];
else $telephone="";

if(isset($_POST['email'])) $email=$_POST['email'];
else $email="";

// On vérifie si les champs sont vides
if(empty($titre) OR empty($nom) OR empty($prenom) OR empty($adresse1) OR empty($cp) OR empty($ville) OR empty($telephone) OR empty($email))
{
echo '<font color="red">Attention, seul le champs <b>Adresse suite</b> peut rester vide !</font>';
}
// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
$db = mysql_connect('localhost', 'root', ''); // connexion à la base
mysql_select_db('outremercolis',$db); // sélection de la base

// on regarde si l'url existe déjà
$sql = "SELECT client_id FROM oc_clients WHERE email='$email'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on compte le nombre de résultats
$res = mysql_num_rows($req);

if($res!=0) // l'url existe déjà, on affiche un message d'erreur
{
echo '<font color="red">l\'email existe déjà dans nos bases !';
}


else // L'url n'existe pas, on insère d'abord les infos dans oc_clients
{
$sql = "INSERT INTO oc_clients(client_id, titre, nom, prenom, adresse1, adresse2, cp, ville, telephone, email) VALUES('','$titre','$nom','$prenom','$adresse1','$adresse2','$cp','$ville','$telephone','$email')";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on récupère l'id_site qui vient d'être généré
$client_id = mysql_insert_id();

// ci-dessous on insère les infos dans oc_choix
$sql = "INSERT INTO oc_choix(choix_id, type_reexpedition, emballage, client_id) VALUES('','$type_reexpedition','$emballage','$client_id')";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
}
{
echo '<font color="Green">Votre demande a bien eté prise en compte, vous allez recevoir un mail avec votre numéro d expédition et des instructions à suivre avant de passer commande.</font>';
}

{
}
mysql_close(); // on ferme la connexion
}
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
19 juin 2013 à 17:41
As tu vu ce que j'ai écrit juste avant ?

Ton champ id dans ta table est autoincrémenté, mais ce que tu veux y insérer à la place de l'id n'est pas un nombre, tu auras donc une erreur.
Il te faut alors un champ code_client en plus de l'id.

0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
19 juin 2013 à 17:44
Oui, oui, j'ai bien vu et compris qu'il faut un champs qui reprenne l'ID.
MErci.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
19 juin 2013 à 17:49
D'accord !

Tu n'as même pas besoin de le faire en PHP enfaite, tu peux tout faire en SQL ;-)

1.
INSERT INTO oc_clients(client_id, titre, nom, prenom, adresse1, adresse2, cp, ville, telephone, email) VALUES('','$titre','$nom','$prenom','$adresse1','$adresse2','$cp','$ville','$telephone','$email')

2.
$id = last_insert_id();

3.
UPDATE oc_clients
SET code_client = (select cp concat '-' concat client_id from oc_clients where client_id = $id)
WHERE client_id = $id
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
19 juin 2013 à 17:53
Ouah ! "... tout faire en sql...", tu veux dire sur la base directement ?
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
19 juin 2013 à 17:59
Tout est dans le code que j'ai mis ;-)
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
19 juin 2013 à 18:02
Merci bcp.
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 19/06/2013 à 18:55
Bon, ben après réflexion ton message ne m'est pas clair quand tu dis je peux tout faire en sql ça veut dire quoi ? J'ai tenté de remplacer la fin du code à partir de INSERT INTO, j'ai plein de messages d'erreurs !

Qqu'un pourrait-il m'expliquer pas à pas svp ?
Merci de vot' bon coeur !!

PS : noter que j'ai créé le champs code_client dans OC_CLIENTS.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
19 juin 2013 à 20:06
Le faire en sql veut dire que c'est sql qui va générer ton code_client, et non php.
Les deux sont faisable et tout à fait correct.
Je m'explique :
En php, tu fais une variable $code_client = substr($cp, 0, 3) . '-';
Et un insert into oc_clients ...
Etu fais un update où tu renseigne le code client = $code_client . last_insert _id()

En sql, tu fais un insert into avec le code client à nul
Puis tu fais un update du code client avec un select substr(cp, 0, 3) concat '-' concat id_client from oc_clients where id_client = last_insert_id()

Cela reviens au même dans les deux cas.

Peux tu mettre ton code pour voir où se trouve les erreurs


0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
19 juin 2013 à 20:26
MErci pour ton aide :
Je t'en prie adresse toi à moi comme à un demeuré : ))

Bon j'ai collé ton code dans sql, après avoir ajouté un champs code à oc_clients, voici le message d'erreur :

Requête SQL:

1. INSERT INTO oc_clients( client_id, titre, nom, prenom, adresse1, adresse2, cp, ville, telephone, email )
VALUES (
'', '$titre', '$nom', '$prenom', '$adresse1', '$adresse2', '$cp', '$ville', '$telephone', '$email'
)2.$id = last_insert_id( ) ;

MySQL a répondu: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1.
INSERT INTO oc_clients(client_id, titre, nom, prenom, adresse1, adresse2, cp' at line 1
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
20 juin 2013 à 01:30
C'était une démarche à suivre ce que je t'ai dit :)
Il ne fallait pas copier/coller :p

Il faut le traduire en PHP ;-)
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
20 juin 2013 à 01:50
lol !
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
23 juin 2013 à 05:58
Alors, personne pour me prendre par la main ?
0