*
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
22 Mai 2012 à 08:54:28

Connexion avec identifiant, mot de passe et durée de la session



 

Créer des conditions...


« sujet précédent | | sujet suivant »
Pages: [1] Imprimer
Auteur Fil de discussion: Créer des conditions...  (Lu 1460 fois)
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Créer des conditions...
« le: 31 Juillet 2007 à 21:53:01 »

Bonjour

J'ai créé un formulaite en html avac un script Php qui vient alimenter ma base de donnée sql (mysql avec easyphp)
Jusque la tout fonctionne

Maintenant je souhaite mettre des conditions
Tout d'abord je souhaite limiter mon nombre d'enregistrement à 30/jour sir ça dépasse alors le champ date de ma base de donnée doit automatiquement passer à la date du jour suivant.

Ensuite je voudrais de la même maniere que à partir de 15h30 tous les enregistrement saisis soit daté à la date du lendemain

Je ne sais pas du tout comment procéder ... faire un script Php ?? faire une requete sql dans ma base ???

Pouvez me donner quelques pistes

D'avance merci
Journalisée
Damien
Rédacteur Admin
Intarissable
*****

Points gagnés: 5
Messages: 2852



Voir le profil WWW
Re : Créer des conditions...
« Répondre #1 le: 01 Août 2007 à 12:04:46 »

Bonjour,

Le plus simple c'est de le faire en PHP car mysql ne sert pas à faire des conditions aussi complexes. D'autant que la date, vous allez l'insérer en PHP, donc il n'y a pas grand chose à rajouter.

On suppose que dans la table de votre base de données, vous avez la date d'enregistrement. Pour limiter à 30 par jour, il faudra au préalable vérifier dans la table le nombre d'enregistrement pour la journée. Par exemple ça donnera :

Code:
$sql = "SELECT COUNT(date) AS nbenregistrements FROM table WHERE date = now()";
$req = mysql_query($sql);
$enreg = mysql_fetch_array($req);
$datedemain = time() + (24 * 60 * 60); // ajout de 24h en secondes
$sqldate = ($enreg['nbenregistrements'] > 30) ? date("Y-m-d", $datedemain) : date("Y-m-d", time());

Par contre votre condition peut poser problème telle quelle donc faites attention.
Par exemple si un jour vous avez 70 demandes d'enregistrements, il faudra que la date se mette sur après demain et non demain. Et si c'est vraiment cela que vous souhaitez faire (reporter d'un jour tous les 30 enregistrements), il faudra utiliser le quotient (avec floor). Ca donnera quelque chose comme ça :

Code:
$sql = "SELECT COUNT(date) AS nbenregistrements FROM table WHERE date = now()";
$req = mysql_query($sql);
$enreg = mysql_fetch_array($req);
$nbjourstoadd = floor($enreg['nbenregistrements'] / 30);
$datecalculee = time() + ($nbjourstoadd * 24 * 60 * 60); // ajout de 24h en secondes
$sqldate = ($nbjourstoadd < 1) ?  date("Y-m-d", time()) : date("Y-m-d", $datecalculee);


Et pour les 15h30, le principe est à peu près le même, sauf qu'il faudrait créer le "timestamp" (traduction en secondes depuis le 1er jan 1970) de la date d'aujourd'hui à 15h30, que vous allez pouvoir comparer avec le timestamp courant (on l'obtient avec time() ) :

Code:
$month = date("m", time());
$day = date("d", time());
$year = date("Y", time());
$ts1530 = mktime(15, 30, 0, $month, $day, $year);
$tsnow = time();
$datedemain = time() + (24 * 60 * 60); // ajout de 24h en secondes
$sqldate = ($tsnow > $ts1530) ? date("Y-m-d", $datedemain) : date("Y-m-d", $tsnow);


Ensuite le $sqldate qui résulte de ces opérations sera la date à insérer en base de données.
C'est fait grossièrement, à vous de l'adapter suivant le nom de votre table, le type de votre champ date (car attention le WHERE date = now() compare au jour/mois/année si le champ date est ainsi, mais si votre champ date est un timestamp ou prend en compte les secondes la comparaison ne passera plus, il faudra faire autrement).
Journalisée

