mysql_real_escape_string, ben ik nou zo dom ?

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 »

Patrick G

patrick G

24/02/2008 19:28:00
Quote Anchor link
Ik ben nu al 3 uur bezig met het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$namecheck= mysql_real_escape_string($name[0]);


voor het wegschrijven echo ik :
\'t Schrijvertje
In de database staat:
't Schrijvertje

Bij het uitlezen van de database krijg ik de melding:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't Schrijvertje'' at line 1

Wat doe/denk ik fout ?
Gewijzigd op 01/01/1970 01:00:00 door Patrick G
 
PHP hulp

PHP hulp

24/12/2024 19:30:08
 
Jesper Diovo

Jesper Diovo

24/02/2008 19:29:00
Quote Anchor link
Nog eens apart addslashes() eroverheen laten gaan?

Edit: gebruik je wel $namecheck in de insert-query?
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Patrick G

patrick G

24/02/2008 19:37:00
Quote Anchor link
Ja ik doe de volgende Query
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
        $Qry_2 = "INSERT INTO school (naam, cat, pnt) VALUES ('$namecheck', 'C', '$score')";
        $result_id_2 = mysql_query($Qry_2) or die(mysql_query($Qry_2));
        echo $namecheck;


waar moet ik dan die addslashes zetten ?
 
Joren de Wit

Joren de Wit

24/02/2008 19:38:00
Quote Anchor link
Quote:
Nog eens apart addslashes() eroverheen laten gaan?
Nee, nooit doen! De functie addslashes() heb je nooit nodig, mysql_real_escape_string() is voldoende.

@patrick: het wegschrijven en uitlezen uit de database zijn twee verschillende dingen. Zo te zien gaat het wegschrijven prima en heb je een probleem met het uitlezen. Laat de query die je voor dat doeleinde gebruikt eens zien, wellicht dat we je dan verder kunnen helpen.
 
Jesper Diovo

Jesper Diovo

24/02/2008 19:39:00
Quote Anchor link
Haal variabelen even uit de quotes, en gooi or die() alsjeblieft in de vuilnisbak. Or die() is een hele lelijke manier van foutafhandeling. Check met een if-constructie of een query juist of onjuist werd uitgevoerd.

@Blanche; als ik mysql_real_escape_string() gebruik, zie ik wél backslashes in mijn database. Het gaat dáár dus fout.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Patrick G

patrick G

24/02/2008 20:03:00
Quote Anchor link
Als ik zelf de "\" in de database toevoeg gaat het goed bij het uitlezen.

Maar als ik een vervolgens:
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
$namecheck = mysql_real_escape_string($name[0]);
    $Qry = "SELECT naam,cat FROM school WHERE cat = 'C' AND naam = '$namecheck' " ;
    $resultaat = mysql_query($Qry) or die (mysql_error(heheheh));
    $row = mysql_num_rows($resultaat);

    if ($row == 0){
        $Qry_2 = "INSERT INTO school (naam, cat, pnt) VALUES ('$namecheck', 'C', '$score')";
        $result_id_2 = mysql_query($Qry_2) or die(mysql_query($Qry_2));
        echo $namecheck;
        }
    else
    {
        $sql="UPDATE school SET pnt = $score WHERE naam = '".$namecheck."' AND cat = 'C' ";
        echo $namecheck;        
        if(!mysql_query($sql)){
           echo 'Er is een fout opgetreden: '.mysql_error();
           }
    }


doe, dan schrijft hij wederom een record, terwijl er dus een record in de database staat.

@Djemo, als ik de variabelen uit de quote's haal krijg ik helemaal geen output
 
Jan Koehoorn

Jan Koehoorn

24/02/2008 20:07:00
Quote Anchor link
Waarom doe je dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $namecheck
= mysql_real_escape_string($name[0]);
?>

Waar komt $name[0] vandaan? Is dat een waarde die door een formulier verzonden is?
 
Bo az

Bo az

24/02/2008 20:10:00
Quote Anchor link
@patrick kijk eens of magic_quotes aan staat, als dat zo is moet je eerst stripslashes en dan pas mysql_real_escape_string doen.
Edit:
Uiteraard alleen in het geval je gegevens uit een formulier komen zoals Jan zegt.


@Djemo die slashes horen niet in je database, probeer maar eens iets in te voegen via phpmyadmin.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Patrick G

patrick G

24/02/2008 20:10:00
Quote Anchor link
Ja, Jan,

Ik lees een XML file uit, en die wordt vervolgens naar de database gegooid.
Gaat allemaal prima, zolang er geen school is met de naam 't Schrijvertje.

Kan het iets te maken hebben met de definitie van het veld in de database ?
 
Joren de Wit

Joren de Wit

24/02/2008 20:10:00
Quote Anchor link
Quote:
@Blanche; als ik mysql_real_escape_string() gebruik, zie ik wél backslashes in mijn database. Het gaat dáár dus fout.
Nee, dan gaat het ergens anders fout. Hoogstwaarschijnlijk staat de magic_quotes_gpc instelling dan aan waardoor in jouw geval mysql_real_escape_string() ervoor zorgt dat de input dubbel geëscaped wordt...

@Patrick: echo de verschillende queries eens en kijk eens hoe die eruit zien. Dan wordt er waarschijnlijk heel wat duidelijk.
 
Jan Koehoorn

Jan Koehoorn

24/02/2008 20:12:00
Quote Anchor link
patrick schreef op 24.02.2008 20:10:
Ja, Jan,

Ik lees een XML file uit, en die wordt vervolgens naar de database gegooid.
Gaat allemaal prima, zolang er geen school is met de naam 't Schrijvertje.

Kan het iets te maken hebben met de definitie van het veld in de database ?

Nee, wat de rest zegt; magic quotes staat waarschijnlijk aan. Maak een bestand met de naam .htaccess en zet dat in de root van je site. In het bestand zet je:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
# magic quotes uit
php_flag magic_quotes_gpc off

Dan ben je van het probleem af.
 
Patrick G

patrick G

24/02/2008 21:14:00
Quote Anchor link
@ Jan,

Helaas dat helpt niets.
Ik krijg nog steeds:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't Schrijvertje'' at line 1

Opvallend is de dubbele quote aan het eind.
 
Lode

Lode

24/02/2008 21:17:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo var_dump(magic_quotes_gpc()); // toch ? RTF...
?>


uitzetten idd via .htaccess...
 
Joren de Wit

Joren de Wit

24/02/2008 21:18:00
Quote Anchor link
@Lode: get_magic_quotes_gpc() bedoel je denk ik?
 
Patrick G

patrick G

24/02/2008 21:25:00
Quote Anchor link
int(1)

en dat betekent ?

Ik begrijp dat ik TFM moet lezen, maar ik zoek me het schompes, heb inmiddels al zo'n 25 tutorials gelezen, maar tot nu toe zonder resultaat.

Behalve dat het eten aangebrand was dan :(
Gewijzigd op 01/01/1970 01:00:00 door patrick G
 
Joren de Wit

Joren de Wit

24/02/2008 21:32:00
Quote Anchor link
Dat betekent dus dat magic_quotes_gpc aan staat, iets dat niet echt gewenst is. Zet deze instelling dus uit in je php.ini of als je daar niet bij kan op de manier die Jan al beschrijft.
 
Patrick G

patrick G

24/02/2008 21:50:00
Quote Anchor link
Ik heb inmiddels beide gedaan: krijg na controle de melding: int(0)


Maarr....
Als ik mysql_real_escape_string NIET gebruik,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in D:\phpmap\xampp\htdocs\xampp\schaakmaat\schoolC.php on line 63


als ik het wel gebruik, zie als hierboven.
You have an error in ..........'t Schrijvertje'' at line 1
Dit gebeurt zowel op mijn lokale machine als bij mijn provider !!
Gewijzigd op 01/01/1970 01:00:00 door patrick G
 
Frank -

Frank -

24/02/2008 22:30:00
Quote Anchor link
Djemo schreef op 24.02.2008 19:29:
Nog eens apart addslashes() eroverheen laten gaan?

Edit: gebruik je wel $namecheck in de insert-query?
@Djemo: Er is je al meerdere keren verteld dat dit een hele domme fout is, hou dus s.v.p. op met dit foute advies, daarmee help je mensen van de wal in de sloot.

Hoe doe je het wel?
magic_quotes zet je altijd uit en escapen doe je met bv. mysql_real_escape_string() of prepared statements.

Waarom? Omdat je dan nooit hardcoded slashes in je database krijgt die je er later weer uit moet slopen.
 
Patrick G

patrick G

24/02/2008 22:36:00
Quote Anchor link
BUMP

Ik heb het opgelost, moest bij het uitlezen van de database een select in een select doen, daarbij gebruikte ik de naam uit de eerste SELECT zonder mysql_real_escape_string voor de WHERE van de 2e select.

gewoon op de verkeerde plaats gekeken.

allemaal bedankt....
 



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.