Anonymní profil peter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil peter – Programujte.comAnonymní profil peter – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:2601:26c:b408:1c...–

peter
MySQL › update zaznamu v historii
2. 12. 2016   #213861

 Jeste upravenou verzi o cas. Je to teda pomoci transekce

CREATE TEMPORARY TABLE `tmp` AS SELECT *,IF(`id_root` IS NOT NULL, `id_root`,`id_form`) AS `id_root_tmp` FROM `nz_forms` WHERE `id_form`=5;
UPDATE `tmp` SET `id_root`=`id_root_tmp`, `time`=CURRENT_TIMESTAMP WHERE `id_form`=5-- sem nacpat UPDATE od uzivateleALTER TABLE `tmp` DROP `id_root_tmp`;
ALTER TABLE `tmp` DROP `id_form`;
--ALTER TABLE `tmp` DROP `time`;
INSERT INTO `nz_forms` SELECT 0,`tmp`.* FROM `tmp`;
--INSERT INTO `nz_forms` SELECT 0,`tmp`.*,CURRENT_TIMESTAMP FROM `tmp`; -- musite zachovat poradi sloupcu, ja mam time jako posledni, id jako prvni
peter
MySQL › update zaznamu v historii
2. 12. 2016   #213859

 Mozna by to slo takhle...

CREATE TEMPORARY TABLE `tmp` AS SELECT `nz_forms`.*,`nz_forms`.`id_form` as `id_root_tmp` FROM `nz_forms` WHERE `id_form`=5;# 1 row affected.
UPDATE `tmp` SET `id_root`=`id_root_tmp` WHERE `id_form`=5;
-- sem nacpat UPDATE od uzivatele
ALTER TABLE `tmp` DROP `id_form`;# 1 row affected.
ALTER TABLE `tmp` DROP `id_root_tmp`;# 1 row affected.
INSERT INTO `nz_forms` SELECT 0,`tmp`.* FROM `tmp`;
peter
MySQL › update zaznamu v historii
2. 12. 2016   #213858

Dokonce tu vidim jeste jeden problem, id by melo byt null nebo 0 nebo -1, proste, aby provedl autoincrement pro INSERT.

Co jsem koukal na net, tak to resi pres table.schema, ziskani jmen sloupcu, tak to bych nechtel.

Pokud to nejde jednoduse, tak bych to udelal asi pres php i se jmeny sloupcu. Ale tomu jsem se chtel vyhnout.

peter
MS SQL › pravidelný sběr dat
2. 12. 2016   #213857

??? Neznam MS server

Na linuxu se da php soubor spustit pres cron (crontab). Funguje to podobne, jako ve windows sheduler. Nastavis soubor, cas, opakovani a frci to.

Pres web prohlizec je zas mozne udelat javascript, ktery kazdych X sekund otevira stranku, treba do iframu nebo meni src pro script tag nebo javascript httpRequest do promenne. To je alternativa.
Je vsak treba pocitat s tim, ze script treba vypadne, odpojis kabel a pak je treba upravit prepocitavani podle rozdilu casu. Cas by mel byt ten, ktery ma server. Program by mel taky pohlidat, aby rozdil casu nebyl prilis velky a kdyz bude, aby pozadoval od uzivatele nejake heslo, kterym takovou zmenu povolis.
Nebo pripadne, aby prepocital data jen pro max tech t+5s a dalsi pripocitani probehlo az v dalsim 5s intervalu. Cili treba po 1 min, kdyz to spustis, tak se pripocita jen 5s a ne rozdil 1 min. Jestli treba delas nejakou hru.
Take bys mel zajistit, aby program nesel spustit 10x po sobe, cili, asi si zapsat cas posledniho vyhodnocovani. Kutilove totiz najdou jmeno scriptu a klidne ho v prohlizeci spusti 100x. U hry by ti provedl pak 100 tahu :)

Treba, ja si ted hral se simulaci ws socket serveru v php pro text/video chat (skype/icq). Pouzil jsem nejaky example v php. Php soubor, ktery bezel v nekonecne smyscce. Bylo treba nastavit v php, ze nema program vypnout po default time-limitu. Nevim, zda bych toto reseni ale pouzil. Spis bych pouzil nejaky hotovy ws-server binarku (u win exe soubor) nez pomale php. Ale pro testovani to bylo ale dostacujici. Nemusel jsem instalovat cizi soft, kde nevis, co vlastne dela jeste dalsiho v pc.

peter
MySQL › update zaznamu v historii
2. 12. 2016   #213852

A nebo, kdyby slo pri INSERT vlozit zrovana id id_root jako prave vytvarene id?

peter
MySQL › update zaznamu v historii
2. 12. 2016   #213851

Souvisi to s predchozim tematem http://programujte.com/…-s-historii/

