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"; }
3 Réponses :
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 ...;)
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.
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>
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
Avez-vous essayé ceci: $ sql = "SELECT * FROM DataTable WHERE date <= '$ selectedTime' ORDER BY Date DESC LIMIT 5";
qu'est-ce que
SHOW CREATE TABLE DataTable
?