Cordialement,
Damien

Tutoriels informatique
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Re : Créer des conditions...
« Répondre #2 le: 01 Août 2007 à 16:24:08 »

Bonjour,

J'ai mis en place le code que vous m'avais donné dans mon script php mais j'ai l'erreur suivante:  Column count doesn't match value count at row 1


Voci mon script

Code:
<?php
// Parametres mysql à remplacer par les vôtres
define('DB_SERVER''localhost'); // serveur mysql
define('DB_SERVER_USERNAME''root'); // nom d'utilisateur
define('DB_SERVER_PASSWORD'''); // mot de passe
define('DB_DATABASE''base1'); // base1
// Connexion au serveur mysql
$connect mysql_connect(DB_SERVERDB_SERVER_USERNAME
DB_SERVER_PASSWORD
or die(
'Impossible de se connecter : ' mysql_error());
// sélection de la base de données
mysql_select_db(DB_DATABASE$connect);
$msg_erreur "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok "Votre demande a bien été prise en compte.";
$message $msg_erreur;
// vérification des champs 
if (empty($_POST['civilite'])) 
  
$message .= "Votre civilité<br/>";
if (empty(
$_POST['nom'])) 
  
$message .= "Votre nom<br/>";
if (empty(
$_POST['prenom'])) 
  
$message .= "Votre prenom<br/>";
if (empty(
$_POST['adresse'])) 
  
$message .= "Votre adresse<br/>";
if (empty(
$_POST['ville'])) 
  
$message .= "Votre ville<br/>";
if (empty(
$_POST['codepostal'])) 
  
$message .= "Votre Code Postal<br/>";


// si un champ est vide, on affiche le message d'erreur 
if (strlen($message) > strlen($msg_erreur)) {

  echo 
$message;

// sinon c'est ok 
} else {

  foreach(
$_POST as $index => $valeur) {
    $
$index mysql_real_escape_string(trim($valeur));
  }

$sql "SELECT COUNT(date) AS nbenregistrements FROM livraisons WHERE date = now()";
$req mysql_query($sql);
$enreg mysql_fetch_array($req);
$nbjourstoadd floor($enreg['nbenregistrements'] / 30);
$datecalculee time() + ($nbjourstoadd 24 60 60); // ajout de 24h en secondes
$sqldate = ($nbjourstoadd 1) ?  date("Y-m-d"time()) : date("Y-m-d"$datecalculee);

$month date("m"time());
$day date("d"time());
$year date("Y"time()); 
$ts1530 mktime(15300$month$day$year);
$tsnow time();
$datedemain time() + (24 60 60); // ajout de 24h en secondes
$sqldate = ($tsnow $ts1530) ? date("Y-m-d"$datedemain) : date("Y-m-d"$tsnow); 


$sql "INSERT INTO livraisons VALUES ('','".$sqldate."', '".$civilite."', '".$nom."','".$prenom."','".$adresse."', '".$ville."', '".$codepostal."','".$telephone."','".$documentsafournir."', '".$conseiller."', '".$rendezvous."', '".$remarque."', now())";
  
$res mysql_query($sql);

  if (
$res) {
    echo 
$msg_ok;
  } else {
    echo 
mysql_error();
 }

}
?>


<FORM>
<INPUT TYPE="button"
VALUE="Back"
onClick="reset">
</FORM>

Pouvez vous m'aider je ne comprend pas d'ou vient l'erreur.
Désolé je débute en PHP
D'avance un grand merci pour votre aide
« Dernière édition: 01 Août 2007 à 18:17:02 par damien » Journalisée
Damien
Rédacteur Admin
Intarissable
*****

Points gagnés: 5
Messages: 2852



Voir le profil WWW
Re : Créer des conditions...
« Répondre #3 le: 01 Août 2007 à 18:22:05 »

Code:
L'erreur signifie que vous n'avez pas mis le bon nombre de colonnes dans une requête INSERT. En l'occurence ça doit être votre requête qui commence par : [code]$sql = "INSERT INTO livraisons...

Ici vous insérez des valeurs dans 14 champs, mais votre table doit en contenir plus ou moins.

Pour plus de précisions sur la requête INSERT en général...
Lorsque l'on fait :
Code:
$sql = "INSERT INTO matable VALUES ('bla', 'bla')";
Cela signifie que la table "matable" contient deux champs et deux seulement.

Mais lorsque je fais :
code]$sql = "INSERT INTO matable (titre, description) VALUES ('bla', 'bla')";[/code]
...la table peut contenir plus de deux champs car j'ai précisé lesquels je voulais insérer.
Journalisée

