PHP + Javascript + MySQL
Ik heb deze query:
UPDATE pages
SET text = '<p> </p><p> </p><p> </p><p><img src="image.php?id=1000004" border="0" dtu="c|||_blank||" imgdtu="4|1000004" onclick="window.open(\'http://www.facebook.com/". $_POST['txtFacebooklink'] ."\',\'_blank\',\'\');" style="cursor: pointer;" href="http://www.facebook.com/". $_POST['txtFacebooklink'] ."" /> <img src="image.php?id=1000005" border="0" dtu="c|||_blank||" imgdtu="4|1000005" onclick="window.open(\'http://www.twitter.com\',\'_blank\',\'\');" style="cursor: pointer;" href="http://www.twitter.com" /> <img src="image.php?id=1000006" border="0" dtu="c|||_blank||" imgdtu="4|1000006" onclick="window.open(\'http://www.linkedin.com\',\'_blank\',\'\');" style="cursor: pointer;" href="http://www.linkedin.com" /> </p>'
WHERE id = 1000007
Zoals je ziet word er achter facebook.com een POST value gepakt. Als je dus de waarde invult in de textbox komt die waarde achter www.facebook.com/waarde te staan.
Nu is het gelukt dat die waarde daar komt te staan, alleen nu link mijn image niet meer verder naar bijv. facebook.com
HELP?
Ik blijf online tot half 6. Dus ik beantwoord zo veel mogelijk vragen.
greetz
Sem
Post je complete variabele eens waarin je query staat, heb het vermoeden dat je de haakjes niet goed escaped...
SET text = '<p> </p><p> </p><p> </p><p><img src=\"image.php?id=1000004\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000004\" onclick=\"window.open(\"http://www.google.com\",\"_blank\",\"\");\" style=\"cursor: pointer;\" href=\"http://www.google.com\"/> <img src=\"image.php?id=1000005\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000005\" onclick=\"window.open(\"http://www.twitter.com\",\"_blank\",\"\");\" style=\"cursor: pointer;\" href=\"http://www.twitter.com\" /> <img src=\"image.php?id=1000006\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000006\" onclick=\"window.open(\"http://www.linkedin.com\",\"_blank\",\"\");\" style=\"cursor: pointer;\" href=\"http://www.linkedin.com\" /> </p>'
WHERE id = '1000007'");
Gewijzigd op 25/09/2012 13:21:41 door Sem E
Gewijzigd op 25/09/2012 13:25:07 door Marvin H
Zo staat de query in mijn php file.
Maar ik ging het eerst testen met www.google.nl
Hij geeft wel de cursor : pointer aan , maar als ik erop klikt gebeurd er niets.
Ik heb in de file ook nog geen ". $_POST ." staan omdat ik het eerst zo wilde testen.
Om te beginnen, schrijf dit eens volledig uit en zet ze in een variabele.
Iets als:
Je zal al zien dat je in de problemen komt met ' en ".
Wanneer je een string opent met ' kan je niet de string onderbreken met ".
bv.
Schrijf dit eens opnieuw, maar dan zonder syntax errors.
Ik geef toe: als je een string met html + javascript genereert, moet je al heel erg opletten dat je nog weet wanneer ' en " te gebruiken. Als je dit geheel dan nog in een SQL-string steekt, wordt het nog lastiger.
Dan kunnen we eens zien naar wat je probeert te bereiken.
Werkt het wel in andere browsers?
/"
Maar jij zegt dat ik het in een variable moet zetten. En dan zonder of met escapes?
Want ik genereer deze tekst uit mijn mysql database. Het moet namelijk de bedoeling zijn dat klanten een template kunnen kiezen en dat ze dan alleen hun link hoeven in te voegen van facebook bijv.
Dus ik kan die tekst niet zomaar opnieuw schrijven aangezien ik dan alles verander aan de pagina.
Toevoeging op 25/09/2012 13:38:47:
@marvin op FF werkt hij ook niet, maar het probleem zit m in dat ik een onclick open met " " en daarbinnen ga ik nog een x "" gebruiken. Dat kan natuurlijk niet.
@kris bedankt hiervoor, ik zal de code opnieuw typen en laten weten of het daarna wel is gelukt.
Normaal gebruik ik trouwens wel variabelen voor die Post waarde, maar deze keer niet:P
Gewijzigd op 25/09/2012 13:40:27 door Kris Peeters
Er schort sowieso dingen aan je database ontwerp ben ik van mening.
Als mensen een template willen kiezen dan sla je op dat ze template A willen met de volgende variables erbij. Niet de gehele html opslaan??
Deze manier van een query schrijven is niet handig. Escape in elk geval je POST waardes in je query. Want sql-injection is anders mogelijk.
Hopelijk kan je nog dingen aan de datastructuur aanpassen.
maar ik maak het product template opslaan. Dus alles wat hiermee te maken heeft, heb ik gemaakt.
Ik heb net 1jaar applicatie ontwikkeling gehad, en loop nu een half jaar stage.
Hierdoor ben ik dus nog geen prof met php en mysql.
Als ze een keuze maken uit template 1, krijgen ze alle waardes in hun database. Daarna kunnen ze de waardes nog aanpassen naar hun eige stijl.
Toevoeging op 25/09/2012 13:49:32:
Ik heb nu dit gedaan:
$userdb->q( "UPDATE pages
SET text = '
<p> </p><p> </p><p> </p><p>
<img src=\"image.php?id=1000004\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000004\" onclick=\"window.open('http://www.google.com','_blank','');\" style=\"cursor: pointer;\" href=\"http://www.google.com\"/>
<img src=\"image.php?id=1000005\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000005\" onclick=\"window.open('http://www.twitter.com','_blank','');\" style=\"cursor: pointer;\" href=\"http://www.twitter.com\" />
<img src=\"image.php?id=1000006\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000006\" onclick=\"window.open('http://www.linkedin.com','_blank','');\" style=\"cursor: pointer;\" href=\"http://www.linkedin.com\" /> </p>'
WHERE id = '1000007'");
En krijg de volgende fout melding:
UPDATE pages SET text = '<p> </p><p> </p><p> </p><p><img src="image.php?id=1000004" border="0" dtu="c|||_blank||" imgdtu="4|1000004" onclick="window.open('http://www.google.com',
'_blank',
'');" style="cursor: pointer;" href="http://www.google.com"/> <img src="image.php?id=1000005" border="0" dtu="c|||_blank||" imgdtu="4|1000005" onclick="window.open('http://www.twitter.com',
'_blank',
'');" style="cursor: pointer;" href="http://www.twitter.com" /> <img src="image.php?id=1000006" border="0" dtu="c|||_blank||" imgdtu="4|1000006" onclick="window.open('http://www.linkedin.com',
'_blank',
'');" style="cursor: pointer;" href="http://www.linkedin.com" /> </p>'
WHERE id = '1000007'
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 'http://www.google.com','_blank','');" style="cursor: pointer;" href="http://www.' at line 2
iemand??
"PHP heredoc syntax"
bv. http://www.phpf1.com/tutorial/php-heredoc-syntax.html
Dat helpt, wanneer je zowel ' en " nodig hebt.
Je neemt een willekeurig woord, bv. SQL of HTML of TEMPLATE ...
en dan iets als bv.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$a = 'Hello world';
$b = <<<HTML
<div onclick="window.location='index.php?test=1'">$a</div>
HTML;
echo $b;
?>
$a = 'Hello world';
$b = <<<HTML
<div onclick="window.location='index.php?test=1'">$a</div>
HTML;
echo $b;
?>
Zoals je ziet, moet je niet escapen. Variabelen worden omgezet.
Gewijzigd op 25/09/2012 13:55:45 door Kris Peeters
Ik heb het veranderd maar er komt iets wazigs uit.
$facebooklink = $_POST['txtFacebooklink'];
$facebookdb = $userdb->q ("UPDATE pages
SET text = '
<p> </p><p> </p><p> </p><p>
<img src="image.php?id=1000004" border="0" dtu="c|||_blank||" imgdtu="4|1000004" onclick="window.open('http://www.google.com','_blank','');" style="cursor: pointer;" href="http:'//www.google.com'"/>
<img src="image.php?id=1000005" border="0" dtu="c|||_blank||" imgdtu="4|1000005" onclick="window.open('http://www.twitter.com','_blank','');" style="cursor: pointer;" href="http:'//www.twitter.com'" />
<img src="image.php?id=1000006" border="0" dtu="c|||_blank||" imgdtu="4|1000006" onclick="window.open('http://www.linkedin.com','_blank','');" style="cursor: pointer;" href="http://www.linkedin.com\" /> </p>'
WHERE id = '1000007'"");
echo $facebookdb;
Dit kan toch nooit kloppen?
Toevoeging op 25/09/2012 14:28:59:
Ik heb het nu opgelost, met een functie.
Hiermee ben ik geholpen door een collega.
// Hier staat het eerste deel van de query in.
$text = "<p> </p><p> </p><p> </p><p>
<img src=\"image.php?id=1000004\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000004\" onclick=\"window.open('http://www.google.com','_blank','');\" style=\"cursor: pointer;\" href=\"http://www.google.com\">
<img src=\"image.php?id=1000005\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000005\" onclick=\"window.open('http://www.twitter.com','_blank','');\" style=\"cursor: pointer;\" href=\"http://www.twitter.com\">
<img src=\"image.php?id=1000006\" border=\"0\" dtu=\"c|||_blank||\" imgdtu=\"4|1000006\" onclick=\"window.open('http://www.linkedin.com','_blank','');\" style=\"cursor: pointer;\" href=\"http://www.linkedin.com\"> </p>";
// Hiermee laat je zien wat de query doet zonder slashes
echo "<pre>";
echo htmlspecialchars($text);
echo "<hr>";
// Hiermee met slashes
echo htmlspecialchars(addslashes($text));
echo "</pre>";
// De gehele query.
$qry =
"UPDATE
pages
SET
text = '".addslashes($text)."'
WHERE id = '1000007'";
//$qry = addslashes($qry);
// Het uitvoeren van de query.
$userdb->q( $qry );
is het uiteindelijke resultaat. Nog even de _POST waarde erbij zetten
Gewijzigd op 25/09/2012 14:10:32 door Sem E