Hantera data från en MySQL databas

Permalänk

Hantera data från en MySQL databas

Hej håller på med ett litet eget projekt ( http://www.sweclockers.com/forum/trad/1277261-pi-for-att-styr... )

Har kommit så "Långt" att jag kan skicka sms till min Pi (till en huawei dongle) och informationen om smset sparas till en mysql databas automatiskt genom en daemon som övervakar donglen.

tablen heter inbox som den sparar alla inkomna sms i.

Nu skulle jag vilja plocka vissa kolumner från databasen

ReceivingDateTime (när smset kom in)

SenderNumber (numret som har skickat smset, skulle även vilja binda namn till nummer)

Text (själva texten i smset)

Och dessa skulle jag vilja "printa" på skärmen.

typ såhär

1. ReceivingDateTime1 SenderNumber1(eller hellre ett namn då) Text1
2. ReceivingDateTime2 SenderNumber2 Text2
osv.

Hur går jag vidare, har ingen aning.

Vad är enklast att använda? Och detta skulle behöva göras "löpande" (kolla efter ny info från nya sms) rätt ofta (5-10sekunders mellanrum)

Har mycket lite kunskap inom detta, texten ska visas på en 26" tv skärm kopplad till min raspberry Pi med HDMI.

tacksam för alla idéer och svar.

Permalänk
Vila i frid
Permalänk
Medlem

Det enklaste jag kan komma på är en html-sida som laddar om sig själv med jämna mellanrum.

Den visar data som hämtas med SQL från databasen.

Du behöver lära dig lite SQL för att kunna hämta data från databasen. Eftersom det är känt vem som har vilket nummer så borde du kunna ha ytterligare en tabell i databasen där kombinationen av namn och telefonnummer finns?

SQL-frågan ska leta i tabellen som innehåller inkomna SMS, men endast så långt bakåt i tiden att det endast är "nuvarande" larm som avses och kombinera denna data med information om namn.

Permalänk
Medlem

error_reporting(1); $mysql_server = "server"; $mysql_user = "användarnamn"; $mysql_password = "lösenord"; $mysql_database = "databas"; $conn = mysql_connect($mysql_server, $mysql_user, $mysql_password); mysql_select_db($mysql_database, $conn); function db_escape($post) { if (is_string($post)) { if (get_magic_quotes_gpc()) { $post = stripslashes($post); } return mysql_real_escape_string($post); } foreach ($post as $key => $val) { $post[$key] = db_escape($val); } return $post; }

$sql = "SELECT * FROM inbox WHERE SenderNumber = '07xxxxxxxxxx' ORDER BY ReceivingDateTime DESC"; $result = mysql_query($sql, $conn); while($row = mysql_fetch_array($result)) { echo "{$row['ReceivingDateTime']} : {$row['SenderNumber']} : {$row['Text']}"; }

Själv hade jag nog gjort allting i en XML eller json fil så man kan hämta ut baserad på ID vilket skulle underlätta om du ska bygga API och låta andra ta del av det eller om du ska göra mobila appar sedan i framtiden.

Skrivet av hasenfrasen:

https://www.tutorialspoint.com/sql/sql-select-query.htm

Att koppla nummer till namn kan du kanske göra via eniro.se's API @ https://api.eniro.com/

Visserligen skulle man kunna göra med en if och else sats visa namn om det finns resultat mot eniro annars under elseif kör man okänd annars skulle det bli tomt spalt om det skulle saknas resultat, hittar sällan personer via eniro deras katalog känns väldigt tom.

Visa signatur

▰ MSI RTX 4060 Gaming 16GB ▰ Intel Core I7 14 700K 3.4Ghz ▰ be quiet! Straight Power 12 Platinum 1500W ▰ MSI Z790 Gaming Plus WiFi ▰ Define R5 ▰ Samsung 980 1TB & 3 x Kingston KC3000 4TB
▰ Kingston 64GB 2x32GB DDR5 5600MHz ▰ be quiet! BL097 ▰ Alienware AW3225QF

Permalänk
Vila i frid

Tänkte väl mest på att hitta.se's API kostar pengar.

Permalänk

Hej tack för alla fina svar!

Namn och nummer vet jag redan (medlemmarna i kåren)

Kan jag på något sätt i inbox tablen laga en column som när en ny rad (nytt sms) inkommer

Matcha numret som skickat det mot ett namn och sedan i tex en "sender" kolumn lägga in tex. olof

Så jag inte behöver plocka SenderNumber utan endast sender och så få namnet direkt?

Eller måste denna matchning göras "utanför" sql, att jag har inbox databasen med endast nummer och sedan en annan table som heter tex. "namn" och där har jag 2 kolumner ena "namn" och andra "nummer" och sedan mha den få rätt namn?

Kanske konstigt förklarat men är väldigt grön på detta.

Behöver bara få en "sida" som skulle typ med några sekunders mellanrum "uppdateras" med vad den hittar i databasen.

En vision är också att eftersom vi i "första" bilen (lednings/släckningsbilen) har en tablet (sony xperia tablet Z) så skulle denna kunna "se" på stationens skärm så chefen vet ifall folk kommer lite senare och kan dirigera dessa till andra uppgifter/fordon. Behöver i princip endast en printscreen på stationens skärm som man kan se över internet. Har fiber på stationen och 4g i tableten.

Dock är detta sekundärt och säkert lätt genomförbart bara man får själv displayen i hallen på stationen att fungera.

Permalänk
Medlem

Du kan i slå samman data med namn och nummer och göra det du kallar för matchingen i samma fråga som hämtar ut din övriga data.

Permalänk

Om du har namn och telefonnummer i en annan tabell än meddelandet så kan du joina den tabellen och på så vis få med namn när du plockar ut meddelandet för visning.

Krävs förstås att telefonnumret även lagras i tabellen för meddelanden. Måste finnas något gemensamt.

https://www.w3schools.com/sql/sql_join_inner.asp

För att uppdatera sidan med jämna mellanrum kan du använda ett enkelt javascript.

Timer
https://www.w3schools.com/jsref/met_win_settimeout.asp

Ladda om sidan
https://www.w3schools.com/js/js_window_location.asp

Visa signatur

Asus P8Z77-V PRO
Intel 3770k @ 4.1 GHZ, 16 GB DDR3 2400 MHZ
Geforce 780 GTX
Creative Sound Blaster X7, Qpad 1339, B&W MM-1

Permalänk
Skrivet av MickeBoy:

Du kan i slå samman data med namn och nummer och göra det du kallar för matchingen i samma fråga som hämtar ut din övriga data.

Tack.

Ni föreslår en webbsida, är det enklast sättet enligt er?

Koden som UMJ har postat högre upp är php om jag förstår rätt?

Ska läsa på lite om det då

Permalänk
Medlem

Ja, jag tycker att nivån på dina frågor är sådana att en webbsida kommer att räcka väldigt bra.

UMJ planerar för spridning och återanvändning av koden genom API:er och för eventuell framtida app-utveckling, men jag tycker inte att du verkar vara på den nivå att kunna planera för något sådant.

Mitt förslag blir att försöka att fixa en webbsida som läser data från databasen och presenterar denna data på det sätt du vill ha det.

Om du inte har pysslat med dessa grejor förut så skulle jag säga att du ska leta efter bra exempel och välja det som passar bäst för att bygga vidare utan att bry dig om tekniken. Du kan få hjälp oavsett vilket språk du väljer.

Permalänk

Sitter på w3schools och läsert om php.

Vill testa min anslutning till mysql server (den är också på raspberryn)

Denna kod står på w3schools (jag har ändrat username och password till det jag använder) och jag sparar den i index.php

<?php $servername = "localhost"; $username = "username"; $password = "password"; // Create connection $conn = new mysqli($servername, $username, $password); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?>

När jag sparar den och försöker gå in på localhost/index.php får jag

The localhost page isn’t working

localhost is currently unable to handle this request.
HTTP ERROR 500

Vad får jag ut av detta?

Kan det ha något att göra med att min PHP fil inte har permissions att använda min databas?
Hur lägger jag in något sånt?

Permalänk
Vila i frid
Skrivet av F@|)€r/\/:

