IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Update / Insert sur MySQL


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut Update / Insert sur MySQL
    Bonjour,

    Je vous présente un petit bout de code qui me pose quelques problèmes...
    En fait je récupère depuis un formulaire des infos bourrages et compteurs en deux parties (AM et PM).
    Je rentre ensuite ces valeurs dans une base MYSQL et j'affiche les valeurs dans un tableau. Mais j'ai des soucis visiblement au niveau de mon test pour aiguiller entre mon UPDATE et mon INSERT.
    Car il ne me fait que l'update et ne passe visiblement jamais dans la seconde partie de mon test. Auriez-vous une idée ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
    $jour=date("Y-m-d");
    if(isset($_POST['counteram']))      $counteram=$_POST['counteram'];
    else      $counteram="0";
    if(isset($_POST['jamam']))      $jamam=$_POST['jamam'];
    else      $jamam="0";
    if(isset($_POST['counterpm']))      $counterpm=$_POST['counterpm'];
    else      $counterpm="0";
    if(isset($_POST['jampm']))      $jampm=$_POST['jampm'];
    else      $jampm="0";
     
    $db = mysql_connect('127.0.0.1', 'root','PASSWORD')  or die('Erreur de connexion '.mysql_error());
     
    mysql_select_db('info_printer',$db)  or die('Erreur de selection '.mysql_error()); 
    $query = "SELECT * FROM `count`";
    $result = mysql_query($query, $db) or die($query . " - " . mysql_error());
     
     
    $tab = mysql_fetch_array($result);
     
    if ($tab['day']='$jour') {
    $sql1 = "update `count` set `countpm`=1500 where `day`='$jour'";
    mysql_query($sql1) or die('Erreur SQL !'.$sql1.'<br>'.mysql_error());
     
    }
    else{
    $sql2 = "INSERT INTO `count` VALUES ('null','$jour','$counteram','$counterpm','$jamam','$jampm')"; 
     
    echo "ok";
    mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error()); 
     
    }
     
    echo"<table border=\"1\">";
     
       echo "<tr>";
       echo "<td width=200 bgcolor=#87AFC7><center><b>Jour </b></center></td>\n";
       echo "<td width=200 bgcolor=#87AFC7><center><b>Compteur matin </b></center></td>\n";
       echo "<td width=200 bgcolor=#87AFC7><center><b>Compteur apres-midi</b></center></td>\n";
       echo "<td width=200 bgcolor=#87AFC7><center><b>Bourrages matin</b></center></td>\n";
       echo "<td width=200 bgcolor=#87AFC7><center><b>Bourrages apres-midi</b></center></td>\n";
       echo "<td width=200 bgcolor=#87AFC7><center><b>total</b></center></td>\n";
       echo "</tr>";
     
    echo "<tbody>";
     
     
      echo"<TR>";
      $total=$tab['countpm']-$tab['countam'];
      echo "<TD>";echo $tab['day'];echo"</TD>\n";
      echo "<TD>";echo $tab['countam'];echo"</TD>\n";
      echo "<TD>";echo $tab['countpm'];echo"</TD>\n";
      echo "<TD>";echo $tab['jamam'];echo"</TD>\n";
      echo "<TD>";echo $tab['jampm'];echo"</TD>\n";
      echo "<TD>";echo $total;echo"</TD>\n";
    }
     
    echo"</TR>";
    echo"</tbody></table>";
     
     
    mysql_close();
     
     
     
    ?>

  2. #2
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($tab['day']='$jour')

    Deux choses:

    -Ta variable jour n'est pas ici interprétée puisqu'elle est entre ' '.. Elle ne sont interprétées que lorsqu'elles sont entre " ". Sauf qu'ici tu n'a besoin ni de l'un ni de l'autre.

    -Pour faire un test d'égalité il faut utiliser == sinon ca revient à faire une affectation... Et donc le test est en général toujours vrai (Enfin ca serait un peu long à expliquer.)

    Donc le code correct est

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($tab['day']==$jour)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    Merci Asmodean pour ta réponse, je rentre maintenant dans ma condition.
    En fait, nouveau soucis mais au niveau de ma base visiblement:

    Erreur SQL !INSERT INTO `count` VALUES ('null','2007-07-02','1212','0','5','0')
    Out of range value adjusted for column 'id' at row 1
    Il y a-t-il la nécessité de faire une conversion quelque part ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    Oups, il semblerait que ce soit les ' autour de NULL, désolé

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    Ce que je ne comprends pas, c'est que maintenant je passe toujours sur ma condition "else", j'ajoute donc a chaque exécution mon insert dans ma base.

  6. #6
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    Essaie d'afficher $tab['day'] et $jour avant le if pour voir ce qu'ils valent

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Les quote autour des '$jour' font que cette variable n'est pas interprétée, tu vas donc toujours dans le else effectivement, enlève les ' ' ou mets des " "

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    Citation Envoyé par Asmodean
    Essaie d'afficher $tab['day'] et $jour avant le if pour voir ce qu'ils valent

    En fait il me revois les valeurs suivantes:

    tab['day']=2007-06-26
    $jour=2007-07-02

  9. #9
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    Ben si les deux ne sont pas égaux, alors ce n'est pas étonnant que tu n'entres pas dans le if

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    oui, mais je ne comprends pas pourquoi ils sont différents...

  11. #11
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    as-tu modifié le probleme de quote dont je te parlais?
    par ailleurs tu fais = au lieu de == du coup tu écrases ta valeur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($tab['day']=="$jour") {

  12. #12
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    Ca, ca ne vien pas du code... Ca vient à prioris de ta base de données dans lequel le champ "day" vaut 2007-06-26.

    Qu'est ce que tu voulais faire avec ta requête select? récupérer le dernier? le plus résent? tous?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    En fait je veux récupérer le dernier enregistrement dans ma table.

  14. #14
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    Si tu as un ID autoincrement dans ta table tu devrais pouvoir faire :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `count` ORDER BY monId DESC LIMIT 1

    Sinon tu doit pouvoir faire ca selon la date aussi :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `count` ORDER BY day DESC LIMIT 1

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    En gros pour expliquer le fonctionnement du script, il s'agit de prendre la dernière date, si celle ci correspond à la date du jour, faire un update de la table. Si la date n'est pas celle du jour, faire un insert avec les données du formulaire.
    Je ne sais si ce script est le plus adapté à ce genre d'actions... Si vous voyez une autre solution, plus simple, je suis prenneur

  16. #16
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    Bha dans ce cas je te conseille d'utiliser la deuxieme requête... Ce qu'elle fait c'est qu'elle classe les entrée de la table selon la date de manière décroissante. Et elle ne prend qu'un résultat (le plus récent donc).

    Et comme ça ton script devrait marcher.

Discussions similaires

  1. Insert sur MySQL database avec null et bit
    Par jean christophe dans le forum Débuter
    Réponses: 1
    Dernier message: 27/05/2010, 17h56
  2. String to Date pour insertion sur MySQL
    Par kaymos dans le forum Langage
    Réponses: 10
    Dernier message: 11/02/2010, 16h06
  3. journalisation des updates, inserts sur une table
    Par philou28 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/04/2007, 16h07
  4. UPDATE/INSERT sur des colonnes
    Par baltagi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/02/2007, 17h54
  5. Evenement sur UPDATE, INSERT, DELETE
    Par papouAlain dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2004, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo