html code wordt niet opgeslagen in mysqldatabase

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: 1 2 volgende »

Paul Weiss

Paul Weiss

19/08/2023 19:22:31
Quote Anchor link
Ik heb diverse html codes die gewoon worden opgeslagen in mysql database. Maar ik heb een header menu die niet wordt opgeslagen. wat ik vreemd vind. Wat is er aan deze html code anders. Onderstaande een voorbeeld van beide codes. Wat betreft het veld van de database gebruik ik "text". Ik heb wel gemerkt wanneer ik <header> en </header> weglaat dat de html code wel wordt opgeslagen!

Onderstaande code wordt wel opgeslagen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

<link rel="stylesheet" href="scripts/5-hero-simpel/hero-simpel.css" />
<link rel="stylesheet" href="scripts/34-flexboxcontainer-2-4/flexboxcontainer-2-4.css" />
<div style="background-image:  url(uploads/images/hero/<?php echo $imagepath1;?>)" alt="" title="" class="small-hero-bg-img">
<div class="small-hero-text">
<h1 class="font-white heading-medium" id="rijxx"><?php echo $titel1; ?></h1>
<h2 class="heading-small font-white"><?php echo $titel2; ?></h2>
<div class="container-flexbox-2-4">
<div class="box-flexbox-2-4">
<div class="button-boxpulse">
<a href="#" class="btn-pulse btn-pulse-white btn-pulse-animate"><?php echo $button1; ?></a>
</div>
</div>
<div class="box-flexbox-2-4">
<div class="button-container">
<a href="#" class="button-slidein">Verder</a>
</div>
</div>
</div>
</div>
</div>



Onderstaande code wordt niet opgeslagen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<div id="rij-rijzoek">
<link rel="stylesheet" href="scripts/menu/1-1/1-1-menu-standaard.css" />
<header class="header"><a href="#" class="logo res-logo"><img src="images/logo/logo.png" title="Goochelshow"  alt="Goochelshow voor alle leeftijden kinderen en volwassenen, kinderfeestjes, verjaardagen en evenementen. ook shows aan huis mogelijk"></a>
<input class="menu-btn" type="checkbox" id="menu-btn" />
<label class="menu-icon" for="menu-btn"><span class="navicon"></span></label>
<ul style="margin-top: 10px;" class="menu">
<li><a href="#"><i class="fa fa-fw fa-lg fa-home"></i>Home</a></li>
<li><a href="#"><i class="fa fa-fw fa-lg fa-youtube-play"></i>Video</a></li>
<li><a href="#"><i class="fa fa-fw fa-lg fa-phone"></i>Bel ons</a></li>
<button class="button-menu" onclick="#'"><i class="fa fa-fw fa-home"></i>Contact</button>
</ul></header>
<link rel="stylesheet" href="scripts/menu/1-1/button-menu.css" />
<div style="position:relative; padding-top:90px"></div>
<div id="verwijderen">
<!--
<button data-id="hero1-rijzoek" id="hero1-rijzoek" onclick="changeimage(this)">
verander bovenste afbeelding
</button>    

-->
<button data-id="rij-rijzoek" onclick="wisselen(this)">
Wissel met bovenste rij
</button>
<button data-id="rij-rijzoek" onclick="remove_div(this)">
Verwijder rij
</button>
</div>
</div>
Gewijzigd op 19/08/2023 19:24:14 door Paul Weiss
 
PHP hulp

PHP hulp

18/12/2024 06:14:15
 
- Ariën  -
Beheerder

- Ariën -

19/08/2023 21:38:39
Quote Anchor link
Hoe ziet je query eruit!
 
Paul Weiss

Paul Weiss

19/08/2023 23:00:29
Quote Anchor link
Bedankt voor je reactie. De html code wordt in een variable opgeslagen. Dat gedeelte gaat nog goed. vervolgens stuur ik doormiddel vam ajax deze door naar onderstaande php die de data vervolgens moet opslaan in de database


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
$code = trim( $_REQUEST['code'] );




