Re: Error Querying Database
| From: | Ashley Sheridan | Date: | Wed, 15 Dec 2010 19:54:01 +0000 |
| Subject: | Re: Error Querying Database | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-310055@lists.php.net to get a copy of this message | ||
On Wed, 2010-12-15 at 14:44 -0500, Steve Staples wrote:
> On Wed, 2010-12-15 at 14:34 -0500, Gary wrote:
> > "Steve Staples" <sstaples@mnsi.net> wrote in message
> > news:1292440837.5460.8.camel@webdev01...
> > > On Wed, 2010-12-15 at 13:42 -0500, Gary wrote:
> > >> I cant seem to get this to connect. This is to my local testing server,
> > >> which is on, so we need not worry that I have posted the UN/PW.
> > >>
> > >> This is a duplicate of a script I have used countless times and it
> > >> worked.
> > >> The error message is 'Error querying database.'
> > >>
> > >> Some one point out the error of my ways?
> > >>
> > >> Gary
> > >>
> > >>
> > >> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>"
> > >> method="post">
> > >> <tr>
> > >> <td>
> > >> <label>Name of Beer</label></td><td><input
> > >> name="beername" type="text" />
> > >> </td>
> > >> </tr>
> > >> <tr>
> > >> <td>
> > >> <label>Maker of Beer</label></td><td><input
> > >> name="manu" type="text" />
> > >> </td>
> > >> </tr>
> > >> <tr>
> > >> <td>
> > >> <label>Type of Beer</label></td>
> > >> <td><select name="type" size="1"
> > >> id="type">
> > >> <option>Imported</option>
> > >> <option>Domestic</option>
> > >> <option>Craft</option>
> > >> <option>Light</option>
> > >> </select>
> > >> <!--<select name="avail" size="1"
> > >> id="avail">
> > >> <option>Available</option>
> > >> <option>Sold</option>
> > >> </select>-->
> > >> </td>
> > >> </tr>
> > >> <tr>
> > >> <td><label>Sold in</label>
> > >> </td><td><input type="checkbox" name="singles"
> > >> value="Yes" /> Singles<br
> > >> />
> > >> <input type="checkbox" name="six" value="Yes"
> > >> /> Six Packs <br />
> > >> <input type="checkbox" name="can" value="Yes"
> > >> /> Cans<br />
> > >> <input type="checkbox" name="bottles"
> > >> value="Yes" /> Bottles <br />
> > >> <input type="checkbox" name="tap" value="Yes"
> > >> /> Draft <br />
> > >> <tr>
> > >> <td>
> > >> <label>Size</label></td><td><input
> > >> name="size" type="text" />
> > >> </td></tr>
> > >> <tr><td>
> > >> <label>Description</label></td><td><textarea
> > >> name="desc" cols="40"
> > >> rows="5"></textarea>
> > >> </td></tr>
> > >> <tr><td>
> > >> <input name="submit" type="submit"
> > >> value="Submit" /></td></tr>
> > >> </form>
> > >> </table>
> > >> </div>
> > >> <div id="list">
> > >> <?php
> > >> $beername = $_POST['beername'];
> > >> $manu = $_POST['manu'];
> > >> $type = $_POST['type'];
> > >> $singles = $_POST['singles'];
> > >> $six = $_POST['six'];
> > >> $can = $_POST['can'];
> > >> $bottles = $_POST['bottles'];
> > >> $tap = $_POST['tap'];
> > >> $size = $_POST['size'];
> > >> $desc = $_POST['desc'];
> > >> $ip= $_SERVER['REMOTE_ADDR'];
> > >>
> > >> $dbc =
> > >> mysqli_connect('localhost','root','','rr')or die('Error
> > >> connecting
> > >> with MySQL Database');
> > >>
> > >> $query = "INSERT INTO beer (beername, manu, type, singles, six, can,
> > >> bottles, tap, size, desc, ip )"." VALUES ('$beername',
> > >> '$manu', '$type',
> > >> '$singles', '$six', '$can', '$bottles',
> > >> '$tap', '$size', '$desc',
> > >> '$ip' )";
> > >>
> > >> $result = mysqli_query($dbc, $query)
> > >> or die('Error querying database.');
> > >>
> > >>
> > >> mysqli_close($dbc);
> > >>
> > >>
> > >>
> > >> --
> > >> Gary
> > >
> > >
> > > Read Ash's reply... but basically, you're running the query with POST
> > > variables, and inserting them on page display as well as on form submit.
> > >
> > > can you ensure that you can connect from the command line?
> > >
> > >
> > > if you may take some criticism, you should rethink your database design,
> > > as well as the page flow/design... you should either post the form to a
> > > new page, or if it is back to itself, you should check to see that you
> > > have in fact posted it before just blindly inserting into the database
> > > (as currently, every time you view the page, you will insert into the
> > > database, even if completely empty values).
> > >
> >
> > Steve
> >
> > Thank you for your reply.
> >
> > I did not see a reply from Ashley, but I would love to read it.
> >
> > I always welcome criticism, however this form is for the owner of a bar
> > where he will inputing his list of beer that he sells. The rest of the code
> > that is not there is I will have the list then echo to screen below the
> > form. This is an internal list only, no customers will be seeing it....if
> > that makes any difference to your suggestion.
> >
> > On your one point
> >
> > <<(as currently, every time you view the page, you will insert into the
> > database, even if completely empty values).>>
> >
> > Is this always the case when you process a form onto itself? Or is there a
> > fix?
> >
> > I did just create a new page, inserted the script onto it, and got the same
> > error message.
> >
> > Again, thank you for your help.
> >
> > Gary
>
>
> Gary
>
> the line:
> <input name="submit" type="submit" value="Submit" />
>
> is the submit part... if you encapsulate the DB part of the code,
> within:
> if($_POST['submit'] == 'Submit')
> {
> # do db stuff in here and value sanitizing
> }
>
> basically, what that does is the submit button is name $_POST['submit']
> and has the value "Submit" (the 'value' of the button) which will not be
> set, until you submit the form. Personally, I do it another way, but
> but is how most people check to see if a form is submitted (i think?)
>
> but it seems as if your issue stems from the lack of being able to
> connect to the database itself, so either your login credentials are
> wrong, or you dont have the mysqli connector enabled with your php in
> your development box.
>
> check your phpinfo() to ensure it is enabled.
>
> Steve
>
>
Echo out the $query string to see if it was you expect, but like a few
of us have said so far, you need to check that the form is submitted
before you run the query. To extend on what Steve said, I usually do
something like this:
if(isset($_POST['submit']) && $_POST['submit'] == 'Submit')
Which first checks to see if there is such a variable to avoid warning
messages in your log file or script output.
Also, I mentioned before (but I guess you didn't see it) that the action
attribute in your form tag is largely redundant, as in HTML, a form will
post back to itself by default. Also, there are security concerns with
using $_SERVER["PHP_SELF"] like this, as it won't always be what you
expect and could be used to attack your site.
Thanks,
Ash
http://www.ashleysheridan.co.uk