Ik ben bezig een nieuwsbrief te maken voor een site van me. De layout is klaar, alleen ik heb dus een dynamische inhoud die gegenereerd wordt uit de database. Deze inhoud include ik omdat het verschillende redelijk grote bestanden zijn, en anders is het geheel een hele lange tekst. Nu loop ik dus tegen het probleem dat als ik die nieuwsbrief in de db zet en hem daarna wil bekijken hij er netjes uitziet, maar ik mis de inhoud. Hij laat alleen de <? include bestand.php ?> zien en niet wat dit bestand zou moeten genereren.
Ik heb ook al geprobeert om die losse delen appart in de db te krijgen maar dan loop ik tegen het probleem dat hij teksten met " s'avonds " niet pakt. Dus krijg ik daar een error op. ik probeer die tekst als \"$tekst\" in de db te krijgen maar krijg dan alleen $tekst als resultaat. Ik weet dat dit met de quotes te maken heeft, maar weet niet hoe ik die quotes goed kan krijgen om wel de tekst goed in de db te krijgen.
Ik hoop dat ik het een beetje duidelijk heb kunnen maken wat de problemen zijn.
Tja, weer een typisch gevalletje van geen error_reporting(E_ALL); gebruiken... Dan vraag je ook om problemen! Wanneer je dit wel gebruikt, krijg je direct een notice:
Use of undefined constant bestand - assumed 'bestand'
Use of undefined constant php - assumed 'php'
Ik krijg dus geen errors hierop, alleen hij zet de regel <? include 'bestand.php' ?> in de db tussen de tekst, ipv de code die dat script zou moeten genereren.. :S
Waarom include je een bestand op het moment dat je output genereert? Ik heb de includes altijd bovenaan staan en heb dan ook nog nooit een probleem met een include gehad. Ik snap dan ook niet wat je bedoelt met 'hij zet de regel ... in de db tussen de tekst'. Hoe kan een include in hemelsnaam in de database terecht komen?
Je kunt natuurlijk niet een pagina includen binnen de declaratie of concatenatie van een variabele. Als je de inhoud van een bepaald bestand aan een bepaalde variabele toe wilt voegen, zou je dat met file_get_contents() moeten doen:
<?php
$var = 'Een deel tekst';
$var .= file_get_contents('bestand.php');
$var .= 'Nog een deel tekst';
?>
Let erop dat je niet de letterlijke php code uit bestand.php zult krijgen, je krijgt de html die het resultaat is van de php code in je variabele.
Waarom include je een bestand op het moment dat je output genereert? Ik heb de includes altijd bovenaan staan en heb dan ook nog nooit een probleem met een include gehad. Ik snap dan ook niet wat je bedoelt met 'hij zet de regel ... in de db tussen de tekst'. Hoe kan een include in hemelsnaam in de database terecht komen?
Hey Frank,
Duh als het om een connect gaat doe ik dat ook bovenaan, maar dit is dus een bestand dat een output genereerd die op juist die plek moet staan, anders had ik hem daar natuurlijk niet neergezet.. lol
Duh als het om een connect gaat doe ik dat ook bovenaan, maar dit is dus een bestand dat een output genereerd die op juist die plek moet staan, anders had ik hem daar natuurlijk niet neergezet.. lol
En dat is precies wat je dus niet moet doen! In dit bestand genereer je een variabele waarin de output staat en je kunt includen aan het begin van je script. Wanneer jij op 1 plek in je script alle benodigde includes neerzet, wordt je script er vele malen overzichtelijker op en heb je nooit problemen met een include. Het heeft toch geen enkele zin om output naar de browser te gaan sturen en dat je er dan achterkomt dat ergens een include-file niet beschikbaar is? Dit controleer je aan het begin van je script en niet wanneer je al zo'n beetje klaar bent met de hele boel.
Persoonlijk vind ik een require_once() fraaier, maar dat is een kwestie van smaak.
Ps. Ik heb het met geen woord gehad over een connect. Include heeft daar op zich ook niets mee te maken.
<?php // NOOIT SHORTTAGS GEBRUIKEN!!! dit kun je lang niet altijd op een server aanpassen
$layout .= ' \"'.$note.'\"
</td>
</tr>'; // quotes bij $note vergeten
?>
Als ik het zo doe dan krijg ik nog steeds problemen dat als een tekst dit -> " s'avonds " <- bevat er een error komt dat hij die niet in de db kan zetten :(
Waarom zet je html-code in je database? Dat is geen aanrader, maar goed, het kan. Maar hoe dan ook, je moet wel de functie mysql_real_escape_string() toepassen op de string die jij aanmaakt.
Maar zorg er nu eerst maar eens voor dat de string er goed uitziet, echoen en kijken of deze er goed uitziet, en ga hem dan pas in de database zetten. Nadat je mysql_real_escape_string() hebt toegepast!
De rede waarom ik het opsla in de db is dat de dynamische content steeds veranderd. De 2de rede is dat als iemand de nieuwsbrief niet kan lezen in zijn mailprogramma hij hem online kan bekijken. Dus word hij netjes uit de db gehaald zodat iedereen dezelfde nieuwsbrief te zien krijgt, ipv dat iedereen iets anders als dynamische content te zien krijgt.
Na een hoop rond gooien van de bestanden heb ik toch maar alles in 1 bestand gedaan, is niet zo makkelijk maar het werkt wel stabiel. Die mysql_real_escape_string() werkt perfect.
Heel erg bedankt allemaal voor jullie hulp en tijd.