$sql = "UPDATE paginatest SET code='$code' WHERE pagina = '" . $paginanaam . "'";

if ($conn->query($sql) === TRUE) {
  echo "Record 1 updated successfully";
} else {
  echo "Error updating record: " . $conn->error;
}


Toevoeging op 19/08/2023 23:02:22:

met alle andere html code gaat alles goed, alleen met de ene. niet. is om gek van te worden. Ik heb wel een workarround gevonden, waarbij ik de htmo code niet in de database opsla maar steeds in een bestand.
 
- Ariën  -
Beheerder

- Ariën -

19/08/2023 23:06:08
Quote Anchor link
Ik zou $code maar even escapen met real_escape_string. Als er een ' of een ander verboden teken in MySQL in voorkomt, zal je query worden geweigerd. Want ik vermoed dat je onbedoeld een SQL-injection triggert. Tevens ook gevaarlijk m.b.t. hacking.

tevens raad ik $_POST aan i.p.v. $_REQUEST.
Gewijzigd op 19/08/2023 23:11:59 door - Ariën -
 
Paul Weiss

Paul Weiss

19/08/2023 23:11:46
Quote Anchor link
heb ik volgens mij al gedaan. zo bedoel je?

$code = mysql_real_escape_string($code);
 
- Ariën  -
Beheerder

- Ariën -

19/08/2023 23:13:49
Quote Anchor link
Ja, als je dat op de juiste manier toepast, dus VOOR je query dan moet het werken.
Ik zou anders eens je $sql echo'en, en kijken welke data er in staat.

Deze zou je dan ook bijv. in PhpMyAdmin moeten kunnen plakken en uitvoeren.
 
Ward van der Put
Moderator

Ward van der Put

20/08/2023 08:10:50
Quote Anchor link
Je kunt meestal beter prepared statements in plaats van escaping gebruiken.
 
Jan R

Jan R

20/08/2023 08:20:28
Quote Anchor link
Lijn 11 echo-ed de fout. Wat verteld deze?

Ik zie ook dat de 2° lap html groter is dan de 1°. Is de veldgrootte groot genoeg?
 
Paul Weiss

Paul Weiss

20/08/2023 11:42:28
Quote Anchor link
veldgroote is inderdaad groot genoeg. heb ook grotere text velden gebruikt en daar werkt het ook niet bij. heb zelfs grotere html bestanden die wel worden opgeslagen. zal even kijken wat de foutmelding is? krijg alleen niets te zien omdat het php bestand extern wordt opgeroepen. zal het php bestand eens apart testen.

Toevoeging op 20/08/2023 11:53:22:

Ik heb $code = mysql_real_escape_string($code); geprobeerd. maar dan wordt er geen enkele html code opgeslagen.
Gewijzigd op 20/08/2023 11:55:29 door Paul Weiss
 
- Ariën  -
Beheerder

- Ariën -

20/08/2023 12:07:22
Quote Anchor link
Dan doe je het behoorlijk fout, want mysql_real_escape_string() bestaat al jaren niet meer. mysqli_real_escape_string daarentegen wel. Maar als je toch al object-georienteerd bezig bent met queries, dan zal het iets als $conn->real_escape_string(....) zijn.

Je kan procedureel (de functies) en object-georienteerd (met pijltje -> ) prima door elkaar mengen. Maar ik raad het af voor de leesbaarheid en de afwijkende syntax.
 
Paul Weiss

Paul Weiss

20/08/2023 12:13:28
Quote Anchor link
Hoi arien. bedankt voor je reactie. heb inmiddels de fout gevonden. er zit een fout in de html code die niet werkt. het betreft dit stukje code na onclick="#'"> i.p.v. onclick="#">

Dat merkt je met het testen van de html code niets van, maar hierdoor loopt het php bestand fout.
Bedankt iedereen voor het meedenken.
 
- Ariën  -
Beheerder

- Ariën -

