Rich Text Editor to Database

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 »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Pagina: 1 2 volgende »

CNEPHP -

CNEPHP -

15/01/2014 09:39:22
Quote Anchor link
Post staat onder deze categorie omdat de text editor in js is.

Beste,

Na het implementeren van mijn Rich Text Editor (uEditor.js) kan ik wel handmatig text toevoegen. Maar als ik bepaalde teksten kopieer en plak vanuit kladblok, wordt de tekst wel weergeven in de textarea.. Maar zodra ik het op sla, wordt het niet toegevoegd aan de database

Geen idee of het nu aan mijn PHP functie ligt (aangezien hij in een normaal textarea field wel alles succesvol wegschrijft) of dat het aan de Javascript code ligt.

JS code:
https://github.com/laoqiu/uEditor/blob/master/uEditor.js

Misschien kunnen jullie het vinden.. Alvast bedankt!
Gewijzigd op 15/01/2014 09:52:50 door CNEPHP -
 
PHP hulp

PHP hulp

26/11/2024 21:19:35
 
Michael -

Michael -

15/01/2014 09:43:22
Quote Anchor link
C Stonebakers op 15/01/2014 09:39:22:
zodra ik het op sla, wordt het zonder ene foutafhandeling gewoon niet toegevoegd aan de database


Lijkt me dat je geen of onvoldoende doet aan foutafhandeling. Controleer of de query goed is gegaan en check daarna ook of er daadwerkelijk iets is toegevoegd (affected_rows). Gebruik je mysql(i)_real_escape_string voor het de database in gaat? Anders kan het nog iets met de quotes te maken hebben.
 
CNEPHP -

CNEPHP -

15/01/2014 09:51:14
Quote Anchor link
Handmatig getypte teksten worden wel goed in de database gezet..


