|
|
Subject:
php, mySQL, and HTML Entering an SQL query directly into an HTML form
Category: Computers > Programming Asked by: hawstom-ga List Price: $12.00 |
Posted:
25 Aug 2005 20:07 PDT
Expires: 24 Sep 2005 20:07 PDT Question ID: 560639 |
QUESTION: Why can't I paste the following SQL into the form I have created and have it work when it works in phpMyADMIN? INSERT INTO foods VALUES ("REFRIED BEANS","CANS",30) The successful answer will explain to me why taking the variable $_POST['query'] from my HTML form and supplying it to mysql_query($_POST['query']); does not work for these INSERT INTO queries. If pertinent to the question and time permitting, I would like an explanation or pertinent links to explanations of the nuances ( " ' ` ) involved in making this work. Thank you, Tom Haws DETAIL: I am trying to learn the MP in LAMP (mySQL and php). At http://happyhavengraphics.com/lamp/ I have placed what I am attempting to start with as a raw sql query input form. See Appendix A below for the source. That form calls mysql.php. See Appendix B below for the source. If I paste either of the following queries into the form I get a nice result (contacts or foods are the only tables currently in the database): SELECT * FROM foods SELECT * FROM contacts Why can't I paste the following SQL queries into the form I have created and have them work? INSERT INTO foods VALUES ("REFRIED BEANS","CANS",30) INSERT INTO contacts VALUES ('','Jacob','Smith','01234 567890','00112 334455','01234 567891','johnsmith@gowansnet.com','http://www.gowansnet.com') I think it has something to do with quotation marks in php and mySQL. ==Appendix A== <html> <head> <title></title> </head> <body> <h1>Raw mySQL entry</h1> <form action="mysql.php" method="post"> <p>mySQL query: </p> <textarea name="query" cols=72 rows=25></textarea> <p><input type="submit" /></p> </form> </body> </html> ==Appendix B== <p>This was your query</p> <p><?php echo $_POST['query']; ?></p> <? $user="happyhav_lamp"; $password="lamp"; $database="happyhav_lamp"; mysql_connect(localhost,$user,$password); @mysql_select_db($database) or die( "Unable to select database"); $result=mysql_query($_POST['query']); // Connecting, selecting database $link = mysql_connect(localhost, 'happyhav_lamp', 'lamp') or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('happyhav_lamp') or die('Could not select database'); // Performing SQL query $query = $_POST['query']; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); // Printing results in HTML echo "<b><center>Database Output</center></b><br><br>"; echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // Free resultset mysql_free_result($result); // Closing connection mysql_close($link); ?> | |
| |
| |
|
|
Subject:
Re: php, mySQL, and HTML Entering an SQL query directly into an HTML form
Answered By: palitoy-ga on 27 Aug 2005 03:11 PDT Rated: |
Hello Tom I'm glad I could help solve your problem. The problem was indeed caused by the use of "escape characters" in your string. An escape character causes the MySQL statement to become nonsense when passed to MySQL for execution. When a form is submitted these characters are automatically escaped by the use of a \ character. The use of the php function "stripslashes" removes these characters from the POST'ed string and therefore allows MySQL to process the function correctly. In the solution I have provided if any of the field values you wished to pass to your MySQL database had an escape character in it, it should be "escaped" using three back-slash characters. For example: INSERT INTO things VALUES ("tom's name") Should be entered: INSERT INTO things VALUES ("tom\\\'s name") After POST and stripslashes this would become: INSERT INTO things VALUES ("tom\'s name") This is safe for MySQL as the field "tom's name" is NOT \"tom\'s name\" as was happening previously. I hope this is clear, if not please ask for clarification and I will try and explain it a little more. Basically any escape character that you wish to remain escaped needs to be proceeded by \\\. The MySQL reference manual has an excellent page that details which characters need to be escaped. These are most notably " ' but does also include linefeeds, return characters and other entities. The page can be found here: http://dev.mysql.com/doc/mysql/en/string-syntax.html PHP also includes several other useful functions for dealing with MySQL and strings in general. mysql_real_escape_string -- Escapes special characters in a string for use in a SQL statement http://www.php.net/manual/en/function.mysql-real-escape-string.php addslashes -- Quote string with slashes http://uk.php.net/manual/en/function.addslashes.php stripslashes -- Un-quote string quoted with addslashes() http://uk.php.net/stripslashes get_magic_quotes_gpc -- Gets the current configuration setting of magic quotes gpc http://uk.php.net/manual/en/function.get-magic-quotes-gpc.php Example 3 on the mysql_real_escape_string page gives you an example of "Best Practice". This includes a small function you can use to ensure your MySQL statement will execute. I hope this has answered your query fully, if not please ask for clarification and I will try to address your additional queries. |
hawstom-ga
rated this answer:
This researcher answered exactly what I asked in the way I requested it. I asked for explanation/links and he/she gave me explanation AND links as well as solving my immediate programming problem. I hope that palitoy-ga is around the next time I have a MP within LAMP question. |
|
Subject:
Re: php, mySQL, and HTML Entering an SQL query directly into an HTML form
From: meridius-ga on 26 Aug 2005 10:53 PDT |
The query: --- INSERT INTO contacts VALUES ('','Jacob','Smith','01234 567890','00112 334455','01234 567891','johnsmith@gowansnet.com','http://www.gowansnet.com') --- is invalid, I believe, because you do not have the table column definitions following "contacts". I'm pretty sure (working from memory here) that those are required. My query, new and improved, would be: --- INSERT INTO contacts(`id`,`firstname`,`lastname`,`somenumber1`,`somenumber2`,`somenumber3`,`email`,`website`) VALUES ('','Jacob','Smith','01234 567890','00112 334455','01234 567891','johnsmith@gowansnet.com','http://www.gowansnet.com') -- You will need to ensure that the column definitions (`id`, `firstname`, etc) match your table (namely, I assume that you did not name a column 'somenumber1'. I will let the friendly GA staff finish your answer for you :) Hope I helped. |
Subject:
Re: php, mySQL, and HTML Entering an SQL query directly into an HTML form
From: hawstom-ga on 26 Aug 2005 21:02 PDT |
Dear meridius-ga, I am sorry, but the query as I gave it was correct. INSERT INTO table VALUES (column1value, ... , columnivalue) is valid, as is the "correction" you gave. See http://www.w3schools.com/sql/sql_insert.asp Thanks for taking the time to opine. |
If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you. |
Search Google Answers for |
Google Home - Answers FAQ - Terms of Service - Privacy Policy |