quotes1-2-3 plaatsen
in PHP '(enkele)quotes.
Waarom zie ik dan tussen PHP code soms '"(drie)quotes hetgeen erg verwarrend lijkt;is het dan '+" of "+'
bedankt
Maar het id nu uit een variabele komt dan moet je die uit de string halen en daar krijg je extra quotes erbij:
Hetzelfde met SQL. Daar staan de waardes binnen enkele quotes en krijg je dus dit (de string quotes in php worden nu dubbele om niet te hoeven escapen):
En als hier ook weer het iets uit een variabele komt dan kan je die op de volgende manier invoegen:
Nu krijg je op het eind dus drie quotes (dubbel, enkel, dubbel) maar het lijken er wel vijf...
Bedankt,maar het is moeilijk
Wat snap je dan niet?
Dit is toch wat er normaal moet staan nml "om de string te openen en"om de string te sluiten.
In dit geval toch dubbele quotes?
Dat laat Erwin in zijn voorbeelden toch ook zien?
ok maar wat komt er achter,hoe geraak je aan die enkele quote
Oscar thys op 06/04/2012 18:51:29:
ok maar wat komt er achter,hoe geraak je aan die enkele quote
Wat bedoel je hiermee?
Wat komt waar achter?
Die quote (als teken)? Die zit gewoon op je toetsenbord... :s
Het principe is heel eenvoudig, quotes komen altijd met z'n tweeen. Een openings quote en een sluitings quote. Tel in elk voorbeeld dat ik gaf de quotes maar, er zijn altijd een even aantal quotes. Een even aantal enkele en een even aantal dubbele.
Als je dus ergens een string moet maken en je plaatst een quote (enkele of dubbele), dan moet je je altijd bedenken dat je die ook moet afsluiten. Het beste is om die afsluiting direct te zetten, dat vereenvoudigd het voor je.
Moet je vervolgens die string splitsen, dan doe je dat ook altijd direct met twee quotes. Een om het eerste deel te sluiten, de andere om het tweede deel te openen. En uiteraard moet je altijd een enkele quote met een enkele quote afsluiten en een dubbele met een dubbele.
Voorbeeldje:
Quote aan het begin, quote aan het eind. Nu wil ik echter hier HTML in plaatsen om het bijvoeglijk naamwoord een kleur of zo te geven via een span met een class:
Ook weer twee quotes in die HTML.
Volgende stap, het bijvoeglijk naamwoord is een variabele, dus ik moet de string onderbreken om er een php variabele in te voegen. Ik moet de string dus sluiten (met de enkele quote en daarna het tweede deel weer openen:
En zo verder en zo verder.
deze tutorial van mij eens. Dan zal je ws een hoop duidelijk worden
Lees Gewijzigd op 06/04/2012 20:34:36 door Jeroen VD
dubbele quotes voor html
enkele quotes voor php
Maar mijn vraag is de volgende:
mysql_query("insert into berichten(naam, bericht, tijd)values ('".mysql_real_escape_string enz...
Vanwaar komt '(een)"(twee)quotes die dan verder ook gebruikt worden om af te sluiten.
dat vind ik nergens terug en dat is mijn probleem
WHERE naam = "piet" is niet goed
WHERE naam = 'piet' is wel goed
Dus vandaar dat er geroepen wordt dat je in feite strings in php altijd quote met enkele quotes - waardoor je dus gedwongen wordt php variabelen naar buiten te halen -, met de uitzondering van:
sql-statements
en de specials: \t \r n
en de stelling: escapen is in feite bijna altijd een overbodige coding actie.
Oscar zegt: 'Ik begrijp helemaal niks van die quotes'
Daar zitten enkele quotes in. In PHP ziet het er dan zo uit:
Stel dat we nu een array hebben met allemaal citaten van jou (om maar even bij het voorbeeld te blijven). Dan krijgen we zoiets:
Code (php)
1
2
3
2
3
<?php
$quotesOfOscar = Array('Ik begrijp helemaal niks van die quotes', 'Waarom drie quotes in 1?', 'Foo bar en wat lorem ipsum');
?>
$quotesOfOscar = Array('Ik begrijp helemaal niks van die quotes', 'Waarom drie quotes in 1?', 'Foo bar en wat lorem ipsum');
?>
Nu willen we dit op de zelfde manier echoën als het eerste voorbeeld. Dus met Oscar zegt erbij en de quotes tussen enkele quotes. Het geen we dan moeten doen is de quote zelf (dus alles binnen de enkele quotes van het eerste voorbeeld) veranderen in de variabele. Dan krijg je dit:
Code (php)
Zie je nu wat er gebeurd? We krijgen nu die drie quotes wat jij niet snapt.
Je kan het bovenstaande ook in dit veranderen (al is dit niet 100% correct):
Maar i.p.v. dat we de variabele in de string stoppen (wat verkeerd is) halen we het eruit en daarvoor moeten we de string eerst stoppen (door af te sluiten met ") vervolgens .$quote. plaatsen en dan weer de string te open om de sluit ' te plaatsen en daarom plaatsen we weer een ".
Begrijp je het nu?
maar welke string of variable staat er dan vooor .mysql_real enz..
Code (php)
1
2
3
2
3
<?php
$query = mysql_query("insert into berichten(naam, bericht, tijd)values ('".mysql_real_escape_string($_POST['naam'])."','".mysql_real_escape_string($_POST['bericht'])."','".mysql_real_escape_string($_POST['tijd'])."'");
?>
$query = mysql_query("insert into berichten(naam, bericht, tijd)values ('".mysql_real_escape_string($_POST['naam'])."','".mysql_real_escape_string($_POST['bericht'])."','".mysql_real_escape_string($_POST['tijd'])."'");
?>
En iets beter opgeschreven:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query = mysql_query("insert into berichten(
naam,
bericht,
tijd)
values(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."',
'".mysql_real_escape_string($_POST['tijd'])."'"
);
?>
$query = mysql_query("insert into berichten(
naam,
bericht,
tijd)
values(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."',
'".mysql_real_escape_string($_POST['tijd'])."'"
);
?>
Het verwarrende is dat je hier nu eigenlijk twee talen door elkaar hebt. PHP en SQL. Daarom krijg je ook al die verschillende quotes.
Als het alleen SQL zou zijn dan zou dit het statement zijn:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
insert into berichten(
naam,
bericht,
tijd
) values (
'naam_waarde'
'bericht_waarde'
'tijd_waarde'
);
naam,
bericht,
tijd
) values (
'naam_waarde'
'bericht_waarde'
'tijd_waarde'
);
Zoals je ziet is hier het gebruik van de enkele quotes als iets duidelijker. Die staan in tweetallen om de in te voeren waardes heen, om in SQL een string aan te duiden.
Omdat je het echter in PHP hebt staan is het hele SQL statement een string in PHP en daarom moeten er dus nog quotes (dubbele in dit geval om heen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query = mysql_query("insert into berichten(
naam,
bericht,
tijd)
values(
'naam_waarde',
'bericht_waarde',
'tijde_waarde'
");
?>
$query = mysql_query("insert into berichten(
naam,
bericht,
tijd)
values(
'naam_waarde',
'bericht_waarde',
'tijde_waarde'
");
?>
En omdat de waardes geen directe (hard coded) strings zijn, maar in variabele zitten, moet je die string opknippen en met quotes afsluiten en weer openen om de variabele in te voegen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query = mysql_query("insert into berichten(
naam,
bericht,
tijd)
values(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."',
'".mysql_real_escape_string($_POST['tijd'])."'"
);
?>
$query = mysql_query("insert into berichten(
naam,
bericht,
tijd)
values(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."',
'".mysql_real_escape_string($_POST['tijd'])."'"
);
?>
Dit gaat dus ook weer met de dubbele quotes omdat het de PHP string onderbreekt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$query = "
INSERT INTO
berichten
(
naam,
bericht,
tijd
)
VALUES
(
'".mysql_real_escape_string($foo)."',
'".mysql_real_escape_string($bar)."',
'".mysql_real_escape_string($time)."'
)";
$result = mysql_query($query);
?>
$query = "
INSERT INTO
berichten
(
naam,
bericht,
tijd
)
VALUES
(
'".mysql_real_escape_string($foo)."',
'".mysql_real_escape_string($bar)."',
'".mysql_real_escape_string($time)."'
)";
$result = mysql_query($query);
?>
2Als we de query voluit schrijven, dus even zonder functies en variabelen, krijgen we iets als:
"INSERT INTO berichten(naam, bericht, tijd) VALUES ('foo', 'bar', 'time')"
Hierin openen we de string met " en aan het eind sluiten we hem met ". Omdat values in SQL tussen quotes moeten gebruiken we in de string 3x ' om de values heen, zoals 'foo' 'bar' 'time'.
3Nu willen we die foo/bar/time variabel maken, we voegen dus een variabele erin:
"INSERT INTO berichten(naam, bericht, tijd) VALUES ('$foo', '$bar', '$time')"
4Dit mag op deze manier in PHP, maar het is niet netjes. Daarom gaan we de variabele uit de string halen. Dit betekend dat we de string sluiten (met ", omdat we daarmee ook geopend zijn). Vervolgens gebruik je de . operator om 2 dingen aan elkaar te plakken dan komt de variabele dan weer de . operator en dan moeten we de string weer openen, omdat we gesloten hebben met " openen we hem ook met ". Het resultaat wordt dan:
"INSERT INTO berichten(naam, bericht, tijd) VALUES ('".$foo."', '".$bar."', '".$time."')"
Dit is dus eigenlijk precies hetzelfde als "Hello ".$name Alleen i.p.v. de spatie staat er een quote in de string.
Nu moeten er nog de escape functies omheen, maar dat spreekt wel voor zich.
Mocht je dit nog steeds niet begrijpen, leg dan eens uit tot hoever je het wel begrijpt. Telkens zo'n string geven helpt me en de andere niet om uit te vinden wat je niet begrijpt.
Ik heb dit nu even in stappen opgedeeld, vertel me tot welke stap je het begrijpt en waarom je de stap erna het niet meer begrijpt. Dan kan ik daar eventueel verder op toespitsen.
Gewijzigd op 07/04/2012 20:11:53 door Wouter J
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$sql = "INSERT INTO
flater
(ik,
snap,
niet,
wat,
een,
string,
is)
VALUES ('".mysql_real_escape_string('ik')."',
'".mysql_real_escape_string('sla')."',
'".mysql_real_escape_string('graag')."',
'".mysql_real_escape_string('een')."',
'".mysql_real_escape_string('flater')."',
'".mysql_real_escape_string('?')."',
'".mysql_real_escape_string('!')."')";
?>
$sql = "INSERT INTO
flater
(ik,
snap,
niet,
wat,
een,
string,
is)
VALUES ('".mysql_real_escape_string('ik')."',
'".mysql_real_escape_string('sla')."',
'".mysql_real_escape_string('graag')."',
'".mysql_real_escape_string('een')."',
'".mysql_real_escape_string('flater')."',
'".mysql_real_escape_string('?')."',
'".mysql_real_escape_string('!')."')";
?>
Alles wat hier tussen " " staat is een string en wat tussen de . . stata is php gerelateerd.
Wat aan de functie mysql_real_escape_string wordt doorgegeven is ook een string welke je dan weer quote met enkele quotes tenzij het een variabele is dan hoef je geen quotes te plaatsen!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$ik = 'Ik';
$sla = 'sla';
$graag = 'graag';
$een = 'een';
$flater = 'flater';
$sql = "INSERT INTO
flater
(ik,
snap,
niet,
wat,
een,
string,
is)
VALUES ('".mysql_real_escape_string($ik)."',
'".mysql_real_escape_string($sla)."',
'".mysql_real_escape_string($graag)."',
'".mysql_real_escape_string($een)."',
'".mysql_real_escape_string($flater)."',
'".mysql_real_escape_string('?')."',
'".mysql_real_escape_string('!')."')";
?>
$ik = 'Ik';
$sla = 'sla';
$graag = 'graag';
$een = 'een';
$flater = 'flater';
$sql = "INSERT INTO
flater
(ik,
snap,
niet,
wat,
een,
string,
is)
VALUES ('".mysql_real_escape_string($ik)."',
'".mysql_real_escape_string($sla)."',
'".mysql_real_escape_string($graag)."',
'".mysql_real_escape_string($een)."',
'".mysql_real_escape_string($flater)."',
'".mysql_real_escape_string('?')."',
'".mysql_real_escape_string('!')."')";
?>
Code (php)
1
2
3
4
2
3
4
<?php
$x = 20;
echo 'Ik herhaal liever '.$x.' keer mijn vraag, dan dat ik een flater sla?!';
?>
$x = 20;
echo 'Ik herhaal liever '.$x.' keer mijn vraag, dan dat ik een flater sla?!';
?>
zo en nu is alles wat tussen ' ' staat een string, en wat tussen de . . is weer php gerelateerd.
En herhaal je vraag niet telkens, maak dan op z'n minst duidelijk wat je er niet aan begrijpt.
Gewijzigd op 07/04/2012 20:21:36 door Noppes Homeland
Dit is fantastisch uitgelegd,bedankt:-)
Offtopic:
Ik heb nog nooit zoveel lange uitleggen van verschillende mensen in 1 topic gezien :D
Gewijzigd op 07/04/2012 20:37:46 door Wouter J
;-)merçi