#php #mysql
#php #mysql
Вопрос:
Я работаю над этой программой, которая получает некоторые входные данные от пользователя, а затем использует эти входные данные для извлечения данных из нескольких таблиц в базе данных MySQL. Моя проблема в том, что, похоже, я ничего не получаю из таблиц MySQL, и было бы здорово, если бы вы могли помочь.
dbConn.php
<?php
$ser = "localhost";
$user = "root";
$pass = "pass";
$db = "dbvisual";
$conn = mysqli_connect($ser, $user, $pass, $db) or die("connection failed");
echo "connection success";
?>
form.php
<?php
if(isset($_Post['submit'])){ // Checking to see if the form has been submitted
$battery = (int) $_POST['battery']; // Battery Input element
$cycle = (int) $_POST['cycle']; // Cycle input element
$xVar = $_POST['X']; // X variable
$yVar = $_POST['Y']; // Y variable
// Trying to get the x variable based on what the user said
$mySqlQueryX = "SELECT cap
FROM cycle
WHERE cycleID = $cycle";
$feedbackX = mysqli_query($conn, $mySqlQueryX);
echo "<h1>$feedbackX</h1>";
}
?>
index.php
<!-- Connecting to the database -->
<?php
include 'dbConn.php';
?>
<!-- The Styling of the website -->
<style>
<?php include 'main.css'; ?>
</style>
<!-- The Skeleton of the website -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php include "form.php" ?>
<!-- The entire website -->
<div id="body">
<!-- The input half -->
<div id="inputs">
<!-- The input form -->
<form action="index.php" method="POST">
<div id="form">
<!-- Labels -->
<div id="label">
<label for="">Which Batteries?</label>
<label for="">What Cycles?</label>
<label for="">What's X?</label>
<label for="">What's Y?</label>
<label for="">Discharge?</label>
<label for="">Charge?</label>
</div>
<!-- User Info -->
<div id="info">
<input type="text" placeholder="Batteries" required
oninvalid="this.setCustomValidity('No Batteries Were Entered')"
oninput="setCustomValidity('')" name="battery">
<input type="text" placeholder="Cycles" required
oninvalid="this.setCustomValidity('No Cycles Were Entered')"
oninput="setCustomValidity('')" name="cycle">
<select name="X">
<option value="cap">Capacity</option>
<option value="speCap">Specific Capacity</option>
<option value="voltage">Voltage</option>
</select>
<select name="Y">
<option value="cap">Capacity</option>
<option value="speCap">Specific Capacity</option>
<option value="voltage">Voltage</option>
</select>
<input type="checkbox" name="discharge" checked>
<input type="checkbox" name="charge" checked>
</div>
</div>
<!-- Submit Button -->
<div>
<button type="submit" name="submit">Submit</button>
</div>
</form>
</div>
<!-- The graph half -->
<div id="graph">
<p>hello</p>
</div>
</div>
</body>
</html>
Когда я пытаюсь «повторить» то, что я должен получить из базы данных, ничего не отображается, и я предполагаю, что проблема может быть связана с тем, что у mysqli_query() возникли проблемы с $conn.
Спасибо вам всем!
Комментарии:
1. ПРЕДУПРЕЖДЕНИЕ : при использовании
mysqli
вы должны использовать параметризованные запросы иbind_param
добавлять любые данные в свой запрос. НЕ используйте для этого интерполяцию или конкатенацию строк, поскольку вы создали серьезную ошибку SQL-инъекции . НИКОГДА не помещайте$_POST
$_GET
или данные любого типа непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.2. 🐘 Если вы только начинаете работать с PHP и хотите создавать приложения, я бы настоятельно рекомендовал изучить различные фреймворки разработки , чтобы узнать, сможете ли вы найти тот, который соответствует вашему стилю и потребностям. Они бывают разных видов: от легких, таких как Fat-Free Framework , до гораздо более полных, таких как Laravel . Они дают вам конкретные примеры для работы и рекомендации по написанию кода и организации файлов вашего проекта.
3. Примечание: объектно-ориентированный интерфейс to
mysqli
значительно менее подробный, что упрощает чтение и аудит кода, и его нелегко спутать с устаревшимmysql_query
интерфейсом, где отсутствие одногоi
может вызвать проблемы. Используйте этот стиль:$db = new mysqli(…)
и$db->prepare("…")
Процедурный интерфейс является артефактом эпохи PHP 4 и не должен использоваться в новом коде. Кроме того, процедурный интерфейс имеет менее строгую проверку ошибок и отчеты, что затрудняет усилия по отладке.4. Есть ли что-нибудь в таблицах? Можете ли вы подтвердить, что данные присутствуют, что используемый вами запрос работает независимо от PHP, например, через
mysql>
оболочку или MySQL Workbench и т. Д.?5. просто повторите
$mySqlQueryX
в php, скопируйте и вставьте результат в терминал mysql или phpmyadmin. Возможно, это из$_Post
-за form.php (так и должно быть$_POST
)
Ответ №1:
Вам нужно изменить свой form.php
файл, это то, что я предлагаю
<?php
if(isset($_POST['submit'])){
$battery = (int) $_POST['battery']; // Battery Input element
$cycle = (int) $_POST['cycle']; // Cycle input element
$xVar = $_POST['X']; // X variable
$yVar = $_POST['Y'];
$con = mysqli_connect("localhost","root","passer","arduino");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit();
}
$mySqlQueryX = "SELECT cap
FROM cycle
WHERE cycleID = '".$cycle."' ";
$result = mysqli_query($con, $mySqlQueryX);
// Fetch all
print_r(mysqli_fetch_all($result, MYSQLI_ASSOC));
// Free result set
mysqli_free_result($result);
mysqli_close($con);
}