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.
Gevaar zit niet zo zeer in onbetrouwbare medewerkers, maar ook in onhandigheid van zo'n medewerker.
En ook jijzelf of wij kunnen soms een keer "niet zo handig" bezig zijn...
Voorkomen is altijd beter dan genezen.
Zelf ben ik ook niet zo voor het "overal in de code" gebruiken van include(). Ik hou dat zelf liever voor het declareren van functies of nog liever classes aan het begin van je "landingspagina". Met landingspagina bedoel ik het bestand dat als eerste door de webbrowser ingeladen wordt bij een request. Een uitzondering kan zijn daar waar je HTML of templates gaat laden, de zogenoemde 'view'. (Als je geen idee hebt waar ik het over heb Google dan eens op MVC.)
Dit in het kader van ondoorzichtige code wat Ivo al aanhaalde.
laten we niet overdrijven, dit is een eenmans hobby website..
geen cms. geen onbetrouwbare of onhandige medewerkers. de code heb ik helemaal onder controle die er in zit en niemand anders past dat aan. Ondoorzichtig is voor mij dus niet mogelijk.
Wat betreft mvc, zou dus zijn. Ik heb de data (bron informatie) in mijn database. Met het "get_document" zou ik de berekeningen kunnen doen, en mijn index.php zorgt alleen voor de weergave :)
Nou ja, dat werd geopperd door jou (Frank) dus daar ga ik naar kijken. Samen met de rest, en kijken wat het resultaat wordt.
Ik bedoelde, zoals Frank ook verduidelijk, ook jou zelf. Nu weten we allemaal dat we zelf nooit fouten maken, maar het zou natuurlijk wel zomaar kunnen.
1 typfoutje in je scriptje in de database kan dan zomaar tot rare meldingen op je scherm leiden, of misschien wel een lek.
En aangezien je kennelijk at random iets wilt tonen, is het nog maar de vraag of de fout inderdaad optreedt als je het test.
Bottom line: het kan wel en het kan ook goed gaan, maar qua onderhoudbaarheid wordt het lastig aangezien je bij aanpassingen in je script of in je code in de database steeds bewust moet blijven dat die 2 samen moeten blijven werken.
Soms ontkom je inderdaad niet of moeilijk aan het gebruik van eval(). Maar wees je steeds bewust van de beperkingen van die functie.
If eval() is the answer, you're almost certainly asking the
wrong question. -- Rasmus Lerdorf, BDFL of PHP
Heren, mag ik jullie allemaal bedanken voor de input, maar ik heb, al zeg ik het zelf, toch een geniaal inzicht gekregen. Eigenlijk door de opmerking "kan je het niet gewoon op de pagina zelf doen".. ik heb er een "if-statement" voor gezet, hierdoor werkt het perfect.
if ($pagina == 'home') {
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 "<html><div align='left' class='mv'> </div></html>";
echo "<html><br><h2>Random music video</h2><div align='left'>Here you can find a random music video. Everytime you reload the page a different music video will appear. The following music video, is the music video of the moment:</div></html>";
echo $regel['inhoud'],"<br />\n";
echo "";
}
gebruikelijk is het om 1 <html> en 1 <html> tag te hebben op een pagina. Hooguit in een frame/iframe zou er nog een kunnen, maar dit lijkt met niet de bedoeling.
Ik loop eigenlijk nog wel tegen een ander probleem aan.
Ik heb nu de code goed, heb ook de code omgezet naar de nieuwe PHP 5 standaard. Op mijn website gaat dit goed, maar voor mijn paginatie gaat dit niet goed. Hiervoor heb ik een apart script gebruikt met de volgende code. Zouden jullie kunnen helpen om deze aan te passen.
Website draait op de volgende versies:
PHP 5.6.17
MySQL 5.5.38
<?php
/**
* PHPSense Pagination Class
*
* PHP tutorials and scripts
*
* @package PHPSense
* @author Jatinder Singh Thind
* @copyright Copyright (c) 2006, Jatinder Singh Thind
* @link http://www.phpsense.com
*/
// ------------------------------------------------------------------------
class PS_Pagination {
var $php_self;
var $rows_per_page = 5; //Number of records to display per page
var $total_rows = 0; //Total number of rows returned by the query
var $links_per_page = 10; //Number of links to display per page
var $append = ""; //Paremeters to append to pagination links
var $query = "";
var $debug = false;
var $conn = false;
var $page = 1;
var $max_pages = 0;
var $offset = 0;
/**
* Constructor
*
* @param resource $connection Mysql connection link
* @param string $query SQL query to paginate. Example : SELECT * FROM users
* @param integer $rows_per_page Number of records to display per page. Defaults to 10
* @param integer $links_per_page Number of links to display per page. Defaults to 5
* @param string $append Parameters to be appended to pagination links
*/
function PS_Pagination($connection, $query, $rows_per_page = 5, $links_per_page = 10, $append = "") {
$this->conn = $connection;
$this->sql = $query;
$this->rows_per_page = (int)$rows_per_page;
if (intval($links_per_page ) > 0) {
$this->links_per_page = (int)$links_per_page;
} else {
$this->links_per_page = 5;
}
$this->append = $append;
$this->php_self = htmlspecialchars($_SERVER['PHP_SELF'] );
if (isset($_GET['page'] )) {
$this->page = intval($_GET['page'] );
}
}
/**
* Executes the SQL query and initializes internal variables
*
* @access public
* @return resource
*/
function paginate() {
//Check for valid mysql connection
if (! $this->conn || ! is_resource($this->conn )) {
if ($this->debug)
echo "MySQL connection missing<br />";
return false;
}
//Find total number of rows
$all_rs = @mysql_query($this->sql );
if (! $all_rs) {
if ($this->debug)
echo "SQL query failed. Check your query.<br /><br />Error Returned: " . mysql_error();
return false;
}
$this->total_rows = mysql_num_rows($all_rs );
@mysql_close($all_rs );
//Return FALSE if no rows found
if ($this->total_rows == 0) {
if ($this->debug)
echo "Query returned zero rows.";
return FALSE;
}
//Max number of pages
$this->max_pages = ceil($this->total_rows / $this->rows_per_page );
if ($this->links_per_page > $this->max_pages) {
$this->links_per_page = $this->max_pages;
}
//Check the page value just in case someone is trying to input an aribitrary value
if ($this->page > $this->max_pages || $this->page <= 0) {
$this->page = 1;
}
//Calculate Offset
$this->offset = $this->rows_per_page * ($this->page - 1);
//Fetch the required result set
$rs = @mysql_query($this->sql . " LIMIT {$this->offset}, {$this->rows_per_page}" );
if (! $rs) {
if ($this->debug)
echo "Pagination query failed. Check your query.<br /><br />Error Returned: " . mysql_error();
return false;
}
return $rs;
}
/**
* Display the link to the first page
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to 'First'
* @return string
*/
function renderFirst($tag = 'First') {
if ($this->total_rows == 0)
return FALSE;
if ($this->page == 1) {
return "$tag ";
} else {
return '<a href="' . $this->php_self . '?page=1&' . $this->append . '">' . $tag . '</a> ';
}
}
/**
* Display the link to the last page
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to 'Last'
* @return string
*/
function renderLast($tag = 'Last') {
if ($this->total_rows == 0)
return FALSE;
if ($this->page == $this->max_pages) {
return $tag;
} else {
return ' <a href="' . $this->php_self . '?page=' . $this->max_pages . '&' . $this->append . '">' . $tag . '</a>';
}
}
/**
* Display the next link
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to '>>'
* @return string
*/
function renderNext($tag = '>>') {
if ($this->total_rows == 0)
return FALSE;
if ($this->page < $this->max_pages) {
return '<a href="' . $this->php_self . '?page=' . ($this->page + 1) . '&' . $this->append . '">' . $tag . '</a>';
} else {
return $tag;
}
}
/**
* Display the previous link
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to '<<'
* @return string
*/
function renderPrev($tag = '<<') {
if ($this->total_rows == 0)
return FALSE;
if ($this->page > 1) {
return ' <a href="' . $this->php_self . '?page=' . ($this->page - 1) . '&' . $this->append . '">' . $tag . '</a>';
} else {
return " $tag";
}
}
/**
* Display the page links
*
* @access public
* @return string
*/
function renderNav($prefix = '<span class="page_link">', $suffix = '</span>') {
if ($this->total_rows == 0)
return FALSE;
$batch = ceil($this->page / $this->links_per_page );
$end = $batch * $this->links_per_page;
if ($end == $this->page) {
//$end = $end + $this->links_per_page - 1;
//$end = $end + ceil($this->links_per_page/2);
}
if ($end > $this->max_pages) {
$end = $this->max_pages;
}
$start = $end - $this->links_per_page + 1;
$links = '';
for($i = $start; $i <= $end; $i ++) {
if ($i == $this->page) {
$links .= $prefix . " $i " . $suffix;
} else {
$links .= ' ' . $prefix . '<a href="' . $this->php_self . '?page=' . $i . '&' . $this->append . '">' . $i . '</a>' . $suffix . ' ';
}
}
return $links;
}
/**
* Display full pagination navigation
*
* @access public
* @return string
*/
function renderFullNav() {
if ($this->total_rows <= 5){
return FALSE;
} else {
return $this->renderFirst() . ' ' . $this->renderPrev() . ' ' . $this->renderNav() . ' ' . $this->renderNext() . ' ' . $this->renderLast();
}
}
/**
* Set debug mode
*
* @access public
* @param bool $debug Set to TRUE to enable debug messages
* @return void
*/
function setDebug($debug) {
$this->debug = $debug;
}
}
?>
de code in mijn index.php is als volgt, (die is al wel aangepast, en lijkt me ook goed):
In de class zijn alle gedefineerde variabele bovenaan 'public' net als de functies, en verder moet je de functie PS_Pagination vervangen naar een __construct()