Cordialement,
Damien

Tutoriels informatique
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Re : Créer des conditions...
« Répondre #4 le: 01 Août 2007 à 19:00:34 »

j'ai fais un test en enlevant la partie de votre script et donc en enlevant $date dans le insert  et la mon script fonctionne

Je voulais aussi vous dire que dans ma table il y a un champ date avec comme type datetime (je sais pas si cela peux vous aider)
Si vous avez besoin d'autres info dite le moi

Aidez moi svp je serais trop content si mon script pourrais enfin marcher


Journalisée
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Re : Créer des conditions...
« Répondre #5 le: 07 Août 2007 à 16:11:17 »

Bonjour,

On me demande de modifier mon script php par rapport à ça:

Je dois rajouter un champ date dans mon formulaire (ça pas de pb)
Puis les utilisateurs vont obligatoirement saisir au plus tôt une date qui correpond à date+1
mais ils peuvent également de temps en temps saisir des dates +2 +3 +7 ......

Il faut toujours que en fonction de la variable nombre saisie par un utilisateur précis, le nombre de saisie par jour ne dépasse pas ce nombre

Voci mon script de traitement du formulaire

Code:
// Parametres mysql à remplacer par les vôtres
define('DB_SERVER', 'localhost'); // serveur mysql
define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
define('DB_SERVER_PASSWORD', ''); // mot de passe
define('DB_DATABASE', 'base1'); // base1
// Connexion au serveur mysql
$connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
DB_SERVER_PASSWORD)
or die('Impossible de se connecter : ' . mysql_error());
// sélection de la base de données
mysql_select_db(DB_DATABASE, $connect);
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
$message = $msg_erreur;
// vérification des champs
if (empty($_POST['civilite']))
  $message .= "Votre civilité<br/>";
if (empty($_POST['nom']))
  $message .= "Votre nom<br/>";
if (empty($_POST['prenom']))
  $message .= "Votre prenom<br/>";
if (empty($_POST['adresse']))
  $message .= "Votre adresse<br/>";
if (empty($_POST['ville']))
  $message .= "Votre ville<br/>";
if (empty($_POST['codepostal']))
  $message .= "Votre Code Postal<br/>";


// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {

  echo $message;
?>
<FORM>
<INPUT TYPE="BUTTON" VALUE=" Retour "
               onClick="history.back()">
  </FORM>
<?php

