• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównanie wyniku z obliczeń do wartości w bazie danych.

Object Storage Arubacloud
0 głosów
633 wizyt
pytanie zadane 12 lutego 2017 w SQL, bazy danych przez oprych12 Początkujący (300 p.)
Witam. Jako że jestem nowicjuszem, jeżeli chodzi o webmastering, będę starał się określić problem jak najlepiej potrafię. Tworzę program, który wykonuje obliczenia gwintu. Wartością wyniku niech będzie średnica śruby. Mam stworzoną bazę danych z wartościami średnic oraz rodzajami śrub. Chciałbym, aby po wykonaniu obliczeń program porównał wynik (średnicę) i wybrał najbardziej zbliżoną wartość z bazy danych oraz wyrzucił na ekran nazwę wybranej śruby. Dodam, iż do obliczeń posłużyłem się Javascriptem. Mam nadzieję, że problem opisałem w miare przejrzyście. Z góry dziękuję i proszę o pomoc.
komentarz 12 lutego 2017 przez oprych12 Początkujący (300 p.)
Przykład: Obliczona wartość 15 mm. W tabeli mamy 3 wartości 5, 10, 15 mm. W tym wypadku ma wybrać wartość 15 mm.

2 odpowiedzi

0 głosów
odpowiedź 12 lutego 2017 przez mtk3d Nałogowiec (46,690 p.)
wybrane 12 lutego 2017 przez oprych12
 
Najlepsza

Masz dwie opcje w takim razie. Możesz skorzystać z AJAX'a, albo przy pomocy JS generować link do podstrony w PHP. Wtedy w pliku PHP, przy pomocy zapytania wybierasz z bazy najbliższą wartość.

SELECT ... WHERE `srednica` <= $wyliczonaSrednica ORDER BY `srednica` DESC LIMIT 1

To zapytanie zwróci najbliższy mniejszy wymiar. Możesz np. zwrócić wtedy 3 kolejne wymiary, do wyboru.

komentarz 12 lutego 2017 przez oprych12 Początkujący (300 p.)
<html>
<body>
<form action="index.php" method="get">
<input  name="wartosc" value="200" />
</form>
<?php
mysql_connect("localhost","root","");
mysql_select_db("stale");
$dobliczone = $_GET['wartosc'];
$wynik = mysql_query("SELECT * FROM gwinty WHERE dztabeli <= $dobliczone ORDER BY kr DESC LIMIT 2")
or die('Błąd zapytania');

if(mysql_num_rows($wynik) > 0) {
    while($r = mysql_fetch_assoc($wynik)) {
		echo $r['Znakstali'];
        echo $r['kr'];   
    }   
}

?> 
</body>
</html>

Wyrzuca: "Notice: Undefined index: wartosc in C:\xampp\htdocs\index.php on line 9
Błąd zapytania".

Dlaczego nie pobiera zmiennej z inputa?

komentarz 12 lutego 2017 przez mtk3d Nałogowiec (46,690 p.)

Bo PHP działa tylko przy przeładowaniu, a nie tak jak JS cały czas.

Musisz dać w form przycisk, a cały kod PHP umieścić w instrukcji warunkowej, bo pobierasz wartość z GET, ale jeszcze jej nie wysłałeś, przez co wyrzuca błąd. W instrukcji trzeba sprawdzić, czy zmienna istnieje.

<?php

if(isset($_GET['wartosc']))
{
    //tutaj cały kod php
}

?>

 

komentarz 12 lutego 2017 przez mtk3d Nałogowiec (46,690 p.)
I jeszcze taka mała rada, korzystaj z mysqli, albo PDO. Mysql od PHP7 już nie jest dostępny.
komentarz 12 lutego 2017 przez oprych12 Początkujący (300 p.)

Dzięki!!! Kod pobiera wartość i zwraca dobierając np. odpowiedni rodzaj stali o mniejszej lub równej wartości. Natomiast pojawił się większy problem. Staram się pobrać obliczoną wartość i dograć ją do kodu PHP. Nie jestem jednak pewien, czy jest to możliwe. Jak można to wykonać?

<html>
<body>
<script type="text/javascript">
function solve() {
 var obliczenie = document.getElementsByName("opcja");

				var obciazenie = document.getElementById("Q").value;
				var naprezenie = document.getElementById("kr").value;
				var srednicad1 = Math.sqrt(parseFloat(obciazenie) * 1000 / parseFloat(naprezenie)) * 1.13;
				
					srednicad1 = document.getElementById('wynik').innerHTML = srednicad1;
					
	return false;}
</script>
<form>
Q:<input type="text" name="opcja"  id="Q" />
kr:<input type="text" name="opcja"  id="kr" />
<br>

<input type="submit" value="POKAZ" onclick="return solve()" />

<div id="wynik" name="srednicad1" ></div>

</form>


<?php
if(isset($_GET['srednicad1']))
{
mysql_connect("localhost","root","");
mysql_select_db("stale");
$dobliczone = ($_GET['srednicad1']);
$wynik = mysql_query("SELECT * FROM stale WHERE kr <= $dobliczone ORDER BY kr DESC LIMIT 1")
or die('Błąd zapytania');
 
if(mysql_num_rows($wynik) > 0) {
    while($r = mysql_fetch_assoc($wynik)) {
        echo $r['Znakstali'];
        echo $r['kr'];   
    }   
}
}
?>
</body>
</html>

 

0 głosów
odpowiedź 12 lutego 2017 przez maciej.tokarz Nałogowiec (27,280 p.)

Cześć!

Odnośnie wyszukania najbliższych średnic można np. zastosować taki sposób:


CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS foo (id INT, phi FLOAT);
TRUNCATE foo;
INSERT INTO foo VALUES (1, 23.29);
INSERT INTO foo VALUES (2, 91.33);
INSERT INTO foo VALUES (3, 78.45);
INSERT INTO foo VALUES (4, 25.26);
INSERT INTO foo VALUES (5, 11.13);
INSERT INTO foo VALUES (6, 3.22);
INSERT INTO foo VALUES (7, 24.88);
INSERT INTO foo VALUES (8, 25.22);
INSERT INTO foo VALUES (9, 48.44);
INSERT INTO foo VALUES (10, 38.39);

SET @pattern = 25.24;

SELECT id, phi, ABS(phi - @pattern) AS distance
FROM foo
ORDER BY distance
LIMIT 1

M.

komentarz 12 lutego 2017 przez maciej.tokarz Nałogowiec (27,280 p.)

W zasadzie można by DECIMAL zastosować:

CREATE TABLE IF NOT EXISTS foo (id INT, phi DECIMAL(4,2));

M.

Podobne pytania

+1 głos
2 odpowiedzi 94 wizyt
0 głosów
0 odpowiedzi 70 wizyt
0 głosów
1 odpowiedź 223 wizyt
pytanie zadane 30 stycznia 2022 w PHP przez trixter310 Obywatel (1,440 p.)

92,568 zapytań

141,422 odpowiedzi

319,640 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...