20/08/2023 12:14:31
Quote Anchor link
Het ligt eraan hoe je het precies verwerkt? Als je netjes de boel escaped in je query, dan zou je alle soorten strings moeten kunnen gebruiken. Het is wel afhankelijk van je datatype in je database of die voldoende ruimte voor de karakters biedt.
Gewijzigd op 20/08/2023 12:16:05 door - Ariën -
 
Paul Weiss

Paul Weiss

20/08/2023 12:34:07
Quote Anchor link
hoi arien. ik gebruik type "text" in de database. Maar als in de string een ' teveel staat dan loopt het php bestand toch altijd fout? nog voordat de query wordt uitgevoerd? stel
ik heb onderstaande (foute) html code die ik in de php variable plaats dan zie je in de editor al dat de code fout zit. of hoe zou ik dit dan voor de toekomst het beste kunnen oplossen? (ben nog vrij nieuw in php etc. en ben allemaal aan het testen ook).



opslaan in php variable

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$code = 'onclick="#'">'
 
- Ariën  -
Beheerder

- Ariën -

20/08/2023 12:49:04
Quote Anchor link
Zoals ik al afvroeg: "Het ligt eraan hoe je het precies verwerkt".
Ik heb het idee dat er meer is dan jij tot nu toe laat zien.
 
Ivo P

Ivo P

21/08/2023 09:36:17
Quote Anchor link
html wordt door een browser verwerkt op een manier waarbij alles wat hij niet kent, genegeerd wordt.

Bijvoorbeeld <spaan> (ipv <span>) zal niet begrepen worden door je browser. Deze slaat dan de tag over.

<input verplicht="verplicht"> idem: dat wordt een gewone <input>. En mocht er een browser zijn die het wel begrijpt, dan doet _die_ er wel wat mee.

Dat gezegd hebbend: het is niet zo dat er als er 1 tag staat die niet begrepen wordt, je hele lap code ineens blanco wordt.
Niet in de browser en al helemaal niet in de database.
Immers: je post nu hierboven net ook een stuk code waarin een extra ' staat. Dat wordt nu ook in de database van phphulp opgeslagen.

Het ligt dus puur aan het ontbreken van de escaping in de opbouw van de query.

Mocht je in je menu een kopje hebben dat over "plaatjes" gaat, dan wordt het opgeslagen.
Is er een kopje "foto's" dan gaat het wederom mis.

Pas dus je escaping altijd toe.
Argumenten om niet te escapen:
* in mijn html zit geen '
* het is veilig want ik ga zelf geen sql-injecten in mijn eigen database.

kun je eenvoudig beantwoorden met:
* je doet het nu per ongeluk, maar als je wat javascript opneemt, gebruik je vaak wel ' en anders is <foo x='bar'> ook geldige hmtl. Dat argument gaat alleen NU op en niet in de toekomst.
* zie verhaal over foto's hier boven.
 
Paul Weiss

Paul Weiss

21/08/2023 09:44:03
Quote Anchor link
bedankt voor de toelichting. In de database wordt puur html opgeslagen die ik zelf van tevoren heb gebouwd. dus in princicpe heb ik geen escaping nodig. mocht een stukje html code niet worden opgeslagen dan weet ik dus dat er een foutje in de string zit. Dat kan ik dan verhelpen. Maar ik ben wel benieuwd hoe ik het precies moet escapen. zal alle code binnenkort wel even hier plaatsen hoe de html wordt verwerkt en wordt opgeslagen. wellicht dat jullie dan een tip hebben hoe ik dit het beste kan doen.alvast bedankt iedereen.
Gewijzigd op 21/08/2023 09:55:32 door Paul Weiss
 
- Ariën  -
Beheerder

- Ariën -

21/08/2023 11:45:17
Quote Anchor link
Paul Weiss op 21/08/2023 09:44:03:
bedankt voor de toelichting. In de database wordt puur html opgeslagen die ik zelf van tevoren heb gebouwd. dus in princicpe heb ik geen escaping nodig. mocht een stukje html code niet worden opgeslagen dan weet ik dus dat er een foutje in de string zit.

