1
votes

comment utiliser la date (y compris l'heure) de la base de données comme valeur d'un champ caché dans une table php

J'ai une table php et un champ de formulaire à l'intérieur de la table, qui affiche l'état de certains appareils. J'affiche des valeurs comme la date, la tension, le courant. l'utilisateur peut choisir n'importe quelle valeur afin que le temps correspondant à la valeur sélectionnée soit utilisé dans la page suivante pour le calcul de la moyenne. Pour le calcul de la moyenne, je devrais choisir 5 valeurs immédiates à la valeur sélectionnée. donc la valeur de temps de la colonne Date est importante (par exemple, 2019-04-17 16:14:44). Le problème est que lorsque j'utilise un champ de valeur de formulaire masqué, je n'obtiens que la date (par exemple, 2019-04-17) et non le «temps».

form.php

include("DBconnect.php");

     if(isset ($_GET['timesubmit'])){
       echo "selected a value";
       $selectedTime =$_GET['getTime'];
// the following echo only gives date, not time !! that is the problem.
       echo $selectedTime;
// I wanna use the immediate 5 value, that selected value and immediate 4 values for avg calculation.

       $sql = "SELECT * FROM DataTable 
       WHERE date =>$selectedTime AND ORDER BY Date  DESC LIMIT 5 ";


       $conn= mysqli_connect( $dbhost, $dbuser, $dbpass, $db );
       if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
       }




       $result_5_values = $conn->query($sql);
       $i=1;

       if ($result_5_values->num_rows > 0) {
        while($row = $result_10_values->fetch_assoc()) {


           echo "<tr>

               <td>" . $i. "</td>
               <td>" . $row["Date"]. "</td>
               <td>" . $row["Voltage"] . "</td>
               <td>" . $row["Current"]. "</td>

           </tr>";
           $i++;

     }
     echo "</table>";
     } else { echo "0 results"; }


     }else { echo "No selection has been made";}

formProcess.php

$sql = "SELECT Date, Voltage, Current FROM DataTable WHERE Date>= (CURDATE() - INTERVAL 90 DAY)  ORDER BY Datum DESC";

    $result = $conn->query($sql);
    $i=1;
    if ($result->num_rows > 0) {
     while($row = $result->fetch_assoc()) {
     echo "<form action = 'formProcess.php' method =get>";

        echo "<tr>

            <td>" . $i. "</td>
            <td>" . $row["Date"]. "</td>
            <td>" . $row["Voltage"] . "</td>
            <td>" . $row["Current"]. "</td>


            <td>"." <input type=hidden  name=getTime value =" .$row["Date"]."  </td>
            <td>"." <input type=submit    name=timesubmit value=select  class = classSubmit"."  </td>
        </tr>";
        $i++;
    echo "</form>";
  }
  echo "</table>";
  } else { echo "0 results"; }


1 commentaires

qu'est-ce que SHOW CREATE TABLE DataTable ?


3 Réponses :


0
votes

Comme vous n'avez pas de guillemets html , cela ne vous donnera que la date de la valeur . Jetez un œil au code html créé (vous pouvez voir que le surligneur de syntaxe de stackoverflow met déjà en évidence la façon dont le navigateur voit votre html):

<input type="hidden" name="getTime" value="2019-04-17 16:14:44" />

Vous devriez ajouter des guillemets supplémentaires pour le HTML à l'intérieur de PHPs echo:

echo ' <input type="hidden" name="getTime" value="' . $row["Date"] . '" />';

... pour créer une sortie html valide:

<input type=hidden name=getTime value=2019-04-17 16:14:44>

Pour surmonter ce problème, je vous conseille de utilisez des guillemets simples ' pour php et " pour html. Cela a également quelques améliorations de performances du côté php, mais cela ne devrait pas influencer beaucoup votre code ...;)


2 commentaires

pourriez-vous s'il vous plaît clarifier la question. Maintenant je suis confus. où est le problème?


Le problème concerne les guillemets HTML manquants ". getTime est une chaîne avec un espace entre les deux et cet espace divisera la valeur, de sorte que vous ne voyez que 2019- 04-17 et l'heure 16:14:44 est ignorée. Lors de l'ajout de " autour de cette date / heure (voir ma dernière sortie html), la valeur est la date / heure complète y compris l'espace.



0
votes

La balise d'entrée n'est pas fermée

 <input type=hidden  name=getTime value =" .$row["Date"]."/> </td>

elle devrait être

 <input type=hidden  name=getTime value =" .$row["Date"]."  </td>


0 commentaires

0
votes

Essayez ceci

$sql = "SELECT Date, Voltage, Current FROM DataTable WHERE Date>= (CURDATE() - INTERVAL 90 DAY)  ORDER BY Datum DESC";

    $result = $conn->query($sql);
    $i=1;
    if ($result->num_rows > 0) {
     while($row = $result->fetch_assoc()) {
     echo "<form action='formProcess.php' method ='get'>";

        echo "<tr>

            <td>" . $i. "</td>
            <td>" . $row["Date"]. "</td>
            <td>" . $row["Voltage"] . "</td>
            <td>" . $row["Current"]. "</td>


            <td>"." <input type='hidden'  name='getTime' value='" .$row["Date"]."'  /></td>
            <td>"." <input type='submit'    name='timesubmit' value='select'  class='classSubmit'"."  </td>
        </tr>";
        $i++;
    echo "</form>";
  }
  echo "</table>";
  } else { echo "0 results"; }


Le problème est que si vous n'avez pas indiqué la valeur de la date, toutes les valeurs d'attribut d'élément doivent être indiquées. Je m'attends à ce que le code source Web ressemble à ceci:

Cela devrait ressembler à ceci


1 commentaires

Avez-vous essayé ceci: $ sql = "SELECT * FROM DataTable WHERE date <= '$ selectedTime' ORDER BY Date DESC LIMIT 5";