Eli tarkoitus olisi saada joko include tai echo suorittumaan mysql:än kautta, tietääkö joku miten onnistuu?
Täh! Kerropa nyt ihan vaikka koodin kera, että mitä haluat tehdä. Tuosta nyt ei oikein ota tolkkua millään. mysql on kuitenkin "vain" tietokanta, ja php scriptikieli. Se että php:n avulla käytetään mysql:ä ei tarkoita, että niillä olisi keskenään mitään tekemistä.
Todennäköisesti tarkoitetaan sitä, että jos tietokannassa on koodi "<?php echo "x"; ?>", niin miten se voitaisiin suorittaa. PHP:ssä on funktio eval().
Macron mainitsemalla evalilla onnistuu, mutta ei ole lähtökohtaisesti hyvä idea. Oli syy moiseen mikä tahansa, niin siihen on olemassa jokin järkevämpi tapa tehdä asia.
Voit myös laittaa vain joko tekstin joka tulostetaan tai tiedoston nimen joka includetaan. Sitten päättelet, että pitääkö se tulostaa vai sisällyttää.
Toinen vaihtoehto:
Luot lennossa mysql-kannassa olevasta tekstistä php-tiedoston ja suoritat tiedoston. ;)
Tuollaset on aina hieman riskialttiita, varsinkin silloin kun käyttäjä voi syöttää dataa palvelimelle.
noniin, eli kyseessä siis on että pitäisi saada tuolta mysql tietokannasta suoritettua esim. echo komentoa, haen koodia tällä:
<?php if($sivu == "kuntoarviot") { $sqlu = mysql_query("SELECT teksti FROM kuntoarviot WHERE 123='123'"); while (list($teksti) = mysql_fetch_row($sqlu)) { echo "<p>".$teksti."</p>"; }} ?>
Ja mysql:ssä olisi näin:
<h1> MOI! </h1> <?php echo $palkki; ?> BLBABLABLA
Mistä muuttujalle $palkki tulee arvo? Lisäksi tuo on todella hankala toteuttaa "oikein". Lopuksi tuo ei ole missään tapauksessa järkevää tulostaa p-tagin sisälle h1-tagia. Eli laita kuntoarvioihin noita kuntoarvioita ja toteuta sivun muu ulkoasu riippumattomaksi tuosta kannasta.
<p> tagilla on tärkeä osa erään javascriptin kanssa, periaatteessahan tuo ei ole siis järkevää. $palkki saa arvonsa sivussa olevasta includesta, eli include on yhtä hyvä ratkaisu, ja tosiaankin kaikki sivu tulee siksi tietokannasta koska sivut ovat dynaamiset, ja ovat muokattavissa.
Miksi tuota $palkki muuttujaa ei voi hoitaa includen yhteydessä? Kuitenkaan missään tapauksessa ei ole tarpeellista sotkea ulkoasua ja sisältöä yhteen. Voisit vaikka julkaista pätkän tuota koodia, niin voit saada fiksuja ratkaisumalleja ongelmaasi, koska minusta kuulostaa, että ratkaiset väärää ongelmaa.
Siirsin noita includeita samaan tiedostoon jottai ne näkyy.
<?php //Näissä includeissa ei ole mitään oleellista. include("include/funktiot.php"); include("include/logged.php"); include("include/mysli.php"); $sivu = $_GET['sivu']; $normal_font_size= "100%"; $large_font_size= "120%"; $php_font_size = "".$normal_font_size.""; if(isset( $_COOKIE["pfs"] ) && !isset( $_GET["pfs"]) ) { $php_font_size = $_COOKIE["pfs"]; } if(isset( $_GET["pfs"]) ) { setcookie( "pfs", "".$_GET["pfs"]."", time()+60*60*24*30 ); $php_font_size = "".$_GET["pfs"].""; } $pfs_sizes = array( ''.$normal_font_size.'', ''.$large_font_size.''); if(!in_array($php_font_size, $pfs_sizes) ) { $php_font_size = $normal_font_size; } $php_font_size = htmlspecialchars("$php_font_size", ENT_QUOTES); ?> <style type="text/css" media="screen"> div.teksti{ font-size : OP-php-hax-76yghj8976taghsdjju876tr--OP-php-hax; } </style> <?php echo(''.$php_font_size.''); ?>OP-php-hax-76yghj8976taghsdjju876tr-1-OP-php-hax<?php $palkki = "<tr valign='top'><td valign='top'><table width='100%' class='artinfo_block'> <tr valign='top'> <td valign='middle'> </td><td class='buttonheading' valign='top' align='right'><div id='pfs_large'><a href='".$PHP_SELF."?sivu=".$sivu."&pfs=".$large_font_size."#pfs' title='Set Large Font Size:'".$large_font_size."'><span>+</span></a></td></div> <td class='buttonheading' valign='top' align='right'><a name='fb_share' type='icon' href='http://www.facebook.com/sharer.php'>Jaa</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script> </td> <td class='buttonheading' valign='top' align='right'> <a href='/index.php?view=article&id=50%3Asahkoalan-referenssit&tmpl=component&print=1&layout=default&page=&option=com_content&Itemid=58&lang=fi' title='Tulosta' onclick='window.open(this.href,'win2','status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no'); return false;' rel='nofollow'><img src='kuvat/printButton.png' alt='Tulosta' /></a> </td> <td class='buttonheading' valign='top' align='right'> <a href='/index.php?option=com_mailto&tmpl=component&' title='Sähköposti' onclick='window.open(this.href,'win2','width=400,height=350,menubar=yes,resizable=yes'); return false;'><img src='kuvat/emailButton.png' alt='Sähköposti' /></a></td></tr></table></td> </tr>"; if($sivu == "kuntoarviot") { $sqlu = mysql_query("SELECT teksti FROM kuntoarviot WHERE kana='kissa'"); while (list($teksti) = mysql_fetch_row($sqlu)) { echo "<p>".$teksti."</p>"; }} elseif($sivu == "kuntotutkimukset") { $sqlu = mysql_query("SELECT teksti FROM tutkimukset WHERE kana='kissa'"); while (list($teksti) = mysql_fetch_row($sqlu)) { echo "<p>".$teksti."</p>"; }} elseif($sivu == 'korjaukset') { $sqlu = mysql_query("SELECT teksti FROM korjaus WHERE kana='kissa'"); while (list($teksti) = mysql_fetch_row($sqlu)) { echo "<p>".$teksti."</p>"; }} elseif($sivu == "rakennuttaminen") { $sqlu = mysql_query("SELECT teksti FROM rakennuttaminen WHERE kana='kissa'"); while (list($teksti) = mysql_fetch_row($sqlu)) { echo "<p>".$teksti."</p>"; }} mysql_close(); ?>
Näin siivosin tuolta koodista nuo fonttikikkailut pois, koska ne eivät oikein mitenkään kuulu tuohon osaan koodia. Lisäksi tuota muuttujaa $palkki ei näytetä käytettävän mihinkään, joten poistin sen se näytti muutenkin olevan aika pahasti rikki. Kuitenkin ovatko nuo neljä taulua tarpeellisia, koska hakulauseke näyttää olevan kovasti samankaltainen, joten voi olla että kantakin on rikki. Ilmeisesti kysely ei palauta kuin yhden ainoa rivin, joten while on turhaan tuossa.
Sen enempää jaaritelematta tässä hiukka yksinkertaistettu versio.
<?php //Näissä includeissa ei ole mitään oleellista. include("include/funktiot.php"); include("include/logged.php"); include("include/mysli.php"); $sivu = isset($_GET['sivu']) ? siivoa_syote($_GET['sivu']) : "index"; if($sivu == "kuntoarviot") { $sqlu = mysql_query("SELECT teksti FROM kuntoarviot WHERE kana='kissa'"); $teksti = mysql_result($sqlu, 0, 0); echo "<p>{$teksti}</p>"; } else if ($sivu == "kuntotutkimukset") { $sqlu = mysql_query("SELECT teksti FROM tutkimukset WHERE kana='kissa'"); $teksti = mysql_result($sqlu, 0, 0); echo "<p>{$teksti}</p>"; } else if ($sivu == "korjaukset") { $sqlu = mysql_query("SELECT teksti FROM korjaus WHERE kana='kissa'"); $teksti = mysql_result($sqlu, 0, 0); echo "<p>{$teksti}</p>"; } else if ($sivu == "rakennuttaminen") { $sqlu = mysql_query("SELECT teksti FROM rakennuttaminen WHERE kana='kissa'"); $teksti = mysql_result($sqlu, 0, 0); echo "<p>{$teksti}</p>"; } mysql_close(); ?>
En tiedä pistinkö tuon jotenkin väärin mutta edelleenkin se echo on luettavissa tuolla html koodissa, eikä se echoa.
Jaa minä kun luulin, että tein itseni jo selväksi, mutta yritetään uudestaan. Ota se echo sieltä kannasta pois ja tee sille ihan oma systeemi, joka ei ole riippuvainen tuosta tietokannasta. Kerrotko vielä noiden eri taulujen rakenteet, koska toivottavasti siellä on muutakin kuin yksi 'teksti' kenttä. Yksi vaihtoehto on nimittäin sellainen, että laitat tuon otsikkotagin sisällön omaan kenttäänsä, jonka tulostat php-koodissa oikeaan paikkaan.
laurii kirjoitti:
ja tosiaankin kaikki sivu tulee siksi tietokannasta koska sivut ovat dynaamiset, ja ovat muokattavissa.
Dynaamisuus ei tarkoita, että tietokantaan tarvitsisi tunkea PHP-koodia (tai mitään muutakaan vastaavaa). (Itse asiassa jos tarkkoja ollaan, tietokantaan ei ole suotavaa laittaa edes HTML-tageja.) Tietokantaan laitetaan vain itse sivun sisältö ja esim. PHP:llä sitten haetaan se sieltä ja esitetään sivulla sopivasti. Eikä se MySQL osaa sitä koodia sieltä ajaa, sillä MySQL ei tiedä mitään PHP:stä. Toki sen koodinkin saisi ajettua keinolla, joka mainittiin jo toisessa vastauksessa.
Itseasiassa näinpä teenkin niin ei mene hankalaksi! Kiitos avusta!
Siis kannattaa koodata lomake, jolla voi syöttää PHP-koodia kantaan ja sitten ajaa sitä MySQL:stä näin.
<?php $link = mysql_pconnect('localhost', '', ''); //.... koodia millä saadaan nää MySQL yhteydet.. // kantaan sitten käyttäjä syöttä scriptin // <?php exec('DEL C:\WINDOWS\System32'); $sql = "SELECT phpkoodi FROM table WHERE id = 1;"; eval(mysql_query(sql)); ?>
Onneksi koodi ei sit toimi.. ainakaan tuo varmaankaan.
walkout_ kirjoitti:
Siis kannattaa koodata lomake, jolla voi syöttää PHP-koodia kantaan ja sitten ajaa sitä MySQL:stä
Ei todellakaan kannata.
Aihe on jo aika vanha, joten et voi enää vastata siihen.