Dat is een foute gedachte. Een ' die een query om zeep kan helpen kan zich prima in een HTML-code bevinden. En zo zullen er nog meer karakters of combinaties bestaan. Dus ALTIJD escapen met de genoemde functie.

Lees topic even terug a.u.b.
Gewijzigd op 21/08/2023 12:06:28 door - Ariën -
 
Ivo P

Ivo P

21/08/2023 12:54:29
Quote Anchor link
hmm., mijn post is kennelijk niet opgeslagen.
Anyway: naast een stukje uitleg over wat Ariën ook al zegt: je weet nooit zeker of in de toekomst escapen toch nodig is. Des noods omdat je een woord met een apostrof op wilt staan of omdat je toch javascript opneemt.

daarnaast had ik 2 voorbeelden:
https://www.php.net/manual/en/mysqli.real-escape-string.php example #1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$code
= $conn->real_escape_string($code);
$paginanaam = $conn->real_escape_string($paginanaam);
$sql = "UPDATE paginatest SET code='". $code."' WHERE pagina = '" . $paginanaam . "'";
?>



of prepared statement (voorkeur): https://www.php.net/manual/en/mysqli.prepare.php weer example #1

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$sql
= "UPDATE paginatest SET code=? WHERE pagina = ?";

$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ss', $code, $paginanaam);

$stmt->execute();
?>
 
Evert Bennekom

Evert Bennekom

22/08/2023 15:53:47
Quote Anchor link
Paul Weiss op 19/08/2023 23:00:29:
Bedankt voor je reactie. De html code wordt in een variable opgeslagen. Dat gedeelte gaat nog goed. vervolgens stuur ik doormiddel vam ajax deze door naar onderstaande php die de data vervolgens moet opslaan in de database


2 gedachtes hierover.

1. Een html block dat o.a. het '#' teken bevat in javascript toewijzen aan een variable lijkt me vrij harig. Zou zeker eerst eens kijken hoe deze string de reis van de browser naar de server overleeft.
Zet voor de aardigheid eens een var_dump($_POST);die(); in je php script en kijk even of wat je verwacht dat binnenkomt overeenkomt met wat er daadwerkelijk binnenkomt. Indien het verschilt kijk dan even of je met de juiste character encoding nog iets kunt oplossen in je javascript maar bedenk wel dat je geen controle hebt over de default characterset die de browser van je bezoeker gebruikt en of javascript de door jouw verwachte daarvan kan afdwingen.

2. Probeer eens in plaats van mysqli de pdo wrapper te gebruiken. Dan hoef je niet meer zelf te hannesen met escape en unescape. En gebruik dan ajb prepared statements. Je insert query lijkt me behoorlijk eng, zeker omdat ik vermoed dat de inhoud van $code al in de browser gemanipuleerd kan worden.

Misschien beter dit eens proberen:
// creeer eerst een pdo object, in dit voorbeeldje $oPdo en doe dan het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$oQry = $oPdo->prepare( "UPDATE paginatest SET code=:code WHERE pagina=:pagina" );
$oQry -> execute( array( ':code'=>$code, ':pagina'=>$paginanaam) );
if($oQry->rowCount()===1)
{
    // ging goed
}
else
{
     // ging niet goed.  
}
Gewijzigd op 22/08/2023 15:55:10 door Evert Bennekom
 
Paul Weiss

Paul Weiss

28/08/2023 10:37:39
Quote Anchor link
Ivo P op 21/08/2023 12:54:29:
hmm., mijn post is kennelijk niet opgeslagen.
Anyway: naast een stukje uitleg over wat Ariën ook al zegt: je weet nooit zeker of in de toekomst escapen toch nodig is. Des noods omdat je een woord met een apostrof op wilt staan of omdat je toch javascript opneemt.
[...]




Toevoeging op 28/08/2023 10:40:02:

Ik heb beide geprobeerd. Maar dan wordt geen enkele code opgeslagen. als ik real_escape_string samenvoeg met de request functie zoals onderstaande voorbeeld dan werkt het wel.


$code = $conn->real_escape_string($_REQUEST['code'] );

