PHP code uit database halen

Status
Niet open voor verdere reacties.

martijntju30

Gebruiker
Lid geworden
23 jun 2010
Berichten
32
Hallo allemaal,

Ik heb de volgende vraag:
Ik heb een script (bijvoorbeerd: <?="hallo world" ?>) in een tabel in mijn database staan. Nu wil ik dat script uitvoeren, ZONDER het handmatig in de pagina zelf te zetten. Dus hij moet hem ophalen. Hoe kan dit?

TOEPASSING:
Ik maak een CMS gebaseerd op de database

WERKELIJKE CODE:
PHP:
$aantalfotos = 3;
$pic = rand(1,$aantalfotos);
switch ($pic) {
    case "1":
        print '<img src="http://www.geldersweer.nl/bronkerk/pics/groep.png" height="245px" alt="Onder meer deze jongeren verzorgen uw catering, oppas, computerhulp, tuinhulp, etc.">';
        break;
    case "2":
        print '<img src="http://www.geldersweer.nl/bronkerk/pics/pilotlogo.jpg" height="245px" alt="Dit is het logo van op eigen vleugels">';
        break;
    case "3":
        print '<img src="http://www.geldersweer.nl/bronkerk/pics/orkest2.jpg" height="245px" alt="dit is een orkest in moldavie">';
        break;
}

Alvast bedankt allemaal!
 
Ten eerste: dit kan, maar het is een heel slecht idee. Probeer een andere oplossing te zoeken, het is echt veel beter om dit soort dingen gewoon in een file te zetten ipv code in de database te hebben, dat maakt je site traag, moeilijk onderhoudbaar en bijzonder kwetsbaar voor hackers.

Mocht je het tegen mijn advies in toch zo willen doen, dan moet je kijken naar de functie eval():
http://nl2.php.net/manual/en/function.eval.php
 
Ten eerste: dit kan, maar het is een heel slecht idee. Probeer een andere oplossing te zoeken, het is echt veel beter om dit soort dingen gewoon in een file te zetten ipv code in de database te hebben, dat maakt je site traag, moeilijk onderhoudbaar en bijzonder kwetsbaar voor hackers.

Wat bedoel je hiermee? Dat ik een (bijvoorbeeld) *.ini file op de server zet en daar in laat opslaan en die dan laat includen ofzo? Hoe bedoel je dit. Ik wil het namelijk wel kunnen bewerken in een cms. Het is geen site waar geld mee gemoeid gaat enzo dus hackers zijn alleen vervelend maar geen ramp...

Wederom bedankt!
 
Nee geen .ini, echt gewoon losse PHP files. Het gevaar is dat als iemand in staat is om je database info te wijzigen (een injection error is genoeg) dat hij zijn eigen PHP scripts kan inputten en vervolgens je hele site kan overnemen.

Waarom wil je code in de database hebben? Het lijkt me heel sterk dat je gebruikers PHP scripts wil laten wijzigen (echt niet handig) want dat is totaal niet gebruiksvriendelijk en als je ze een paar kleine scripting opties aan wilt bieden kun je beter zelf scriptjes schrijven die op een wat slimmere manier werken.

Over het algemeen zijn scripts dingen die buiten een CMS vallen, omdat ze basis functionaliteit zijn; CMS gaat over "Content" (daar komt de C vandaan) niet features.
 
Ik zal het uitleggen waarom een script in het cms:

Het onderwerp van de site: In de zomervakantie gaat een groep jongeren(waar ik dus deel van uit maak) naar Moldavië om daar te helpen bij de jongeren die het veel minder hebben dan wij. We gaan een vakantiekamp financieren, in een opvanghuis klussen en meer.

Site: pilots-moldavie.nl