HTTP ERROR 500

Vad får jag ut av detta?

Är "username" definierad som sql-användare, åtkomst till databas etc?

Om du är du totally lost, gör en capture med Wireshark och se var/när det skiter sig - eller posta här.

Permalänk
Skrivet av hasenfrasen:

Är "username" definierad som sql-användare, åtkomst till databas etc?

Om du är du totally lost, gör en capture med Wireshark och se var/när det skiter sig - eller posta här.

Jag har skapat en användare som heter php

create user php@localhost identified by 'password@losenord';

sedan följande

grant all on mysql.* to php@localhost;

EDIT: Hittade logfilen och googlade mitt error, visade sig att jag inte ens hade mysqli installerat!

Nu funkar det!

4 timmar åt helvete men man lär sig

Permalänk

Sitter och klurar på hur jag ska göra när jag vill matcha" SenderNumber" kolumnens data i "inbox" tablen med ett "namn" som har den "SenderNumber" i "namnlista" tablen.

när 0400123456 skickar ett sms så blir det en ny row i "inbox" och 0400123456 står i "SenderNumber" kolumnen på den rowen.

Nu vill jag när jag hämtar "SenderNumber" ur inbox på samma gång kolla om den nummern finns i "namnlista" tablen under "SenderNumber" kolumnen. Om den finns vill jag då ta personens namntext från "name" columnen på samma row som "SenderNumber" är och echoa den istället för nummern.

