Naučit se PHP Naučit se PHP
Pouze tento týden až 80 % sleva na vývoj webů v PHP.
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"
Avatar
Jakub Štolbaa:5.5.2018 10:36

Ahoj všichni, mám dotaz ohledně updatu databáze. Potřeboval bych pomoc s updatem databáze ve WordPressu, protože se snažím udělat svůj vlastní plugin na správu s pluginy. Při vypnutí pluginů si ukládám z wp_option active_plugins do své tabulky záznam aktivních pluginů, abych mohl zpátky zapnout všechny vypnuté pluginy. Teď je tu ale malý zádrhel. Při vypnutí aktivních pluginů si můžu ve WordPressu například zapnout další pluginy a kdybych je chtěl také vypnout tak se mi objeví další záznam v databázi, ale já bych potřeboval ten záznam jenom přepsat, ale ponechat ty staré záznamy z předešlých vypnutých pluginů. Jednoduše řečeno aktualizovat řádek v databázi bez ztráty starších záznamů. Pokud někdo pomůže, budu velice vděčný :)

 
Odpovědět 5.5.2018 10:36
Avatar
gorri
Člen
Avatar
Odpovídá na Jakub Štolbaa
gorri:5.5.2018 17:54

Nevím jestli jsem tě pochopil správně ale podle mě stačí jen toto

UPDATE tabulka
SET sloupec = hodnota, ...
WHERE identifikátor daného řádku;
Nahoru Odpovědět 5.5.2018 17:54
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Jakub Štolbaa:5.5.2018 20:53

Tady je problém, že ten identifikátor je vždy jiný, protože po zapnutí pluginů se tato tabulka vymaže a záznam začíná s jiným id po vypnutí pluginů a naplnění novým záznamem deaktivovaných pluginů

 
Nahoru Odpovědět 5.5.2018 20:53
Avatar
Jakub Štolbaa:5.5.2018 21:00

A to není hlavní problém, ale hlavní je, jakým způsobem udělat aby staré záznamy v tom řádku zůstaly a nenahradili se novými, nýbrž připojili k těm starým

 
Nahoru Odpovědět 5.5.2018 21:00
Avatar
gorri
Člen
Avatar
Odpovídá na Jakub Štolbaa
gorri:6.5.2018 11:56

Identifikator vloz do url a z nej to pak tahej
napr

<a href="index.php?aktivuj-plugin=plugin&id-plugin=5">Aktivuj</a>

tímto máš definované ID pluginu, které je přímo v odkazu
a nyní

UPDATE tabulka
SET sloupec = hodnota, ...
WHERE $_GET['id-plugin'];

Pochopitelně aby jsi tam neměl injection, tak to musíš mít trochu upravé ale základ je toto.
tu druhou část asi nechápu. Aktivuješ plugin a v DB se přepíše neaktivní na aktivní (řekněme 2 za 1) a ty chcecš aby tento zápis zůstal když deaktivuješ plugin a když ho znovu aktivuješ aby se vytvořil nový?
Jde ti o historii aktivace a deaktivace?

Nahoru Odpovědět 6.5.2018 11:56
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Roman Havránek:6.5.2018 23:12

Tak uplně nechápu o co ti vlastně jde.
Vždyť stačí mít pro každý plugin právě jedno ID, které bude unikátní a měnit pouze jestli je zapnutý nebo vypnutý.
Tohle docílíš pomocí SQL UPDATE, a můžeš to narvat klidně jako odkazy (tlačítka)
DEMO:

echo ('<a href="zapni.php?vyber-plugin=' . $idpluginu. '&akce='. $akce .' " > Zapni / vypni </a> ');

Do $idpluginu si getneš ID z databáze všech pluginů, a akci si getneš například 1 == aktivace nebo 0 == deaktivace pluginu.

Dá se vyřešit jednoduchou funkcí například:

public function zjistiStav();

A podle toho jaký bude stav v databázi (1 or 0) budeš vypínat a nebo zapínat (také podle toho budeš přiřazovat proměnné $akce jedničku a nebo nulu)

Jednoduché, pokud chceš napiš na FB, pomůžu :)