Code is even verkleind, anders wordt het gekkenwerk
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
<?php
    session_start();
        include '../connect.php';
    include 'head.php';
    

    
    if ($_SESSION['login'] != 1)
    {

        header('location:login.php');
        exit();
    }

    else
    {
        mysql_query("INSERT INTO events(titel, tekst, url)
        VALUES('"
.$_POST['titel']."', '".$_POST['tekst']."', '".$_POST['url']."')");
?>


En nu je het zegt.. geen foutafhandeling haha, je krijgt alleen een melding als het is geupload anders niet
Gewijzigd op 15/01/2014 09:52:24 door CNEPHP -
 
Erwin H

Erwin H

15/01/2014 09:57:47
Quote Anchor link
Content niet geescaped, zodra er dus een quote in de tekst staat ga je helemaal nat. Of dat nu uit een gecopieerde tekst komt, of uit handmatig ingevoerde tekst zal mysql een worst wezen.
 
Joakim Broden

Joakim Broden

15/01/2014 09:58:59
Quote Anchor link
Geen foutafhandelijk, bouw een normale fout afhandeling in om te zien of je een database error krijgt. En denk om SQL injection, met deze code kunnen kwaadwilligen je database vernielen/hacken etc...
 
CNEPHP -

CNEPHP -

15/01/2014 10:00:33
Quote Anchor link
Oke bedankt ik ga even aan de slag
 
Chris PHP

Chris PHP

15/01/2014 10:17:51
Quote Anchor link
Let overigens wel op dat mysql_query vanaf PHP 5.5.0 deprecated is, geen idee hoelang je dit script wil gaan gebruiken maar zodra je server overgaat naar 5.5 zal het dus niet meer werken.

Kijk als vervanger voor mysqli_ of PDO, dit staat overigens wel los van het probleem dat je hebt.
Gewijzigd op 15/01/2014 10:18:17 door Chris PHP
 
CNEPHP -

CNEPHP -

15/01/2014 10:49:58
Quote Anchor link
Wat is de beste manier om SQL injection tegen te gaan?

Toevoeging op 15/01/2014 10:51:35:

Chris NVT op 15/01/2014 10:17:51:
Let overigens wel op dat mysql_query vanaf PHP 5.5.0 deprecated is, geen idee hoelang je dit script wil gaan gebruiken maar zodra je server overgaat naar 5.5 zal het dus niet meer werken.

Kijk als vervanger voor mysqli_ of PDO, dit staat overigens wel los van het probleem dat je hebt.


Hebben meer mensen me opgewezen :p, ik denk dat ik mysqli ga gebruiken in mijn huidige site. Komt goed ;)
Gewijzigd op 15/01/2014 10:51:54 door CNEPHP -
 
Joakim Broden

Joakim Broden

15/01/2014 10:58:44
 
Erwin H

Erwin H

15/01/2014 10:58:51
Quote Anchor link
De beste manieren:
1 - filter alle user input via bijvoorbeeld filter_var functies.
2 - typecast alle niet string variabelen naar hun echte type
3 - gebruik de mysqli_real_escape_string functie voor alle variabelen die je als waarde in een query wilt hebben
4 - (of in plaats van 3) gebruik prepared statements met parameters, dit kan in zowel mysqli of pdo.
5 - als je user input gebruikt om kolomnamen te selecteren, zorg er dan voor dat je niet klakkeloos de user input overneemt, maar gebruik een switch statement (bijvoorbeeld) om een voorgedefinieerde waarde te gebruiken

En de oplossing die alle problemen zal voorkomen
6 - geen user input gebruiken in queries....
 
Chris PHP

Chris PHP

15/01/2014 11:01:33
Quote Anchor link
Voor mysql_ is het beste om je variabelen/waardes te escapen via mysql_real_escape_string();

Jou query die niet escaped is
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
 mysql_query("INSERT INTO events(titel, tekst, url)
        VALUES('"
.$_POST['titel']."', '".$_POST['tekst']."', '".$_POST['url']."')");
?>


Jou code die wel escaped is
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
 mysql_query("INSERT INTO events(titel, tekst, url)
        VALUES('"
.mysql_real_escape_string($_POST['titel'])."', '".mysql_real_escape_string($_POST['tekst'])."', '".mysql_real_escape_string($_POST['url'])."')");
?>


Voor mysqli is het mysqli_real_escape_string();
Voor PDo gebruik je prepared bijv
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$titel
= $_POST['titel'];
$tekst = $_POST['tekst'];
$url = $_POST['url'];
$ins = $conn->prepare("INSERT INTO events(titel, tekst, url)
        VALUES(':titel', ':tekst', :url')"
);
$ins->bind_param(':titel', $titel, PDO::PARAM::STR, 5);
$ins->bind_param(':tekst', $tekst, PDO::PARAM::STR, 5);
$ins->bind_param(':url', $url, PDO::PARAM::STR, 5);
$ins->execute();
?>


Let wel alle methodes hierboven is nog steeds zonder foutafhandeling!
 
CNEPHP -

CNEPHP -

15/01/2014 11:07:55
Quote Anchor link
Bedankt iedereen voor de reacties!

@Chris foutafhandeling heb ik op deze manier nu,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 ini_set('display_errors', 'On');
error_reporting(E_ALL);?>


Verder is het hele verhaal van SQL injection duidelijk, ik heb het wel een aantal keer voorbij zien komen maar nooit aandacht aan besteed omdat ik niet wist wat het inhield.
------
PS: Door mysql_real_escape_string worden alle teksten naar de database gezet
Gewijzigd op 15/01/2014 11:22:25 door CNEPHP -
 
Ivo P

Ivo P

15/01/2014 11:31:40
Quote Anchor link
conclusie:
De query mislukte door de aanwezigheid van een of meer single quotes ( ') in de tekst.

Dit zou met een controle "is de query gelukt" aan het licht gekomen zijn.
Dat geld ook voor query's waarin wel escapet wordt en ook op als je het met PDO oplost: er kan altijd een reden te verzinnen zijn, waarom de query mislukt. Als is het maar omdat de database koffie-pauze heeft.
 
Erwin H

Erwin H

15/01/2014 11:52:00
Quote Anchor link
C Stonebakers op 15/01/2014 11:07:55:
@Chris foutafhandeling heb ik op deze manier nu,

Dat is geen foutafhandeling, dat is simpelweg het tonen van fouten. Kan je soms al helpen, maar in dit geval niet. De fout die je had (de quotes dus) zal voor een mysql fout zorgen, niet een php fout. mysql zal de query niet uivoeren en daar een melding voor genereren. Omdat php dat helemaal niet ziet, zal php lekker doorgaan en jij ziet dus nog steeds niet wat er aan de hand is.
Voor queries moet je altijd naar het resultaat van de functie kijken. Is dat 'false' dan is de query mislukt en zal je iets moeten doen. Dat is de foutafhandeling.
 
Ivo P

Ivo P

15/01/2014 11:57:28
Quote Anchor link
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
<?php
  define('ONTWIKKELMODE', true);

  $sql = "een of andere query";

  $result = mysql_query($sql, $connectie);
  if($result === false)
  {

     // er ging iets fout. Wat doen we nu?
     // je kunt dit loggen in een file, erorr log oid.
     // liefst vertel je niet te veel aan de gebruiker, ivm gevaar van hackers die niet slimmer
     // moeten worden.
     // in ontwikkelmode:

     if( ONTWIKKELMODE === true)
     {

         echo 'de query<br>'. $sql . '<br>is mislukt met de foutmelding<br>'. mysql_error($connectie);
         // en nu? stoppen we? gaan we door? draaien we iets terug?
     }
     else
     {
         echo 'sorry, er ging iets mis';
      }
}

?>




Toevoeging op 15/01/2014 12:00:49:

en omdat dit nogal een lap code is, doen veel mensen simpel weg

mysql_query($sql) or die(mysql_error())

nadeel is dan natuurlijk dat je lang niet alle query's met een afgebroken scherm moet laten zitten, en dat je dan veel kunt verraden aan mensen die kwaads in zin hebben.

Daarom is het wel handig om 1 class te hebben, of desnoods een file met functions die al je query's uitvoeren.
Dan heb je maar 1 plek waar je de hele foutafhandeling moet opnemen.

En als alle query's toch in 1 file staan: dan is de overstap naar Mysqli ook niet zo groot meer (of naar Postgresql, of Oracle etc)
Gewijzigd op 15/01/2014 11:57:57 door Ivo P
 
Chris PHP

Chris PHP

15/01/2014 12:42:40
Quote Anchor link
@C NVT,

Zoals Erwin al aangeeft is dit niet echt een foutafhandeling, wat Ivo laat zien voor mysql (wat jij gebruikt) krijg je al een stuk duidelijker in beeld waarom je query misloopt.

Tevens een tip, wanneer je query niet goed loopt en je kunt geen wijs uit de foutafhandeling, druk je query eens af op je scherm. Dan zie je precies wat hij doet, en had je gezien dat er dus quotes in staan die je "string" vroegtijdig afbreken met alle gevolgen van dien ;-)

En omdat je nu mysql_real_escape_string(); hebt gebruikt werkt het wel, en dat komt omdat mysql_real_escape_string(); deze quotes eruit haald en je query dus goed doorloopt.

Let wel dat je specifieke foutafhandelingen alleen in je ontwikkel stadium wilt hebben! Wanneer je deze 'live' gaat dragen kun je er algemene foutmeldingen van maken of zelf codes maken waaraan alleen jij kunt zien wat het inhoudt. Anders kun je dus eventuele gevoelig info delen aan hackers die deze foutafhandeling krijgt te zien.
 
CNEPHP -

CNEPHP -

16/01/2014 16:52:40
Quote Anchor link
Hoe moet ik het gebruik van PHP 5.5 op mijn eigen site mogelijk maken?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
header("Content-Type:text/html;charset=utf-8");
$db_hostnaam = "host";
$db_gebruiker = "user";
$db_wachtwoord = "password";
$db_naam = "databasename";
 
$mysqli = new mysqli($db_hostnaam, $db_gebruiker, $db_wachtwoord, $db_naam);
?>


Werkt dus niet..
 
Ivo P

Ivo P

16/01/2014 16:56:26
Quote Anchor link
Je vraagt hoe je PHP 5.5 mogelijk maakt, en vervolgens toon je een stukje code waarin je verbinding met een database legt.

Wat heeft het een met het ander te maken?
 
CNEPHP -

CNEPHP -

16/01/2014 16:58:04
Quote Anchor link
$mysqli is toch een nieuwe feature van PHP 5.5?

Daarop baseer ik dat PHP 5.5 dan niet mogelijk is op mijn website. En dan is mijn vraag hoe dit dan zit.
Gewijzigd op 16/01/2014 16:58:35 door CNEPHP -
 
Ivo P

Ivo P

16/01/2014 17:07:15
Quote Anchor link
nou, volgens mij zit mysqli al sinds 5.0.0 in php

http://php.net/ChangeLog-5.php#5.0.0
Gewijzigd op 16/01/2014 17:08:21 door Ivo P
 
CNEPHP -

CNEPHP -

16/01/2014 17:08:43
Quote Anchor link
Oke dankje ;p dan kijk ik maar eens verder waarom het niet werkt
 

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.