probleem met real_escape_string

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

01/06/2014 21:22:43
Quote Anchor link
beste mensen,

Ik probeer een tekst in een database te krijgen. Ik krijg de foutmelding:
Quote:
mysqli_error() expects exactly 1 parameter, 0 given in

de fout ontstaat bij het uitvoeren van de query:
Quote:
if(!$res=mysqli_query($dblink, $sql))

hierbij is $sql:
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
<?php
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;        
    }

        $input['omschrijving']=test_input($_POST['omschrijving']);
    $input['omschrijving']=mysqli_real_escape_string($dblink,$input['omschrijving']);
    $sql="INSERT INTO m_boek (titel, auteur, jaar, taal, sterren, omschrijving, voorkant, bezit)    
        VALUES
            ('"
.$input['titel']."',
            '"
.$input['auteur']."',
            '"
.$input['jaar']."',
            '"
.$input['taal']."',
            '"
.$input['sterren']."',
            '"
.$input['omschrijving']."',
            '"
.$input['voorkant'].".jpg',
            '"
.$input['bezit']."')";
?>

De code is nog veel langer, maar dat is verder niet relevant. De waarde van $sql is bij de run:
Quote:
INSERT INTO m_boek (titel, auteur, jaar, taal, sterren, omschrijving, voorkant, bezit)
VALUES
('titel',
'auteur',
'2014',
'NL',
'1',
'$input[\'omschrijving\'] \'en enkele\' en &quot;dubbele&quot; en &lt; en &gt;',
'test2.jpg',
'0')

De regel van omschrijving komt overeen met hetgeen ik in heb gevoerd via een inputbox, te weten:
Quote:
$input['omschrijving'] 'en enkele' en "dubbele" en < en >

Dus op zich lijkt het me correct.

Maar waar gaat het dan fout?

Alvast bedankt,

Jop
Gewijzigd op 01/06/2014 21:24:23 door
 
PHP hulp

PHP hulp

13/11/2024 07:37:44
 
Christian k

christian k

01/06/2014 21:37:52
Quote Anchor link
kun je de regel ook geven waar de mysqli_error() in staat?
want daar zit het probleem staat er in je foutmelding

Toevoeging op 01/06/2014 21:39:54:

waarschijnlijk moet je de mysqli_error() veranderen in: mysqli_error($dblink)
(dat maak ik op uit je veldmelding maar ik weet het niet zeker zonder je code te zien)
 

01/06/2014 21:41:30
Quote Anchor link
bedoel je dit?:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    if(!$res=mysqli_query($dblink, $sql))
    {

        trigger_error('Fout in query: '.mysqli_error());
    }

?>
 
Christian k

christian k

01/06/2014 21:44:46
Quote Anchor link
ja dat moet je veranderen in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    if(!$res=mysqli_query($dblink, $sql))
    {

        trigger_error('Fout in query: '.mysqli_error($dblink));
    }

?>
 

01/06/2014 21:45:31
Quote Anchor link
Aangepast, krijg nu een hele andere foutmelding, maar die is me duidelijk, dank je voor de tip!


Toevoeging op 01/06/2014 21:52:15:

Nu heb ik wel een ander probleem, en dat is dat bij het verwerken van de tekst die ik uit de database haal, dat ik op mijn website alle &quot; en &lt; en &gt; te zien krijg. Hoe kan ik dat voorkomen?
Dit krijg ik te zien in de htmlcode van de pagina die de gegevens uit de database gebruikt:
Quote:
<td colspan="3">$input['omschrijving'] 'en enkele' <br />
en &amp;quot;dubbele&amp;quot; <br />
<br />
en &amp;lt; en &amp;gt;</td>

Moet ik htmlspecialchars niet eerst terug zetten tussen regel 8 en 9?

Bij het uitlezen uit de db gebruik ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
   $sBOmschrijving
[$i]=htmlentities($aData['omschrijving']);
?>
Gewijzigd op 01/06/2014 22:06:22 door
 
- SanThe -

- SanThe -

01/06/2014 22:24:58
Quote Anchor link
Htmlentities is voor de presentatie en hoort dus niet in de database.
Regel 5 moet dus weg.
 

01/06/2014 22:30:12
Quote Anchor link
Regel 5 heb ik nodig omdat ik de functie voor meerdere dingen gebruik, maar belangrijker, eerst wordt de input gepresenteerd (andere delen van het script).

Dus dan zou ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $input
['omschrijving']=htmlspecialchars_decode($input['omschrijving'])
?>

tussen regel 8 en 9 in moeten voegen.

Doe ik het dan ook nog veilig?
 
- SanThe -

- SanThe -

01/06/2014 22:32:04
Quote Anchor link
Data hoort clean in de database en niet met htmlentities.
 

01/06/2014 22:37:30
Quote Anchor link
@SanThe
Dus als ik hetgeen in mijn vorige reactie staat doe, dan doe ik het goed?
 
Christian k

christian k

03/06/2014 16:59:12
Quote Anchor link
wat - SanThe - probeert te zeggen is dat je de data zonder er iets aan te doen (natuurlijk wel
mysqli_real_escape_string()) in de database moet zetten. je moet je htmlentities er pas overheen doen
als je het uit de database haalt en op de pagina wilt echo'en. want als je wat met de data wilt doen dan is het heel moeilijk omdat je dan alles in de database hebt staan. op deze manier kun je het veranderen als je het op de pagina echo't.

filtert htmlentities trouwens alle xxs?
 
Obelix Idefix

Obelix Idefix

03/06/2014 17:08:05
Quote Anchor link
Waarom die functie?
Sla je gegevens op in de database door in de query gebruik te maken van mysqli_real_escape_string.
Dan heb je, zoals hierboven aangegeven, de meest pure input verwerkt en de meeste risico's beperkt met zo min mogelijk inspanning.
Nu voer je drie bewerkingen uit op een variabele en maak je een onnodige variabele aan waar je nog wat bewerkingen op los laat.
 

03/06/2014 20:04:09
Quote Anchor link
ik doe inderdaad een aantal bewerkingen met de var. omdat ik de var eerst nog gebruik om de invoer te laten bevestigen door de gebruiker gebruik ik de functie. dan decodeer ik de special characters (htmlspecialchars_decode) en om veilig in de database op te slaan gebruik ik mysqli_real_escape_string. htmlentities gebruik ik als ik de data weer uit de database haal. Als het minder omslachtig kan, dan hoor ik het graag. Ik hobby ook maar wat en probeer iets veilig te maken. Maar gelukkig is allemaal voor mezelf ;-)
 



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.