Editováno 6.5.2018 23:13
Nahoru Odpovědět 6.5.2018 23:12
sleep();
Avatar
Odpovídá na Roman Havránek
Jakub Štolbaa:8.5.2018 0:32

Asi si nerozumíme, zkusím to tedy lépe popsat. Po vypnutí pluginů pomocí mého skriptu, si ukládám dané hodnoty do tabulky v databázi, které potom používám znova k aktivování. Řekněme, že se mi do tabulky uloží hodnoty:

a:4:{i:0;s:19­:"akismet/akis­met.php";i:2;s:­31:"plugincle­aner/pluginCle­aner.php";i:3;s:­17:"stolba/stol­ba.php";i:4;s:­27:"wp-super-cache/wp-cache.php";}

Pak si, ale ve wordpressu stáhnu nový plugin, např:

a:1:{i:1;s:9:­"hello.php";}

který deaktivuji také mým pluginem, ale tím pádem se mi v databázi udělají dva sloupce, s těmi 4 pluginy a s tím jedním.

Já bych tedy chtěl udělat, že bych v php porovnal tyto dva řetězce, pokud se neschodují přidal ten nový do stávajícího řetězce a uložil jako jeden řádek v databázi, takže aby se mi z:

a:4:{i:0;s:19­:"akismet/akis­met.php";i:2;s:­31:"plugincle­aner/pluginCle­aner.php";i:3;s:­17:"stolba/stol­ba.php";i:4;s:­27:"wp-super-cache/wp-cache.php";}

a:1:{i:1;s:9:­"hello.php";}

stalo toto:

a:5:{i:0;s:19­:"akismet/akis­met.php";i:1;s:­9:"hello.php";i:2;s:­31:"plugincle­aner/pluginCle­aner.php";i:3;s:­17:"stolba/stol­ba.php";i:4;s:­27:"wp-super-cache/wp-cache.php";}

Doufám, že teď je to srozumitelné, pokud ne rád znovu vysvětlím, děkuji, Jakub Štolba.

 
Nahoru Odpovědět 8.5.2018 0:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.5.2018 8:11

Jestli jde jen o to pridat do toho stringu text, pak
php.net/json-decode
php.net/json-encode
php.net/isset

<?php
$json = '{"foo-bar": 12345}';
print $json;
$obj = json_decode($json); // nebo $json,true - pokud chces prevod na pole; u pole se da pouzit isset()
//print $obj->{'foo-bar'}; // 12345
$obj->{'foo-bar'} = 4567;
$json = json_encode($obj);
print $json;
?>
 
Nahoru Odpovědět 9.5.2018 8:11
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.5.2018 8:14

Nebo, jeste se mozna ptas na sql prikaz

IF EXISTS(select * from test where id=30122) update test set name='john' where id=3012
ELSE insert into test(name) values('john');.
Editováno 9.5.2018 8:15
 
Nahoru Odpovědět 9.5.2018 8:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.5.2018 8:22

Nebo, jestli to chces teda pridat, kdyz id muze byt jine, tak musis pouzit jine id, ktere stejne bude. V pripade jsonu

$json = '{"foo-bar": 12345}';
print $json;
$arr = json_decode($json);
foreach ($arr as $key=>$value)
  { if ($value==12345) {unset($arr[$key]); $arr[$nove_id]=12345; break;} }
$json = json_encode($obj);
print $json;

Najdes podle 12345. unsetnes (smazes). A pridas nove. Break, zastavis cyklus, pro jistotu (mam pocit, ze foreach by s pridanou hodnotou mohl dal pracovat, takze, do nekonecna). samozrejme, ve tvem pripade bude cyklus o neco slozitejsi, protoze mas jinak strukturovane pole.

 
Nahoru Odpovědět 9.5.2018 8:22
Avatar
Odpovídá na Peter Mlich
Jakub Štolbaa:12.5.2018 21:18

děkuji moc za nápovědu :) už jsem,ale dokázal najít jednodušší řešení díky array_push. I tak vám děkuji :)

 
Nahoru Odpovědět 12.5.2018 21:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.