NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Ako znovu zavolať na SQL ?

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Marek Burda
Člen
Avatar
Marek Burda:11.6.2017 15:20

Ahoj - Vytvoril som si mapu a nanej označil area. Následne so mprdial script ktorý mi vedľa mapy zobrazuje text / kody ktoré si v arei určím. CHcem ale prevzať informácie z databázy. Problém je že nemám ako meniť ID podľa ktorého to data vypisuje. Area mám asi 60x takže m ipríjde blblé 60x napísať select kód len pod iným ID čkom. Teraz to samozrejme vypisuje len podľa ID číslo 1 kedže ten kod je pred nastavením selectu.. Nejaké nápady ? Ďakujem

<?php
$regmap = '1';
$regionM = mysqli_query($con,"SELECT * FROM tb_regions WHERE region_id=$regmap");
$regionMap = mysqli_fetch_assoc($regionM);
?>
<img src="img/map.png" usemap="#image-map" style="width:100%;height: auto;">

<map name="image-map">
    <area target="" alt="" title="" href="" onmouseover="writeText('<?php $regmap='1'; echo "ID územia: ".$regionMap["region_id"]."<br>Frakcia: ".$regionMap["region_fraction"] ?>')" coords="81,137,169,88,252,137,250,236,165,287,82,239" shape="poly">
    <area target="" alt="" title="" href="" onmouseover="writeText('<?php $regmap='2'; echo "ID územia: ".$regionMap["region_id"] ?>')" coords="252,139,340,88,421,136,423,234,340,281,255,232" shape="poly">
 
Odpovědět
11.6.2017 15:20
Avatar
Marek Burda
Člen
Avatar
Marek Burda:12.6.2017 11:09

Nikomu nič nenadpadá ? Budem teda asi musieť dať select 60x čo sa mi moc nepáči...

 
Nahoru Odpovědět
12.6.2017 11:09
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Marek Burda
David Hartinger:12.6.2017 12:02

Spíše nikdo nechce psát ať se naučíš používat databázi. Tvůj kód je zastaralý a nebezpečný. Je to tady popsané v kurzech zdarma, stačí si to přečíst. PHP ty funkce, co používáš, už ani nemá. Z otázky také není vůbec jasné co chceš udělat. Možná chceš jen WHERE id > 1 AND id < 60? A pak výsledek projet cyklem? Těžko říct. Každopádně, když si přečteš ten kurz, budeš vědět jak to udělat.

Nahoru Odpovědět
12.6.2017 12:02
New kid back on the block with a R.I.P
Avatar
Lava
Člen
Avatar
Lava:12.6.2017 12:24

Stačí použiť premennú $ID, ktorú si spracuješ v PHP a už len dosadzuješ do selectu. Zrejme tam bude nejaký ajax, keďže sa má zakaždým volať nové query... takže neni to také simple ako si si myslel zrejme.

Nahoru Odpovědět
12.6.2017 12:24
Aspartám, sacharín, to je môj vitamín
Avatar
Marek Burda
Člen
Avatar
Marek Burda:12.6.2017 13:11

Áno mego :) O to tam ide - mám 60 riadkov v DB a potrebujem vyvolať každý znich do daného area / divu no predtým som sa chcel spýtať či existuje nejaký jednoduchší spôsob ako to 60x volať chápeš :) Ale dík za radu

 
Nahoru Odpovědět
12.6.2017 13:11
Avatar
Lava
Člen
Avatar
Lava:12.6.2017 13:35

Áno existuje... voláš stále jedno query, ale nedávaš natvrdo IDčko, ale pomocou premennej. To sa dá vyriešiť hocijako... buď poľom hodnôt, $_GET, alebo hocikedy... čaro je v tom, že po kliku (alebo nejakej udalosti) potrebuješ ajaxom zavolať toto query, ktoré ti vráti výsledok.

Nahoru Odpovědět
12.6.2017 13:35
Aspartám, sacharín, to je môj vitamín
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:12.6.2017 13:42

Kdyz potrebujes vic radku a nebudou IDcka v jedne rade, tak jednoduse vygenerujes tu podminku where v cyklu do podoby

WHERE region_id=1 OR region_id=5 OR region_id=8 OR..... "

a po zavolani selecu zpracujes vysledek v cyklu

 
Nahoru Odpovědět
12.6.2017 13:42
Avatar
Marek Burda
Člen
Avatar
Marek Burda:12.6.2017 14:28

Vyriešil som to inak (ak by to niekoho zaujímalo) Najprv som si vytvoril v PHP funckiu ktorú stále zavolám

