Avatar
Jakub Štolbaa:5. května 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. května 10:36
Avatar
gorri
Člen
Avatar
Odpovídá na Jakub Štolbaa
gorri:5. května 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. května 17:54
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Jakub Štolbaa:5. května 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. května 20:53
Avatar
Jakub Štolbaa:5. května 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. května 21:00
Avatar
gorri
Člen
Avatar
Odpovídá na Jakub Štolbaa
gorri:6. května 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. května 11:56
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Roman Havránek:6. května 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. května 23:13
Nahoru Odpovědět 6. května 23:12
sleep();
Avatar
Odpovídá na Roman Havránek
Jakub Štolbaa:8. května 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. května 0:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9. května 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. května 8:11
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9. května 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. května 8:15
 
Nahoru Odpovědět 9. května 8:14
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9. května 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. května 8:22
Avatar
Odpovídá na Peter Mlich
Jakub Štolbaa:12. května 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. května 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.