Dus: We hebben een geldmeter, en ik heb het volgende script voor die geldmeter:
PHP:
<?php $geldnu = 2500;
$geldtot = 15000;
$geldperc = $geldnu/$geldtot;
$kmtot = 2095;
$kmnu = $geldperc*$kmtot;
?>
<p>Hoe veel geld hebben we nu?<br />
We hebben nu &euro;<?php echo round($geldnu, 2);?>,- van de &euro;<?php echo round($geldtot,2);?>,- die we minimaal nodig hebben maar hoe meer geld hoe beter we kunnen helpen daar.<br />
Omgerekend in kilometers is dat <?php echo round($kmnu,2);?>km naar Moldavi&euml; is het <?php echo $kmtot;?>km.<br />
Dit hebben we uitgerekend als de reis maar we willen natuurlijk ook daar wat doen. Dat zit in dit bedrag al deels verwerkt. Maar zoals we al zeiden: "hoe meer geld, hoe meer we kunnen helpen."<br />
Alvast bedankt voor uw bijdrage!<br />
<br /></p>
<img src="http://www.geldersweer.nl/bronkerk/pics/geldmeter/geldmeter.png" width="600px" height="98">

Hier kan je zien dat er dus PHP IN de content staat: de geldbedragen.
Dit wil ik ook kunnen aanpassen in mijn cms.
Duidelijk?

Groet
 
Ja je kunt het best doen als je dat persé wil, maar je kunt beter gewoon dat scriptje gewoon als .php file opslaan en includen vanuit je content systeem. Ik weet niet wat voor CMS je gebruikt verder.
Dit is wel een van de nadelen van CMS'en, het is niet overal voor bedoelt en dit is een van de dingen waar het niet zo geschikt voor is.
 
Ik denk dat ik die pagina er dus nu maar even buiten laat en daar iets anders op ga verzinnen. Je hebt me wel extra aan het denken gezet.

Ik heb nog een probleem(pje?) in FF verspringt de hele site... terwijl hij in IE goed is..
Ik zal er nog een topic over aanmaken als je dat beter lijkt maar ik vraag het eerst even aan jou, heb je hier een tip/idee over??

Groet

PS: dit heb ik er nu van gemaakt:http://www.geldersweer.nl/bronkerk/AF/index.php?p=moldavie
Let vooral op de foto's want dat was eerst ook php
 
Uhm, bedoel je niet gewoon dat de waardes:
PHP:
$geldnu = 2500;
$geldtot = 15000;
$geldperc = $geldnu/$geldtot;
$kmtot = 2095;

elke keer wijzigen? en dat wil je zelf handmatig kunnen aanpassen?
Ik zou dan , Wat frats zegt er een script van maken en het includen daar je nodig hebt.

Voor het invoeren van die waardes kun je dan gewoon een form bouwen, waarmee je je waardes in een variabele pleurt of (m.i. beter) maak een tabbeltje in je database aan en dan kun je je waardes daarin iedere x updaten als er meer geld bijkomt.

Snap je het idee?
 
ja, dat wil ik ook, maar ik wil ook de tekst kunnen wijzigen. En daar staat ook php in. Dus dat is het grootste probleem. Maar ik denk dat ik dat zo ga doen:

Code:
tekstvak <phpstukje1> tekstvak <phpstukje2> etc.

wat tussen<> staat kun je niet bewerken in de tekst en is dus ook geen vakje als in een form, de rest zijn dus input velden

Snap je dit dan weer. Zo wilde ik het dus doen.
 
Maar euh waarom zou je dan niet geheel alles in een php script zetten, en ook je teksten daarmee aanpassen?

Ik snap je wel, maar ik snap je reden niet waarom je het op jouw manier wil gaan doen?
 
klein voorbeeldje, niet getest, aan veiligheid ng niet gedacht!
Zo zou je bewerking er in de basis uit kunnen zien:
PHP:
<?php 
if(isset ($_POST['opslaan'])) {

$query = "UPDATE tabelnaam SET geldnu='". $_POST['geldnu']."',geldtot='". $_POST['geldtot']."',geldperc='" .$_POST['geldperc']."',kmtot='" .$_POST['kmtot']."',kmnu='" .$_POST['kmnu']."' ";
mysql_query($query) or die (mysql_error());
}

$query = "SELECT * FROM zelfdetabelnaam";
while($row = mysql_fetc_assoc($query)){
$geldnu = $row['geldnu'];
$geldtot = $row['geldtot'];
$geldperc = $row['geldperc'];
$kmtot = $row['kmtot'];
$kmnu = $row['kmnu'];
}
?>

