Nogmaals quotes
Maar met mijn sql lijn heb ik een probleempje mijn docent PHP had gezegd dat bij de waardes enkele quotes moesten staan. Maar als ik op deze lijn de buitenste quotes omzet naar enkele krijg in een parse error.
Ik heb de juiste manier gevonden maar ik zoek even een verklaring.
Kan iemand mij een verklaring geven waarom juist ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$sql2 = 'INSERT INTO dvd';
$sql2 .= ' ( naam, genre_id, foto, omschrijving, regisseur_id, speelduur )';
$sql2 .= ' VALUES';
$sql2 .= " ( '".$naam."', '".$genre_id."', '".$foto."', '".$omschrijving."', '".$regisseur_id."', '".$speelduur."' );";
$result4 = mysql_query( $sql2 );
$sql2 = 'INSERT INTO dvd';
$sql2 .= ' ( naam, genre_id, foto, omschrijving, regisseur_id, speelduur )';
$sql2 .= ' VALUES';
$sql2 .= ' ( '.$naam.', '.$genre_id.', '.$foto.', '.$omschrijving.', '.$regisseur_id.', '.$speelduur.' );';
$result4 = mysql_query( $sql2 );
?>
$sql2 .= ' ( naam, genre_id, foto, omschrijving, regisseur_id, speelduur )';
$sql2 .= ' VALUES';
$sql2 .= " ( '".$naam."', '".$genre_id."', '".$foto."', '".$omschrijving."', '".$regisseur_id."', '".$speelduur."' );";
$result4 = mysql_query( $sql2 );
$sql2 = 'INSERT INTO dvd';
$sql2 .= ' ( naam, genre_id, foto, omschrijving, regisseur_id, speelduur )';
$sql2 .= ' VALUES';
$sql2 .= ' ( '.$naam.', '.$genre_id.', '.$foto.', '.$omschrijving.', '.$regisseur_id.', '.$speelduur.' );';
$result4 = mysql_query( $sql2 );
?>
"SELECT ....";
Dus " aan de buitenkant :)
Iemand enige verklaring waarom?
Ja sorry ik wil het graag goed leren.
Code (php)
1
$sql2 .= " ( '".$naam."', '".$genre_id."', '".$foto."', '".$omschrijving."', '".$regisseur_id."', '".$speelduur."' );";
krijg je de volgende querie:
maar met:
krijg je de volgende querie
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$sql2 = "
INSERT INTO
dvd(
naam,
genre_id,
foto,
omschrijving,
regisseur_id,
speelduur
)
VALUES(
'".$naam."',
'".$genre_id."',
'".$foto."',
'".$omschrijving."',
'".$regisseur_id."',
'".$speelduur."'
);
";
?>
$sql2 = "
INSERT INTO
dvd(
naam,
genre_id,
foto,
omschrijving,
regisseur_id,
speelduur
)
VALUES(
'".$naam."',
'".$genre_id."',
'".$foto."',
'".$omschrijving."',
'".$regisseur_id."',
'".$speelduur."'
);
";
?>
Zo loop je niet te kloten met diverse soorten quotes om de query en heb je niet 3, 4 x $sql2 = blabla nodig. Tevens is snel te zien hoeveel kolommen je hebt en hoeveel waardes je probeert weg te schrijven. Ook het aantal komma's is goed te zien, dit maakt de kans op fouten een stuk kleiner. Het debuggen zal in elk geval sneller gaan.
Edit: En wat Jan al zegt, wanneer je integers wegschrijft, horen daar geen quotes (enkele quotes ' ) om te staan.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
@Frank: wat moet die puntkomma op regel 19?
Jan:
Daarmee sluit je de query af. Het is officieel de enige juiste manier om een query te beeindigen. Zelf gebruik ik ze nauwelijks, maar het zou eigenlijk wel zo netjes zijn.@Frank: wat moet die puntkomma op regel 19?
Ja inderdaad bij uw versie is er iets minder typwerk dus ook minder kans op typfouten. Laat jij daarom de enkele quotes ook weg bij de _id, omdat het geen eigen input van user is ?
@PHP_Newbie: jouw uitleg snap ik niet compleet ?
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Ik had mijn sql al opgesplits in 3 regels om het wat duidelijker te hebben, vroeger typte ik alles achter elkaar.
Helemaal onleesbaar.
RedCrew:
@Jan: Bij de _id gaat het inderdaad om INT's die de user niet zelf kunnen intypen kiezen uit een dropdown menu.
Ja inderdaad bij uw versie is er iets minder typwerk dus ook minder kans op typfouten. Laat jij daarom de enkele quotes ook weg bij de _id, omdat het geen eigen input van user is ?
Ja inderdaad bij uw versie is er iets minder typwerk dus ook minder kans op typfouten. Laat jij daarom de enkele quotes ook weg bij de _id, omdat het geen eigen input van user is ?
Nee, het hangt af van het datatype. Omdat dit veld als een integer (een geheel getal) in de db opgeslagen moet worden horen er geen quotes om, want die maken er een string van.
Nu had frank me eergisteren in het kort uitgelegd dat je de PHP omring met enkele quotes.
Maar bij mijn SQL wist ik dat erom mijn input enkele quotes moeten staan om de userinput te beveiligen.
Alleen toen ik de buitenste dubbele quotes veranderde naar enkele quotes kreeg ik opeens een parse error ik probeer ondertussen wat bij te leren uit mijn fouten
Er zijn in PHP twee manieren om vars buiten de quotes te halen. In niet-MySQL begin je met enkele quotes. In MySQL begin je met dubbele quotes.
...
@PHP_Newbie: jouw uitleg snap ik niet compleet ?[/quote]
zie edit
RedCrew:
Zal ik jouw database dan even naar de ***beep*** helpen? Jij maakt een html-formulier aan, maar jij stuurt deze naar mijn browser. Dit formulier kan ik dus volledig naar eigen inzicht aanpassen. Op deze manier kan ik eenvoudig corrupte data jouw database injagen.@Jan: Bij de _id gaat het inderdaad om INT's die de user niet zelf kunnen intypen kiezen uit een dropdown menu.
Kijk eens tussen de reacties op dit script. Hier was ook sprake van formulieren met dropdown lijsten die niet konden worden aangepast...
Conclusie: controleer of de input wel echt nummeriek is.
@Frank: neen ik beweer niet dat mijn script onhackbaar is daar zitten veel gaten in maar je moet de deur ook niet opzetten en roepen hey kom alles ff overhoop gooien :)
Er zitten ondertussen al heel wat controles in.
Ik ben eerst bezig met het maken van wat scripts vooralleer ik aan mijn online e-cataloog van de winkel begin.
Ik weet al iets van beveiliging maar de complete beveiliging moet nog komen. BTW de is sowieso ook al dat er alleen kan producten toegevoegd (op dit moment zijn het wel ,geen artikelen) worden door mensen die je zelf uitkiest. en die dan moeten ingelogd zijn mbv sessies in combinaties met cookies en een fingerprint hash. Maar dat zijn zorgen voor later, als ik de basis weer wat beter kan. Ik probeer eerst te kruipen dan te mij recht te trekken en dan te lopen.
Gewijzigd op 01/01/1970 01:00:00 door Red Crew