Op mijn website wordt code uit mijn database getoond. Doormiddel van "tags" weet mijn website precies wat hij waar moet tonen. Dit werkt geweldig. Nu geef ik over het algemeen html code weer. Ik heb in de database in de tabel een veld zitten die altijd via de result weergegeven wordt. afhankelijk van variabelen, gebruik ik paginatie, etc.
Op mijn homepage, heb ik dat niet. Daar komt het result alleen als volgt naar voren:
De 'inhoud' , dat wil ik eigenlijk een slim stukje php code laten zijn, die telkens een random resultaat geeft. Dit is de volgende code:
<?php
include_once('fGet_Mvotm.php');
$UID = fGet_Mvotm();
$select = "SELECT * FROM ffm_mv WHERE uid = '" . $UID . "' ORDER BY nummer DESC";
$resultaat = mysql_query($select) or die (mysql_error());
$regel = mysql_fetch_array($resultaat);
Als ik deze code hard in mijn page zet, werkt dit perfect, maar als een result werkt dit niet.
Nu is dus mijn vraag, is het überhaupt mogelijk om een soort "echo result" in een "echo result" te stoppen? Hoe zou ik dit kunnen oplossen, anders zou ik het idee moeten laten varen.
Ik ben zelf geen PHP expert, dus nieuwe code verzinnen is lastig voor mij zonder goede voorbeelden. De manier waarop ik werk zie ik weinig in voorbeeld op sites voorbijkomen. Heb al aardig wat afgestruind op google. en ja, ik weet dat ik de code nog moet bijwerken naar nieuwe php, daar wordt al aan gewerkt.
Ik heb je topic al enkele keren doorgelezne, maar ik snap je vraag/probleem niet echt.
Wel valt het me op dat je een lege echo output op lijn 8 en 10, waarom eigenlijk ;-)
Verder is een die() in een foutafhandeling verre van netjes. Los dit liever op met een if-else, of nog mooier (maar minder simpeler voor een beginner) met een OO-manier waarbij je de MySQLi-class extend en de query-functie uitbeidt met foutafhandeling.
Dit komt als resultaat terug in de eerste code. Echter op de website ziet je dan niets.
terwijl, als ik de code hard op mijn page zet (wat dus niet wenselijk is), krijg ik wel resultaat.. namelijk:
Het stukje code zorgt ervoor dat een video en wat html naar voren wordt gehaald. via de php, laat ik dat randomizen, het resultaat van die randomizer,wil ik dus tonen op mijn homepage, maar niet op de andere pagina's.. en dat los ik op door het in de SQL database te zetten.
Maar het result kan prima html zijn, maar zodra in het result php-code zit, werkt het niet meer..
Als je PHP wilt uitvoeren vanuit PHP (ook al haal je het uit de database op) dan moet je eval() gebruiken. maar denk er eens héél goed na of je dit echt wilt? Het is zeer onveilig, en wordt erg hard afgeraden.
Maak anders liever functies die diverse soorten data ophalen, en zorg ervoor dat je die met placeholder-tags zoals bijv. [content], [map], [address] etc.. aan de juiste functie koppelt. Kijk eens naar [php]preg_replace_callback[/php]. Dan kan er ook niks misgaan, omdat de code gewoon al vaststaat, en niet opeens aangepast kan worden in je database.
Okay, thx. Ik zal daar naar kijken, al is wel het voorbeeld waar naar verwezen op de pagina weer iets compleet anders. Dus dat wordt nog wel een uitdaging..
en hoeverre is eval() een gevaar. Ik heb geen logins voor anderen op mijn database. er wordt alleen data uitgelezen. toevoegen van data gebeurt dus niet.
Hoe zou ik mijn code om moeten zetten, zodat deze wel getoond kan worden? Dan gaat het alleen maar om onderstaande code:
<?php
include_once('fGet_Mvotm.php');
$UID = fGet_Mvotm();
$select = "SELECT * FROM ffm_mv WHERE uid = '" . $UID . "' ORDER BY nummer DESC";
$resultaat = mysql_query($select) or die (mysql_error());
$regel = mysql_fetch_array($resultaat);
echo $regel['inhoud'],"<br />\n";
?>
Ik zou liever afzien van eval() zelfs, ook de manual van PHP.net haalt het al aan dat het gevaarlijk is. Er hoeft maar één iemand via een injection, of een onbetrouwbare werknemer de code aan te passen en je site ligt open en bloot voor diegene met gevolgen van dien.
PHP-code hoort daarom ook op applicatieniveau, en niet op dataniveau.
En verder zou ik ook maar eens kijken naar MySQLi of PDO ;-)
ik ben een particulier en deze website is mijn hobby.. :) dus die onbetrouwbare werknemer ben ik zelf.
maar prima, ik heb liever ook veilige code. Er zit veel tijd in mijn website, dus als dat zo gesloopt kan worden, liever niet.
Wat betreft het MySQLi verhaal.. dat loopt al :)
loop daar nog tegen wat dingetjes aan.., heeft met mijn paginatie-code te maken.., maar dat komt wel goed :)
Hoe zou ik mijn code om moeten zetten, zodat deze wel getoond kan worden? Dan gaat het alleen maar om onderstaande code:
<?php
include_once('fGet_Mvotm.php');
$UID = fGet_Mvotm();
$select = "SELECT * FROM ffm_mv WHERE uid = '" . $UID . "' ORDER BY nummer DESC";
$resultaat = mysql_query($select) or die (mysql_error());
$regel = mysql_fetch_array($resultaat);
echo $regel['inhoud'],"<br />\n";
?>
1. maak er een functie van
2. vervang de code in je database voor iets als [random_video]
3. scan de data uit je database op dit keyword.
4. vervang het keyword voor de output van je functie
<?php
function getRandomVideo($UID) {
$UID = fGet_Mvotm();
$select = "SELECT * FROM ffm_mv WHERE uid = '" . $UID . "' ORDER BY nummer DESC";
$resultaat = mysql_query($select) or die (mysql_error());
$regel = mysql_fetch_array($resultaat);
return $regel['inhoud'];
}
include_once('fGet_Mvotm.php');
// snippet voor keyword vervangen voor output
// $body komt normaal gesproken uit je database
$body = '<h1>Random video</h1>[random_video]<br>bla bla bla';
Als ik deze code hard in mijn page zet, werkt dit perfect, maar als een result werkt dit niet.
Wat is daar op tegen dan?
Ik weet niet of het "beter" is om hier een functie van te maken omdat je dit maar voor één ding gebruikt eigenlijk.
Wat zit er in fGet_Mvotm.php en kun je de resterende code daar niet ook gewoon in stoppen zodat je simpelweg kunt volstaan met het enkel includen van fGet_Mvotm.php? Zodat alle beslissingen besloten zijn in deze include zelf en hier geen informatie uitbungelt. Zoiets dus:
<?php
// ... yadda
} else {
include 'showrandomvideo.php';
}
?>
Heren, wat fijn dit. Dit geeft me even stof tot nadenken. Ik ga hiermee aan de slag. Vooral dat laatste, als dat werkt, zou prachtig zijn natuurlijk.
in de fget_mvotm zitten alle unieke ID's van "muziek-video's" die ik op mijn website heb staan. o.b.v. die unieke code weet trek ik de bijbehorende html-code van de muziekvideo erbij.
"$UID" is dus het resultaat nu uit de fget_mvotm.php
Als het resultaat uit die fget_mvotm.php de html-code is, dan is de echo alleen maar die htmlcode, en dat kan ik dan waarschijnlijk wel in de database werkend krijgen.
Ik kan de code niet op de pagina vast zetten, omdat afhankelijk van waar ik naar toe navigeer, ik andere data laat zien.
website is trouwens http://www.finalfrontiermedia.nl , niet om reclame te maken, maar dan snap je misschien wat ik bedoel. Als in het midden-rechts staat niet vast op de page, alleen het menu links, boven, de afbeeldingen onder en boven en de links onderin. De rest is flexibel. Dit stukje code wil ik ook flexibel houden.
Ik ga er mee spelen, mocht je hier nog specifieke aanwijzingen in hebben, graag.
Wat betreft het document "fGet_Mvotm.php" hier staat het volgende in (heb het ingekort):
Gevaar zit niet zo zeer in onbetrouwbare medewerkers, maar ook in onhandigheid van zo'n medewerker.
Een typfoutje is via het cms zo in de code geplaatst.
Verder wordt de code ondoorzichtig: in het aangehaalde voorbeeld hierboven staat een var $regel.
Stel dat er in de rest van de code van het script ook een $regel voorkomt, dan zou die zo maar overschreven kunnen worden....