Har suttit och läst om JOINs men fattar inte, ser inget som skulle funka för mig.

Tips?

Permalänk
Medlem

Select i.SenderNumber, n.Name from inbox i
Join namnlista n on n.SenderNumber = i.SenderNumber

Lite osäker på syntaxen men något sånt skulle ge dig ett resultat med nummer och namn

Skickades från m.sweclockers.com

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Vila i frid

Det går nog inte att förklara bättre än vad som presenteras grafiskt @ https://www.w3schools.com/sql/sql_join.asp

Permalänk
Skrivet av kundun:

Select i.SenderNumber, n.Name from inbox i
Join namnlista n on n.SenderNumber = i.SenderNumber

Lite osäker på syntaxen men något sånt skulle ge dig ett resultat med nummer och namn

Skickades från m.sweclockers.com

Tack för svar!

Letade länge och väl på stackoverflow, hittade vad jag behövde!

SELECT inbox.ReceivingDateTime, namnlista.namn AS SenderNumber, inbox.Text FROM inbox INNER JOIN namnlista ON inbox.SenderNumber = namnlista.SenderNumber

Nu försöker jag med CSS få mina 3 echo rows att bli 3 olika "kolumner".
Alltså så att jag kan styra var de 3 olika $row echona alla börjar och inte så att de bara kommer efter varandra direkt.

Nu ser min kod ut såhär

$result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { // output data of each row while($row = mysqli_fetch_assoc($result)) { echo $row["ReceivingDateTime"], $row["SenderNumber"], $row["Text"],"<br>"; } } else { echo "0 results"; } mysqli_close($conn);

Och det ger på sidan

Receivingdatetimesendernumbertext

och jag vill ju ha det som

ReceivingDateTime sendernumber text

Och alla kolumner börjar på samma ställe.

Vetefan...

Permalänk
Medlem

Echo "<table><tr><td>".$row["ReceivingDateTime"]."</td><td>". osv osv
"</tr></table>";

Skickades från m.sweclockers.com

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Skrivet av kundun:

Echo "<table><tr><td>".$row["ReceivingDateTime"]."</td><td>". osv osv
"</tr></table>";

Skickades från m.sweclockers.com

Har fått det att fungera sådär långt, tack så mycket.

Men det verkar som nästa kolumn alltid är beroende av föregående kolumn? Om ett namn är kortare så börjar dennas text efter lika stort mellanrum som den med ett längre, dvs före.

123456 alexander textextext
654321 stig textextext

Texten och namnet ska ju ha liksom "fasta" startpunkter så det blir bra

Är det nånting jag måste göra i CSS eller? Trodde HTML skulle göra sånt själv?

Permalänk
Medlem

Du ska ha en table till all data. Inte en table per rad
<tr> har du för varje rad

Skickades från m.sweclockers.com

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem

<table> <tr> <td>$row["ReceivingDateTime"]</td> <td>$row["SenderNumber"]</td> <td>$row["Text"]</td> </tr> </table>

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Skrivet av kundun:

<table> <tr> <td>$row["ReceivingDateTime"]</td> <td>$row["SenderNumber"]</td> <td>$row["Text"]</td> </tr> </table>

Fick det fixat med att använda width: 200px; i min css fil

Nästa trubbel är att åäö inte verkar visas rätt på sidan fast de står i sql databasen.

Nåt med "encoding"?

Permalänk
Vila i frid

Här på sweclockers kör man med: (meta http-equiv="content-type" content="text/html; charset=UTF-8"/)

Mindre/större utbytt mot () för att inte förvirra din webläsare. Din output lär matcha vad du specat.

Permalänk
Skrivet av hasenfrasen:

Här på sweclockers kör man med: (meta http-equiv="content-type" content="text/html; charset=UTF-8"/)

Mindre/större utbytt mot () för att inte förvirra din webläsare. Din output lär matcha vad du specat.

Hmm satte in det där högst upp i index.php, ingen skillnad ÅÄÖ åäö är fortfarande ��� ��� :/

Permalänk
Medlem

Långskott kanske, men kolla i vilket format själva filen index.php är sparat i. Hade ett problem för längesen som löstes med det.

Skickades från m.sweclockers.com

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Medlem

@F@|)€r/\/:

Se även till att tabellernas teckenkodning i databasen är UTF8.

Visa signatur

🛜🫀: HP ProDesk 400 G3, i5 6500, 8GB DDR4, Intel X520-DA2
🐳🐧: AMD R5 3600 | Google Coral.ai | ASRock X570D4U-2L2T | Silverstone CS381 | 80GB DDR4 | 8 HDD BTRFS RAID1
⌨️🎮: R9 3900X | RTX 2080 LC | Acer XF270HUA | 96GB @ 3200 | MSI X570 MPG G EDGE WIFI | CORSAIR C70
🎞🎶: LG OLED55C8 | Epson TW3200 | Onkyo TX-NR646 | Infinity Reference 61/51 mk2 | Shield TV V2 | minhembio.com

Permalänk
Medlem

Ja just, dom kan ju va sparade i databasen fel från början också

Skickades från m.sweclockers.com

Visa signatur

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Permalänk
Skrivet av tuomi:

@F@|)€r/\/:

Se även till att tabellernas teckenkodning i databasen är UTF8.

Jag satte Collation på default UTF-8 på min TextDecoded column i inbox tablen.

I mysql workbench syns åäö i texten.

På sidan är det fortfarande fel

Permalänk
Medlem
Skrivet av hasenfrasen:

Här på sweclockers kör man med: (meta http-equiv="content-type" content="text/html; charset=UTF-8"/)

Mindre/större utbytt mot () för att inte förvirra din webläsare. Din output lär matcha vad du specat.

Skrivet av F@|)€r/\/:

Hmm satte in det där högst upp i index.php, ingen skillnad ÅÄÖ åäö är fortfarande ��� ��� :/

Din data är lagrad (eller har konverterats till) ett single-byte format, typ ISO-8859-1, men presenteras som UTF-8.
Vad du har i din <meta>-tag spelar ingen roll, det enda som betyder något är att webbservern skickar ut rätt Content-type header (t ex "Content-Type: text/html; charset=iso-8859-1")

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Hej tänkte bara återkoppla och säga tack samt att jag fått igång detta nu, funkar bra.

Även lagat (genom att googla mig fram) en android-app som skickar ett sms med texten KOMMER! när man trycker på en knapp, så det tar några sekunder att meddela att man kommer till brandlarmet.

Funkar jättebra, och har en tablet i huvudbrandbilen som kan visa min sida så man ser vem som är på väg lite senare ifall huvudstyrkan har ryckt ut från stationen.

Man kan åstadkomma mycket i dagens läge genom googlande, pillande och MYCKET trial and error...

Allt är gjort efter skolan på frivillig basis men det känns bra att få ihop något fungerande som man verkligen har nytta av.

Lycka till alla glada amatörer där ute