Mam zaznamy v db, napr.:
Prijmeni * = ddd xxa
Jmeno * = ddd yxa
Prac0 = ddd zxa
Prac1 = ddd axa
Stav = rozepsano
Zm. datum = 2016-11-25 12:26:54
Zm. = uziv. jmeno
Zm. = uziv. id
Id * = 3
Id root = 3

Jedna se mi o konec, kde pro INSERT je tam
Id * = 3
Id root = null

Pri UPDATE potrebuji pridat novy zaznam tak, aby mi do Id root, pokud je NULL dal. Pokud neni, aby zustalo Id root. A pokud uzivatel zadal id_root, aby pouzil jeho. Ale, zas, pokud uzivatel nema prava meni Id_root, aby to neprepsalo. Takze jsem to vymyslel tak, ze pouziji transakce
 

$query[]  = "
CREATE TEMPORARY TABLE $tab_tmp
AS
SELECT * FROM $tab WHERE $key=$value
";
$query[]  = $SQL->createUpdate($tab,$data,$id_name);
$query[]  = "
INSERT INTO $tab SELECT * FROM $tab_tmp
";
$query[]  = "
DROP TEMPORARY TABLE $tab_tmp
";

Jenze, SELECT * mi vybere vsechny sloupce a ja bych potreboval pro ID pouzit formulku

IF(c.`id_root` IS NOT NULL, c.`id_root`,c.`id_form`) AS `id_root`

Update pak nasledne uz vlozi spravne hodnoty.
Kdyz to tam pridam s carkou, tak to bude novy sloupec. A pak by nesedel pocet sloupcu. A prave tam nechci vypisovat vsechny jmena sloupcu.

Jak to udelat?

peter
PHP › Změna dat v MySQL databázi…
2. 12. 2016   #213849

1.  (zruseno)2. php kod zpracovavej nad html, do html ho jen vypisuj pres echo. Tohle tam proste uz nema, co delat. Podobne dole kod '...<div class=week>...'

<body>
<?php

if ($op=='saveup') {
                    $id=$_GET['id'];
                    $row=mysqli_query($conn,"SELECT * FROM days_tbl WHERE day_id='$id'");
                    $st_row=mysqli_fetch_array($row);
                    ?>

3. kdyz pouzivas $op s jedinu moznou hodnotou, tak zkus pouzivat elseif nebo switch

if ($op=='saveup') {...}
elseif ($op=='delete') {...}
elseif (...) {...}

4. pro sql prikazy pouzivej vlastni funkci. To se sikne treba pro ladeni. Pridej tam funkci, ktera ti vypise i sql error. Pripadne exho, ktere ti vypise i query, abys videl, ze je dotaz fakt spravne. Pokud pouzivas jedine pripojeni k db, neni potreba jej uvadet.

function sql($query) {return mysqli_query($query) or die(mysqli_error());}

Navic, ty mas na jednom radku pripojeni ulozene v promenne $link, ale pro ostatni funkce pouzivas pripojeni z promenne $conn, kde ale nemas nic!

 $link = mysqli_connect('localhost','root',''); // pripojeni k db
    mysqli_set_charset($link, "utf8"); //sql_funkce1(pripojeni, dotaz)
$a_sql=mysqli_query($conn,"INSERT INTO days_tbl VALUES('','$day','$date','$break','$main_food','$soup')"); // sql_funkce2(pripojeni, dotaz)

5. Kdyby te zajimalo, co je v post nebo get, vypisuje se to pres  

var_dump($_POST);
var_dump($_GET);

6. Kde mas error_reposting? Bez toho preci nemuzes seriozne ladit! 

@ini_set("error_reporting", E_ALL); // varianta 2
@ini_set("display_errors", "on");  // varianta 3
error_reporting(E_ALL);		//chyby = on, varianta 1
ob_start();

2b. Jeste by se dalo pouzit sablonovani. Ze pouzijes treba
$arr = array();
$arr['aaa'] = 'bbb';
// $str = '<div>aaa</div>';
// $out = str_replace(array_keys($arr), $arr, $str);
function fn_cb(&$value, $key){$value = '{'.$value.'}';}
$str = '<div>{aaa}</div>';
$out = str_replace(array_walk(array_keys($arr),'fn_cb'), array_values($arr), $str); // netestovano, lze resit i pres foreach+str_replace
echo $out;

peter
PHP › Náhrada eregi
2. 12. 2016   #213848

http://php.net/preg_match - spousta ruznych prikladu
http://php.net/str_pos - spousta prikladu na hledani stringu ve stringu, protoze to dela uplne to same, jako to, co tam mas pres eregi
http://php.net/eregi

google.com, tam napises do okenka: php example preg_match, a objevi se dalsi spousta prikladu

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý