Ik heb een site die informatie uit een database haalt, de data komt soms op een of andere manier fout in het database. Voorbeeld:
Ik voeg "Ingediënten" toe in het database, na een paar weken (mischien met tussentijds wijzigen) staat er opeens "Ingrediënten" in het DataBase. Dit is erg raar voor de bezoekers omdat die hele rare combinaties zien.
Het gebeurt willekeurig, bij het invoegen in het database staat het goed, als ik het daarna wijzig is het ook nog goed waneer/waarom hij het veranderd weet ik niet. Het toevoegen/wijzigen van de data gebeurt via een simpel HTML form (en de $_POST methode), het enige wat word gedaan is de addslases() code (en bij het weergeven bij de gebruiker natuurlijk de stripslashes() code).
Het database is standaard "latin1_swedish_ci", php versie is 4.3.10-16. Ik zit op een "Vserver" hosting en heb geen ervaring met het updaten van software op dat soort hostings.
Waar ligt de fout? Is de PHP versie fout of moet ik nog een ander PHP commando bij het wegschijven doen?
Ik heb net nog even me script nageken en zag dat hij het volgende al doet:
Bij het wegschrijven/wijzigen:
$guide = htmlentities($_POST[guide]);
Bij het tonen van de data (dit doet hij niet bij het wijzigformulier)
$guide = html_entity_decode($guide);
Zit hier de fout?
Zou de fout kunnen zitten bij de 2e keer wegschijven? Wat die nu doet is:
1. Je vult "Ingrediënten" in bij het formulier (dat is $_POST[guide]).
2. Hij doet:
$guide = htmlentities($_POST[guide]);
3. Je vraagt het formulier op (hij doet geen "html_entity_decode")
4. Je wijzigt en hij doet:
$guide = htmlentities($_POST[guide]);
Zou het opgelost zijn met een "html_entity_decode" bij het tonen van het wijzigformulier?
@ wout
het ligt er aan als je zelf gaat schrijven teksten dan is het makkelijk dan type gewoon in een woord ipv ë ë dit is zeg maar net als een nonbrakingspace das namelijk het zelfde als een spatie maar je html code leest dit makkelijker
maar als je mensen vanuit buiten af laat doen heb ik eigenlijk geen idee volgens mij moet dan gewoon je encoding goed staan, zoals arjan al zei
Ga nooit de data in de database naar de klote helpen met htmlentities! Dat is zo'n beetje de stomste actie die je kunt uithalen. html gebruik je voor de browser, niet voor de database. Of heet de functie soms databasesentities() ? Dacht het niet...
Zorg er voor dat de html-pagina dezelfde encoding heeft als de encoding van de database en de tabellen. Ik kies altijd utf-8 (geeft de meeste flexibiliteit) en dat levert nooit problemen op.
Maar htmlentities() om data in de database te zetten? Dat is een bewijs van een gebrek aan kennis.