Výpis dat z Mysql
56 příspěvků · strana 2 z 3
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
mám někde chybu ve "vyčítání z XML souboru do databáze? Do databáze to sice zapisuje, ale nulu. <?php $server = "localhost"; // adresa MySQL serveru $database = "xxxx"; // prihlasovaci jmeno do databaze $heslo = "xxxx"; // prihlasovaci heslo do databaze $dbname = "xxxx"; //nazev databaze $link = mysql_connect("$server", "$database", "$heslo") or die ("Nepovedlo se spojit s databazi."); $db = mysql_select_db("$dbname", $link) or die("Nepovedlo se otevrit databazi."); $raw_udaje["penize"] = htmlspecialchars($_GET['penize'], ENT_QUOTES, "UTF-8"); $obsah=file_get_contents("http://109.80.22.31/xml.xml"); $xml = new SimpleXMLElement($obsah); $penize = $xml->xpath('/sds/snmp/s0_2/money'); mysql_query("INSERT INTO sds (penize) values ('".$raw_udaje["penize"]."');") or die('Mas tam chybu : '.mysql_error()); ?> Vidím to na chybu v tom čtení z XML, ale nevím kde. Někde chybí toto asi tohle : $penize[0] Prosím o radu, díky.
-
našel jsem ještě tohle: wb import from XML ale nenašel jsem k tomu nějaký srozumitelný návod, jak na to.
-
tak jsem spáchal tohle: Sice to odešle, ale v databázi jsou opšt samé nuly. <? // vycitani dat ze souboru XML $xml = simplexml_load_file('http:// IP /xml.xml'); $plyn_imp = $xml->snmp->s0_0->imdiff; $plyn_celkem_dole = $xml->snmp->s0_0->text; $plyn_cena = $xml->snmp->s0_0->money; $plyn_aktual = $xml->snmp->s0_0->act; $elektrika_imp = $xml->snmp->s0_2->imdiff; $elektrika_celkem = $xml->snmp->s0_2->text; $elektrika_cena = $xml->snmp->s0_2->money; $elektrika_aktual = $xml->snmp->s0_2->act; $voda_imp = $xml->snmp->s0_1->imdiff; $voda_celkem = $xml->snmp->s0_1->text; $voda_cena = $xml->snmp->s0_1->money; $voda_aktual = $xml->snmp->s0_1->act; // pripojeni k databazi $server = "localhost"; // adresa MySQL serveru $database = "xxxx"; // prihlasovaci jmeno do db $heslo = "xxxx"; // heslo $dbname = "xxxx"; //nazev db $link = mysql_connect("$server", "$database", "$heslo") or die ("Nepovedlo se spojit s databázĂ."); $db = mysql_select_db("$dbname", $link) or die("Nepovedlo se otevĹ™Ăt databázi."); $raw_udaje["plyn_imp"] = htmlspecialchars($_GET['plyn_imp'], ENT_QUOTES, "UTF-8"); $raw_udaje["plyn_celkem"] = htmlspecialchars($_GET['plyn_celkem'], ENT_QUOTES, "UTF-8"); $raw_udaje["plyn_cena"] = htmlspecialchars($_GET['plyn_cena'], ENT_QUOTES, "UTF-8"); $raw_udaje["plyn_aktual"] = htmlspecialchars($_GET['plyn_aktual'], ENT_QUOTES, "UTF-8"); $raw_udaje["elektrika_imp"] = htmlspecialchars($_GET['elektrika_imp'], ENT_QUOTES, "UTF-8"); $raw_udaje["elektrika_celkem"] = htmlspecialchars($_GET['elektrika_celkem'], ENT_QUOTES, "UTF-8"); $raw_udaje["elektrika_cena"] = htmlspecialchars($_GET['elektrika_cena'], ENT_QUOTES, "UTF-8"); $raw_udaje["elektrika_aktual"] = htmlspecialchars($_GET['elektrika_aktual'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_imp"] = htmlspecialchars($_GET['voda_imp'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_celkem"] = htmlspecialchars($_GET['voda_celkem'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_cena"] = htmlspecialchars($_GET['voda_cena'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_aktual"] = htmlspecialchars($_GET['voda_aktual'], ENT_QUOTES, "UTF-8"); mysql_query("INSERT INTO xxx (plyn_imp, plyn_celkem, plyn_cena, plyn_aktual, elektrika_imp, elektrika_celkem, elektrika_cena, elektrika_aktual, voda_imp, voda_celkem, voda_cena, voda_aktual) VALUES ('".$raw_udaje["plyn_imp"]."' ,'".$raw_udaje["plyn_celkem"]."' ,'".$raw_udaje["plyn_cena"]."' ,'".$raw_udaje["plyn_aktual"]."' ,'".$raw_udaje["elektrika_imp"]."' ,'".$raw_udaje["elektrika_celkem"]."' ,'".$raw_udaje["elektrika_cena"]."' ,'".$raw_udaje["elektrika_aktual"]."' ,'".$raw_udaje["voda_imp"]."' ,'".$raw_udaje["voda_celkem"]."' ,'".$raw_udaje["voda_cena"]."' ,'".$raw_udaje["voda_aktual"]."');") or die('Chyba: '.mysql_error()); ?>
-
A proč tam nedáváš hodnoty proměnných $plyn_imp, $plyn_celkem_dole, ... ? Když už to doluješ z XML, tak bys to možná mohl i použít.
-
jojo, zapomnel jsem mysql_query("INSERT INTO sds ($plyn_imp , $plyn_celkem, $plyn_cena, $plyn_aktual, $elektrika_imp, $elektrika_celkem, $elektrika_cena, $elektrika_aktual, $voda_imp, $voda_celkem, $voda_cena, $voda_aktual) ted to pise toto: Chyba: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '385416142 , , 9301.60 , 0.0 , 44991, 1398.910 , 6019.56 , 0.800 , ' at line 3
-
V některé z těch proměnných máš prázdný řetězec. To ošetříš tak, že když je vytváříš $plyn_celkem_dole = $xml->snmp->s0_0->text; tak to nahradíš například takto: $plyn_celkem_dole = $xml->snmp->s0_0->text*1; Tím se to převede na číslo, i kdyby tam byl řetězec.
-
nikde nic prázdného není 109.80.22.31/xml.xml
-
Ale je. Definuješ proměnnou $plyn_celkem_dole= $xml->snmp->s0_0->text; a používáš nedefinovanou proměnnou $plyn_celkem
-
$xml = simplexml_load_file('http:// IP /xml.xml'); $plyn_imp = $xml->snmp->s0_0->imdiff*1; $plyn_celkem = $xml->snmp->s0_0->text*1; $plyn_cena = $xml->snmp->s0_0->money*1; $plyn_aktual = $xml->snmp->s0_0->act*1; $elektrika_imp = $xml->snmp->s0_2->imdiff*1; $elektrika_celkem = $xml->snmp->s0_2->text*1; $elektrika_cena = $xml->snmp->s0_2->money*1; $elektrika_aktual = $xml->snmp->s0_2->act*1; $voda_imp = $xml->snmp->s0_1->imdiff*1; $voda_celkem = $xml->snmp->s0_1->text*1; $voda_cena = $xml->snmp->s0_1->money*1; $voda_aktual = $xml->snmp->s0_1->act*1; $server = "localhost"; // adresa MySQL serveru $database = "xxxx"; // prihlasovaci jmeno do db $heslo = "xxxx"; // heslo $dbname = "xxxx"; //nazev db $link = mysql_connect("$server", "$database", "$heslo") or die ("Nepovedlo se spojit s databázĂ."); $db = mysql_select_db("$dbname", $link) or die("Nepovedlo se otevĹ™Ăt databázi."); $raw_udaje["plyn_imp"] = htmlspecialchars($_GET['plyn_imp'], ENT_QUOTES, "UTF-8"); $raw_udaje["plyn_celkem"] = htmlspecialchars($_GET['plyn_celkem'], ENT_QUOTES, "UTF-8"); $raw_udaje["plyn_cena"] = htmlspecialchars($_GET['plyn_cena'], ENT_QUOTES, "UTF-8"); $raw_udaje["plyn_aktual"] = htmlspecialchars($_GET['plyn_aktual'], ENT_QUOTES, "UTF-8"); //60 $raw_udaje["elektrika_imp"] = htmlspecialchars($_GET['elektrika_imp'], ENT_QUOTES, "UTF-8"); $raw_udaje["elektrika_celkem"] = htmlspecialchars($_GET['elektrika_celkem'], ENT_QUOTES, "UTF-8"); $raw_udaje["elektrika_cena"] = htmlspecialchars($_GET['elektrika_cena'], ENT_QUOTES, "UTF-8"); $raw_udaje["elektrika_aktual"] = htmlspecialchars($_GET['elektrika_aktual'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_imp"] = htmlspecialchars($_GET['voda_imp'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_celkem"] = htmlspecialchars($_GET['voda_celkem'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_cena"] = htmlspecialchars($_GET['voda_cena'], ENT_QUOTES, "UTF-8"); $raw_udaje["voda_aktual"] = htmlspecialchars($_GET['voda_aktual'], ENT_QUOTES, "UTF-8"); mysql_query("INSERT INTO sds ( $plyn_imp,$plyn_celkem,$plyn_cena,$plyn_aktual, $elektrika_imp,$elektrika_celkem,$elektrika_cena,$elektrika_aktual, $voda_imp,$voda_celkem,$voda_cena,$voda_aktual ) VALUES ('".$raw_udaje["plyn_imp"]."' ,'".$raw_udaje["plyn_celkem"]."' ,'".$raw_udaje["plyn_cena"]."' ,'".$raw_udaje["plyn_aktual"]."' ,'".$raw_udaje["elektrika_imp"]."' ,'".$raw_udaje["elektrika_celkem"]."' ,'".$raw_udaje["elektrika_cena"]."' ,'".$raw_udaje["elektrika_aktual"]."' ,'".$raw_udaje["voda_imp"]."' ,'".$raw_udaje["voda_celkem"]."' ,'".$raw_udaje["voda_cena"]."' ,'".$raw_udaje["voda_aktual"]."');") or die('Chyba: '.mysql_error()); ?> skript hodnoty zřejmě přečtě ale napošle do db a hlásí tuto chybu : Chyba: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0,753,9301,0, 52398,1399,6025,0, 0,0,0,0 ) VALUES ' at line 3 ale nikde ji nevidím
-
odstranil jsem "dolary" to bylo asi špatně. Posílá to, ale opět jen samé nuly. mysql_query("INSERT INTO sds ( plyn_imp,plyn_celkem,plyn_cena,plyn_aktual, elektrika_imp,elektrika_celkem,elektrika_cena,elektrika_aktual, voda_imp,voda_celkem,voda_cena,voda_aktual )
-
Není možné že to je proto, že mám v db více sloupců do kterých tímto skriptem neposílám? A posílám jiným?
-
tak jiný skript, ten funguje. Ale proč nefungoval ten predchozí? $xml = simplexml_load_file('http:// IP/xml.xml'); $plyn_imp = $xml->snmp->s0_0->imdiff*1; $plyn_celkem = $xml->snmp->s0_0->text*1; $plyn_cena = $xml->snmp->s0_0->money*1; $plyn_aktual = $xml->snmp->s0_0->act*1; $elektrika_imp = $xml->snmp->s0_2->imdiff*1; $elektrika_celkem = $xml->snmp->s0_2->text*1; $elektrika_cena = $xml->snmp->s0_2->money*1; $elektrika_aktual = $xml->snmp->s0_2->act*1; $voda_imp = $xml->snmp->s0_1->imdiff*1; $voda_celkem = $xml->snmp->s0_1->text*1; $voda_cena = $xml->snmp->s0_1->money*1; $voda_aktual = $xml->snmp->s0_1->act*1; try { $db = new PDO("mysql:host=localhost;dbname=dbname", "name", "passw"); $sql = $db->exec("INSERT INTO `tab` (`plyn_imp`,`plyn_celkem`,`plyn_cena`,`plyn_aktual`, `elektrika_imp`,`elektrika_celkem`,`elektrika_cena`,`elektrika_aktual`, `voda_imp`,`voda_celkem`,`voda_cena`,`voda_aktual`) VALUES ($plyn_imp,$plyn_celkem,$plyn_cena,$plyn_aktual, $elektrika_imp,$elektrika_celkem,$elektrika_cena,$elektrika_aktual, $voda_imp,$voda_celkem,$voda_cena,$voda_aktual)"); $db = null; } catch (PDOException $e) { // obsluha pripadne chyby pri praci s databazi echo "Pri praci s databazi doslo k chybe: " . $e->getMessage(); } ?>
-
- Proč tam máš pole $_GET? - K čemu je pole $raw_udaje? - Proč místo seznamu proměnných dáváš do INSERTu seznam hodnot?
-
Mám podobný skript který již používám tak jsem jej "upravil" -nevím -nevím -má chyba :-)
-
$xml = simplexml_load_file('http:// IP /xml.xml'); $plyn_imp = $xml->snmp->s0_0->imdiff*1; $plyn_celkem = $xml->snmp->s0_0->text*1; $plyn_cena = $xml->snmp->s0_0->money*1; $plyn_aktual = $xml->snmp->s0_0->act*1; $link = mysql_connect("$server", "$database", "$heslo"); $db = mysql_select_db("$dbname", $link); mysql_query("INSERT INTO sds (plyn_imp, plyn_celkem, plyn_cena, plyn_aktual) values ($plyn_imp, $plyn_celkem, $plyn_cena, $plyn_aktual);");
-
hmm jednoduché a funguje to. Ale nebyl jsem daleko. :-) Děkuji
-
Není zač. Ani mi to nedalo moc práce. Jen jsem vzal kusy tvého kódu a poskládal ve správném pořadí. Schválně jsem to nedělal celé, aby sis zbytek dodělal za domácí úkol :-) A teď vážně: Aby se z příkladu neztratila přehlednost. Účelem poradny není vyřešit úkol, ale navést správným směrem.
-
všude na diskuzích jsem četl jak výpis z XML do db je složitý. Skripty stořádkové a nebyl jsem, z nich nijak moudrý. A ty to napíšeš na deset řádků. Príma.
-
Jsem tím pověstný. Rád píšu jednořádkové programy tam, kde jiní plýtvají 50 řádky. Uvedený program by se dal ještě zkrátit, ale výsledek by nemusel být jednoduše pochopitelný. Hodně lidí hledá v programování nějaké složitosti, ale většinou stačí využít sílu dostupného jazyka. Je důležité pochopit rozdílnost paradigmat v různých jazycích a vytěžit z nich maximum jejich kombinací. Výsledné programy pak dosahují podobného výkonu, jako by celá aplikace byla pracně napsána ve strojovém kódu. Hodně mi pomohlo studium Lispu. Je v něm patrný tlak na čistotu programování, protože nežádoucí praktiky se tam dělají obtížněji než žádoucí.
-
Nedalo mi to a zkusil jsem si jednu z možných zkrácených verzí uvedeného programu: $raw_udaje=array( 'plyn_imp' => $xml->snmp->s0_0->imdiff*1, 'plyn_celkem' => $xml->snmp->s0_0->text*1, 'plyn_cena' => $xml->snmp->s0_0->money*1, 'plyn_aktual' => $xml->snmp->s0_0->act*1); $query="INSERT INTO sds (".implode(',',array_keys($raw_udaje)).") values (".implode(',',array_values($raw_udaje)).");"; Výhodou je, že pokud přidáš nějakou hodnotu do pole $raw_udaje, přidá se automaticky i do SQL dotazu. Funguje to však jen pro čísla, pro řetězce (nebo pro mix) bych to musel napsat jinak.
-
Kite, prosím je ještě nějaký skript který mi vyčte z databáze třeba každý druhý, nebo třeba pátý záznam? Mám tu od Tebe jeden skript. Tento vypisuje posledních 20 záznamů. Vím, že se dá dosadit třeba DESC LIMIT 15,20 a čte to od 15tého řádku dvacet hodnot. Ale nevím co použít na výpis který potřebuji. Díky <? $spojeni=mysql_connect("localhost","jmeno","heslo"); $co="SELECT datum FROM data_1 ORDER BY datum DESC LIMIT 20;"; $navrat=mysql_db_query("energie", $co, $spojeni); while (list( $datum) = mysql_fetch_row($navrat)){ $datum1[]=$datum; } $datum1=implode("','",array_reverse($datum1)); echo <<<EOT xAxis: { categories: ['$datum1'], }, EOT; ?>
-
V SQL neexistují pojmy "každý druhý, nebo třeba pátý záznam", protože obecně je možné získat záznamy v různém pořadí. Můžeš však chtít záznamy s ID dělitelnými dvěma, třemi nebo pěti. Možná tuším, co chceš, i když má křišťálová koule mi dává jen mlhavé informace. Pokud měříš v intervalu třeba 10 minut, chceš vytvořit graf denního průběhu, ve kterém bude z každé hodiny jen jedna hodnota. Možná když napíšeš, čeho chceš docílit, najdu vhodné řešení. Pokud bys chtěl třeba průměrnou hodnotu z každé hodiny, použiješ funkci AVG() a k tomu GROUP BY po hodinách.
-
Ta koule asi není tak mlhavá. Posílám každých 5 min. Ale třeba na graf který ukazuje posledních 24 hodin, mi stačí po každé hodině. A jak píšeš průměr z každé hodiny, to by bylo perfektní. Kouknu na ty funkce, zatím díky.
-
Neměl bych si spíše udělat v databázi další sloupec třeba Průměr_hodina a do něj zapisovat po každém 12tém měření (pokud posílám po 5min.) vypočítanou průměrnou hodnotu? A až poté zapisovat do grafu?
-
Napadá mě tento SQL dotaz, který jen sypu z rukávu bez testování: SELECT hour(timestamp) AS hodina, avg(teplota) AS T1 from mereni WHERE date(timestamp)=date(now()) GROUP BY hodina ORDER BY hodina;