// sinon c'est ok 
} else { 

foreach($_POST as $index => $valeur) {
   $
$index mysql_real_escape_string(trim($valeur));
  }


  
$documentsafournir $_POST['documentsafournir'];
  
$sqldocumentsafournir '';
  for (
$i=0$i<count($documentsafournir); $i++)
  {
    
$sqldocumentsafournir .= $documentsafournir[$i];
    
$sqldocumentsafournir .= ', ';
  }


$today date('Y-m-d');
$sql "SELECT date FROM livraisons WHERE date ='$today'"
$query=mysql_query($sql); 
$nb mysql_num_rows($query);

$sql2="SELECT nombre FROM test";
$requete mysql_query($sql2);
$donnees mysql_fetch_array($requete); 
 

$now mktime(date('H'), date('i'), 0date('m'), date('d'), date('Y')); 
$HeureLimite mktime(19300date('m'), date('d'), date('Y')); 

if(
$nb>=$donnees['nombre'] || $now>=$HeureLimite$DateLivraison date('Y-m-d'strtotime('+1 day')); 
else 
$DateLivraison date('Y-m-d'); 

$sql "INSERT INTO livraisons VALUES ('', '".$civilite."', '".$nom."', '".$prenom."', '".$adresse."', '".$ville."', '".$codepostal."', '".$telephone."', '".$sqldocumentsafournir."', '".$conseiller."', '".$rendezvous."', '".$remarque."', '".$DateLivraison."')"
$res mysql_query($sql); 


  if (
$res) {
    echo 
$msg_ok;
?>

<FORM ACTION="Livraisons.php">
    <INPUT TYPE="SUBMIT" VALUE="  Retour  ">
  </FORM>
<?php
  
} else {
    echo 
mysql_error();
 }

}

Pouvez vous m'aider car là je séche

D'avance merci pour votre aide
Journalisée
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Re : Créer des conditions...
« Répondre #6 le: 07 Août 2007 à 19:41:49 »

en Fait  je sais pas si c'est la meilleure solution mais ce que je voudrais faire c'est:

valeur par defaut du champ date dans mon formulaire = date + 1day
après 15h valeur par defaut du champ date dans mon formulaire = date+ 2day

ensuite dans un aute formulaire un utilisateur prècis aura saisie un nombre (variable nombre) qui va dans une table test

Il faut que le nombre total de saisie a date+ 1 day dans ma table principale ne dépasse pas la variable nombre
Si ça dépasse alors mon champ date dans mon formulaire passe automatiquement par défaut à date + 2day

Est ce que mon raisonnement est correct

Pouvez vous m'aider à mettre ça en place

Merci pour votre aide
Journalisée
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Re : Créer des conditions...
« Répondre #7 le: 08 Août 2007 à 08:14:27 »

Bonjour

Personne pour m'aider la dessus ?

Je ne vois pas comment mettre en place cette valeur par défaut pour le champ date

a l'aide svp

Merci d'avance
Journalisée
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Re : Créer des conditions...
« Répondre #8 le: 08 Août 2007 à 11:16:11 »

Bonjour

voila la partie de script que j'ai fait pour les dates

Code:
if (date('G') > 15) { 
// jour + 2 
$date = strtotime("+2 days"); 

else { 
// jour + 1 
$date = strtotime("+1 day"); 

// on forme le format de la date 
$date = date('d/m/Y', $date);

ça fonctionne mais le problème c'est que dans mon champ date de mon formulaire la date est au format JJ/MM/AAAA et que je valide mon formulaire dans ma base sql, dans le champ date il me met des dates fantaisistes car le format dans ma base sql est AAAA/MM/JJ

Comment faire pour résoudre ce problème ?

Merci de votre aide
Journalisée
Damien
Rédacteur Admin
Intarissable
*****

Points gagnés: 5
Messages: 2852



Voir le profil WWW
Re : Re : Créer des conditions...
« Répondre #9 le: 08 Août 2007 à 12:49:49 »

Citation
ça fonctionne mais le problème c'est que dans mon champ date de mon formulaire la date est au format JJ/MM/AAAA et que je valide mon formulaire dans ma base sql, dans le champ date il me met des dates fantaisistes car le format dans ma base sql est AAAA/MM/JJ

Comment faire pour résoudre ce problème ?

Bonjour,

Pourquoi quand vous formatez la date avec :
Code:
$date = date('d/m/Y', $date);

Vous ne faites pas plutôt :
Code:
$date = date('Y-m-d', $date);

Ca la mettrai au format valide pour mysql (qui est AAAA-MM-JJ).
Journalisée

Cordialement,
Damien

Tutoriels informatique
ju3979
Apprenti
**

Points gagnés: 0
Messages: 57


Voir le profil
Re : Créer des conditions...
« Répondre #10 le: 08 Août 2007 à 13:06:32 »

Bonjour

Parceque je veux que dans mon formulaire le champ date par defaut inscrive la date au format JJ/MM/AAAAA
C'est plus parlant pour les utilisateurs

Ensuit je veux le transformer en AAAA/MM/JJ  pour l'insérer dans ma base sql

Merci de votre aide
Journalisée
Pages: [1] Imprimer 
« sujet précédent | | sujet suivant »
Aller à:  

Powered by SMF 1.1.12 | SMF © 2006, Simple Machines LLC

Page générée en 0.173 secondes avec 18 requêtes.