Toevoeging op 28/08/2023 10:46:11:

Evert Bennekom op 22/08/2023 15:53:47:
Paul Weiss op 19/08/2023 23:00:29:
Bedankt voor je reactie. De html code wordt in een variable opgeslagen. Dat gedeelte gaat nog goed. vervolgens stuur ik doormiddel vam ajax deze door naar onderstaande php die de data vervolgens moet opslaan in de database


2 gedachtes hierover.

1. Een html block dat o.a. het '#' teken bevat in javascript toewijzen aan een variable lijkt me vrij harig. Zou zeker eerst eens kijken hoe deze string de reis van de browser naar de server overleeft.
Zet voor de aardigheid eens een var_dump($_POST);die(); in je php script en kijk even of wat je verwacht dat binnenkomt overeenkomt met wat er daadwerkelijk binnenkomt. Indien het verschilt kijk dan even of je met de juiste character encoding nog iets kunt oplossen in je javascript maar bedenk wel dat je geen controle hebt over de default characterset die de browser van je bezoeker gebruikt en of javascript de door jouw verwachte daarvan kan afdwingen.

2. Probeer eens in plaats van mysqli de pdo wrapper te gebruiken. Dan hoef je niet meer zelf te hannesen met escape en unescape. En gebruik dan ajb prepared statements. Je insert query lijkt me behoorlijk eng, zeker omdat ik vermoed dat de inhoud van $code al in de browser gemanipuleerd kan worden.

Misschien beter dit eens proberen:
// creeer eerst een pdo object, in dit voorbeeldje $oPdo en doe dan het volgende:
[....]



Ik zal bovenstaande ook eens testen. bedankt iedereen.


Toevoeging op 28/08/2023 12:05:52:

hier even nog een update: de html code kan inderdaad deels gemanipuleerd worden door gebruik te maken van de contenteditable functie ivm aanpassen van de tekst, aanpassen tekstkleur, heading etc.. de html elementen worden naar gelang van keuze ingeladen. Uiteraard kunnen deze ook weer worden gemanipuleerd worden door binnenin de inspector van de browser (onjuiste) aanpassingen te maken. Ik vraag mij dan wel af of er uberhaupt wel een echt veilige manier is? Kan niet elke content gemanipuleerd worden als je het echt wilt? Ik heb wel een andere manier gevonden door de content i.p.v. in de database op te slaan in een bestand. mocht er iets fout gaan is er niet aan de hand natuurlijk. Ik heb nu trouwens alle bovenstaande oplossingen geprobeerd en bij geen enkele wordt de code goed verwerkt om op te kunnen slaan in de database. Enige die werkt is dus met de onderstaande functie waarbij de content van een form wordt opgeslagen in een variable: de inhoud wordt dan altijd goed doorgestuurd naar de database. Maar de vraag is hoe veilig is deze?

$code = $conn->real_escape_string($_REQUEST['code'] );
Gewijzigd op 28/08/2023 11:30:32 door - Ariën -
 
Ivo P

Ivo P

28/08/2023 13:57:59
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$code = $conn->real_escape_string($_REQUEST['code'] );


die regel escape-t de inhoud van je invoer.
Dat is dus prima.

Dat de inhoudt van de pagina in de browser aan te passen is, daar ontkom je niet aan. Dat kun je zelfs op de pagina van de Rabobank doen. Maar dat heeft alleen effect voor de gebruiker van die browser zelf.


--
De ene route is om de invoer te escapen voor je deze invoer in de query plaatst.

De andere route is om een "prepared statement" te gebruiken. Daarbij zijn placeholders in de query aanwezig waarbij je php/database zelf zorgt voor het escapen.
Of dat via Mysql objecten gaat of via PDO, maakt niet heel veel uit. De syntax van PDO is wat duidelijker, vind ik, maar technisch maakt het niet veel verschil.

Aangezien je nu op Mysql zit, zou ik niet omwille van Prepared Statements ineens op PDO overstappen.

Maar het is het een of het ander.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.