Permalänk

PHP och SQL

Hej!
Försöker skapa en dashboard där man kan registrera olika parametrar, ex steg, sömn osv.
Jag har kopplat detta till en databas med hjälp av en fil "template.php" :
<?php
$host = "localhost";
$user = "zz";
$pwd = "xx";
$db = "xx_db";
$mysqli = new mysqli($host, $user, $pwd, $db);
if(!$mysqli){
die("Connection failed: " . $mysqli->error);
}
?>

i filen för sömn har jag en kod som är följande:
<?php
if (isset($_POST["Submit"])){
$Time = $_POST['Time'];
$Hours = $_POST['Hours'];
$SleepID = $_SESSION['User_ID'];
$sql = "INSERT INTO MFK_Sleep (Hours, Time, SleepID)
VALUES ('$Time','$Hours')
JOIN MFK_User U
ON U.User_ID=MFK_Sleep.UserID";
}
if ($mysqli->query($sql) == TRUE) {
header('Location: home.php');
}
else {
die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
echo 'Could not submit properly!';

}
$mysqli->close();
?>

PROBLEM :
användaren loggar först in, så User_ID sparas i en session. User_ID kommer från en tabell i databasen som heter User.
När man lägger in timmar för sömn i tabellen Sleep kommer UserID vara en foreign key från User.
Det är här de blir lite problem för min del. Jag måste alltså få in UserID till att vara det User_ID som är inloggad på sidan.
Koden som är skriven ovan skapar inga Error, men den uppdaterar inte heller databasen.

Någon som kan ge en hjälpande hand?

TACK PÅ FÖRHAND.

Permalänk
Medlem

Alla PHP-sidor som vill ha tillgång till en session måste börjas med session_start();

Testa att lägga in det först i ditt sömn-script. Se även till att du har det i början på ditt inloggningsscript.

Permalänk

Det ligger en session_start(); redan. Skrev inte det innan, men har även följande för användarna att fylla i:
<?php
include_once('template.php');
session_start();
?>
<form action="sleep.php" method="post">
<p>
<label for="Time">Date:</label>
<input type="Date" name="Time" id="Time">
</p>
<p>
<label for="Hours">Hours:</label>
<input type="int" name="Hours" id="Hours">
</p>
<input type="submit" value="Submit">
</form>
<?php

får följande error nu på denna rad:
if ($mysqli->query($sql) == TRUE) {

Errormeddelande 1: Notice: Undefined variable: sql in line 111

2: Warning: mysqli::query(): Empty query in /home/----/sleep.php on line 111
Could not query database0 :

Permalänk
Medlem

Eftersom där verkar vara minst 111 rader och vi inte ser allt, så får vi anta att felmeddelandet motsvarar verkligheten, d.v.s. att din SQL förfrågan är tom, i alla fall om jag tolkar felmeddelandet rätt.

Visa signatur

Grundregel för felsökning: Bryt och begränsa.

Permalänk
Medlem

Var ett tag sedan jag pillade med inserts i MySQL mer än grundläggande, men kan man verkligen göra en insert into en join?
Lägg all kod i code taggar här, och indentera korrekt så blir det lättare att läsa och hjälpa dig.

Permalänk

Såhär ser hela scriptet ut:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <!-- mobile devices --> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/b..." rel="stylesheet" integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css..."> <title>MKF Sleep </title> <!-- Fonts used are from google font, https://fonts.google.com --> <link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Alfa+Slab+One&displa..." rel="stylesheet"> <link rel="stylesheet" property="stylesheet" type="text/css" href="media/css/css.css"> </head> <body> <div class="container-fluid"> <div class="header"> <img src="media/css/small_logo.jpg" alt="FKF Fitness logo." style="float-left" width="70" height="70"> <h2> MKF Fitness </h2> </div> </div> <div class="navbar"> <a href="home.php">Home</a> <a href="editprofile.php">My Profile</a> <a href="logout.php" onclick="return confirm('Are you sure?')">Sign Out</a> <div class="dropdown"> <button class="dropbtn">Select <i class="fa fa-caret-down"></i> </button> <div class="dropdown-content"> <a href="movement.php">Movement</a> <a href="sleep.php">Sleeping</a> <a href="weight.php">Weight</a> </div> </div> </div> <div class="row"> <div class="column"> <div class="first"> <h2> Tip! <h2> <h3>txt</h3> <p>text </p> </div> </div> <div class="column"> <div class="second"> <h2>Enter your accomplishments</h2> <br> <?php include_once('template.php'); session_start(); ?> <form action="sleep.php" method="post"> <p> <label for="Time">Date:</label> <input type="Date" name="Time" id="Time"> </p> <p> <label for="Hours">Hours:</label> <input type="int" name="Hours" id="Hours"> </p> <input type="submit" value="Submit"> </form> <?php if (isset($_POST["Submit"])){ $Time = $_POST['Time']; $Hours = $_POST['Hours']; $SleepID = $_SESSION['User_ID']; $sql = "INSERT INTO MFK_Sleep (Hours, Time, SleepID) VALUES ('$Time','$Hours') JOIN MFK_User U ON U.User_ID=MFK_Sleep.UserID"; } if ($mysqli->query($sql) == TRUE) { header('Location: home.php'); } else { die("Could not query database" . $mysqli->errno . " : " . $mysqli->error); echo 'Could not submit properly!'; } $mysqli->close(); ?> <img src="media/css/sleepingcat.jpg" class="rounded-circle" alt="sleeping cat" width="304" height="236"> </div> </div> </div> <div class="footer"> <div class="row"> <div class="col-sm-1"> <img src="media/css/small_logo.jpg" class="float-right"alt="FKF Fitness logo." width="70" height="70"> </div> <div class="col-sm-1"> <ul class="nav nav-pills flex-column"> <li class="nav-item"> <a class="nav-link" href="contact.php">Contact Us</a> </li> </div> <div class="col-sm-1"> <ul class="nav nav-pills flex-column"> <a class="nav-link" href="about.php">About Us</a> </li> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bo..." integrity="sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf" crossorigin="anonymous"></script> </body> </html>

Nej jag är inte heller säker på att en join är vad som kommer hjälpa mig. har även laborerat med att lägga in select i values för att kunna kopiera in ett ID från en tabell till den tabell jag försöker modifiera.

Permalänk
Medlem

Har du en databashanterare? Typ phpMyAdmin?

Då kan du testaköra dina sql frågor i frågefältet för den aktuella tabellen & se vad du får tillbaka för resultat eller fel.
Testkör tills dom fungerar, sedan är det bara kopiera in frågorna i dina phpfiler.

Visa signatur

[IT-Dept]
Ryzen 5700x - 32 - 1070

Permalänk
Medlem

Nu stämmer inte mängden rader riktigt med felmeddelandet(den klagar på rad 111 men på rad 111 så är där bara en <body>).
Men det verkar som om:

if (isset($_POST["Submit"]))

inte är ställd och således så blir $sql tom(och aldrig initierad, därav felmeddelandet).

Kolla om Du verkligen gör en POST och inte en GET. Och kolla om Submit är satt.

Lägg in SQL körningen innanför if (isset($_POST["Submit"])) och inte utanför så slipper Du i alla fall felmeddelandet eftersom SQL körningen skall nog inte köras om där inte är en korrekt POST.

Visa signatur

Grundregel för felsökning: Bryt och begränsa.