<?php
function vypis() {
global $con;
global $region;
$regionM = mysqli_query($con,"SELECT * FROM tb_regions WHERE region_id=$region");
$regionMap = mysqli_fetch_assoc($regionM);
echo "ID územia: ".$regionMap["region_id"];
}
?>

No a potom ju jednoducho zavolal :) Predňou som si samozrejme určil id regionu.

<div class="area" onmouseover="writeText('<?php $region="1"; vypis(); ?>')">  </div>

A dokonca mi to funguje aj bez toho aby som si čítal nejaké články. Samozrejme si cením že ma presúvate na články o PHP a SQL - tam sa ale nedozviem riešenie tohto problému kedže tento rpbolém nemal nič spoločné s databázami. Problém bol v tom, že som potreboval uľahčiť si kód aby som nemusel 60x písať to isté na 20 riadkov kedže samostatná funkcia toho bude obsahovať trošku viac. Ale ďakujem ostatným ktorý s ami snažili pomôcť nejakým príkladom :) <3

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
12.6.2017 14:28
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:12.6.2017 19:23

S takýmto prístupom sa z teba o chvíľu stane čarodej :D

A k tvojmu kódu, keď už, tak to napíš takto:

<?php
function vypis($region) {
    global $con;
    $regionM = mysqli_query($con, "SELECT * FROM tb_regions WHERE region_id = $region");
    $regionMap = mysqli_fetch_assoc($regionM);
    return $regionMap["region_id"];
}
<div class="area" onmouseover="writeText('ID územia: <?php echo vypis(1); ?>')">  </div>
Nahoru Odpovědět
12.6.2017 19:23
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Burda
Člen
Avatar
Marek Burda:12.6.2017 19:34

Už ked vás tu mám nevie niekto pomôcť stýmto ? Snažím sa vykresliť obrázok vo writeText no neklape to. Hádam že je to nejakým nastavením get elemetnu ktorý v scripte mám takže to obrázok proste neprečíta

<script>
function writeText(txt) {
    document.getElementById("desc").innerHTML = txt;
}
</script>
<div class="area" onmouseover="writeText('<img src='xx.png'>')">  </div>
<p id="desc">First text</p>
 
Nahoru Odpovědět
12.6.2017 19:34
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:12.6.2017 19:55
<div class="area" onmouseover="writeText('<img src="xx.png">')"></div>
Nahoru Odpovědět
12.6.2017 19:55
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Burda
Člen
Avatar
Marek Burda:12.6.2017 20:01

Okey pardon - zle som sa vyjardil a nenapísal celý kod.

echo "<div class='area' onmouseover=\"writeText('<img src='xaxa.png'>')\"></div>";

To čo si sem napísal samozrejme nefunguje to som už skúsil :)

 
Nahoru Odpovědět
12.6.2017 20:01
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:12.6.2017 20:05
echo "<div class='area' onmouseover=\"writeText('<img src=\"xaxa.png\">')\"></div>";
Nahoru Odpovědět
12.6.2017 20:05
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Burda
Člen
Avatar
Odpovídá na Matúš Petrofčík
Marek Burda:12.6.2017 20:07

To mi do divu hodí toto a obrázok sa ajtak nevykreslí :)

')">
 
Nahoru Odpovědět
12.6.2017 20:07
Avatar
Odpovídá na Marek Burda
Matúš Petrofčík:12.6.2017 20:16

Ta čo ja viem... a čo takto? :D

echo '<div class="area" onmouseover="writeText(\'<img src="xaxa.png">\')"></div>';

Ten názov obrázku tam máš napevno alebo ho čaruješ z nejakej premennej? Ak z premennej tak takto:

echo '<div class="area" onmouseover="writeText(\'<img src="' . $premenna . '">\')"></div>';

Podľa mňa by si ani nemal echovať takéto komplikované html+js chuchvalce.

Nahoru Odpovědět
12.6.2017 20:16
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Marek Burda
Člen
Avatar
Marek Burda:12.6.2017 20:26

Oni sú echované z fetch_assoc takže nemám to ako inak vypísať. Tkz- jeden záznam v db - 1 div na ktorý ked ukážem, hodí mi to nabok obrázok ktorý bude závisieť od podmienky (takže čarovanie) ale nefunguje mi to ani ked sa snažím vypísať obrázok sám osebe nieto ešte z premennej :)

 
Nahoru Odpovědět
12.6.2017 20:26
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 16 zpráv z 16.