<form name="form" method="post" action=""><table>
<tr><td>Geld nu:</td><td><input type="text" name="geldnu" value="<?php echo $geldnu; ?>" /></td></tr>
<tr><td>Geld tot:</td><td><input type="text" name="geldtot" value="<?php echo $geldtot; ?>" /></td></tr>
<tr><td>Geld Geld Percentage:</td><td><input type="text" name="geldperc" value="<?php echo $geldperc; ?>" /></td></tr>
<tr><td>Kilometers tot:</td><td><input type="text" name="kmtot" value="<?php echo $kmtot; ?>" /></td></tr>
<tr><td>Aantal Kilometers nu:</td><td><input type="text" name="kmnu" value="<?php echo $kmnu; ?>" /></td></tr>
<input type="submit" name="opslaan" value="Opslaan" />
</form></table>

Hier zou je dus je tekst en waardes op kunnen halen.
PHP:
$query = "SELECT * FROM zelfdetabelnaam";
while($row = mysql_fetc_assoc($query)){
$geldnu = $row['geldnu'];
$geldtot = $row['geldtot'];
$geldperc = $row['geldperc'];
$kmtot = $row['kmtot'];
$kmnu = $row['kmnu'];
}

<p>Hoe veel geld hebben we nu?<br />
We hebben nu &euro;<?php echo round($geldnu, 2);?>,- van de &euro;<?php echo round($geldtot,2);?>,- die we minimaal nodig hebben maar hoe meer geld hoe beter we kunnen helpen daar.<br />
Omgerekend in kilometers is dat <?php echo round($kmnu,2);?>km naar Moldavi&euml; is het <?php echo $kmtot;?>km.<br />
Dit hebben we uitgerekend als de reis maar we willen natuurlijk ook daar wat doen. Dat zit in dit bedrag al deels verwerkt. Maar zoals we al zeiden: "hoe meer geld, hoe meer we kunnen helpen."<br />
Alvast bedankt voor uw bijdrage!<br />
<br /></p>
<img src="http://www.geldersweer.nl/bronkerk/pics/geldmeter/geldmeter.png" width="600px" height="98">

Zoiets zou ik mee beginnen, let wel: veiligheid qua sql zit er nog niet in, typo's voorbehouden heb niets getest!.

Kijk eens of je hier wat verder mee komt, zo niet hoor ik het wel;)
Welk CMS gebruik je?

EDIT: ahum concatenatie vergeten, aangepast nu...
EDIT2: copy paste evident aanwezig, wederom aangepast.
 
Laatst bewerkt:
Je zou ook gewoon de text opslaan in een tabel en
waar geld totaal moet komen <geldtotaal> en voor geld nu <geldnu>
en dan voor je de text output eerst door een strreplace haal om de <geldtotaal> en <geldnu> te vervangen oor de waardes die het daadwerkelijk moeten zijn.

ik weet niet of het een nette manier is, maar wel een die werkt!
 
@ phobia

Ik snap niet helemaal waar je naar toe wilt?

Op de door mij beschreven manier haalt hij m.i. de waarde die het zou moeten zijn op.
 
ja, jou manier klopt ook.
Maar wat ik begreep wou hij de tekst in een db hebben.

en als hij nou de tekst uit de db haalt en in een string zet. Dan kan hij in de string
de tekst <geldnu> laten vervangen door het bedrag wat het moet zijn.
En of hij die waarde ook uit een db haalt of wat dan ook is aan hem.

op mijn manier komt er dan geen php in de database en is de tekst ook aanpasbaar
 
Laatst bewerkt:
Ja ok, als toevoeging zou je ook de tekst in de databse kennen zetten, en dan <geldnu> etc. als tag aanmaken en str_replace erover heen halen.
Daar was ik nog niet aan toe gekomen..

op mijn manier komt er dan geen php in de database en is de tekst ook aanpasbaar

Op de mijne ook niet hoor:p
 
Heel erg bedankt allemaal! Ik ga het toepassen en dan testen, en dan laat ik nog wel van me horen!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan