On Tuesday, August 28, 2012 12:41:19 AM you wrote:
> On Mon, Aug 27, 2012 at 8:03 PM, David McGlone <da...@dmcentral.net> wrote:
> > I got it. All I needed to do was change $_POST[image] to $image in my
> > query
> > like so:
> > mysql_query ("INSERT INTO inventory(image, year, make, model, milage,
> > price)> 
> >  VALUES('$image', '$_POST[year]', '$_POST[make]',
> >  '$_POST[model]', '$_POST[milage]', '$_POST[price]')");
> >  
> >   }
> > 
> > I'm sortof stumped as to why though. I'm still pondering it and probably
> > will all night. I'll probably wake up at 3am and the light bulb will go
> > off in my head.. LOL
> 
> I would check to see if you have somewhere set $image. I don't see it
> in your code, but I'm sometimes pretty blind.

I forgot to paste that code. But yes I had to assign the value of 
$_FILES[image][name] to a variable $image = $_FILES[image][name]

Appearently PHP looks at $_FILES as an array, which if that's true, makes 
sense to me.
> 
> If you actually dump out $_POST from your form input, you will see
> there is no 'image' entry -- that is because it is type file in your
> form. When you dump $_FILES, of course, you see the image there.

The type in the form is necessary in order to be able to browse the computer 
for files.
 
> 
> Here's output from a trial I just made, with the following code:
> 
> <?php
> 
> echo '<h2>$_POST = </h2><pre>'.PHP_EOL;
> var_dump($_POST);
> echo '</pre>'.PHP_EOL;
> 
> echo '<h2>$_FILES = </h2><pre>'.PHP_EOL;
> var_dump($_FILES);
> echo '</pre>'.PHP_EOL;
> 
> 
> ?>
> <form enctype="multipart/form-data" action="" method="POST">
> <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
> Image: <input name="image" type="file" /><br />
> Year: <input type="text" name="year" size="40"><br />
> <input type="submit" name="Submit" value="Insert"><br />
> </form>
> 
> Outputs:
> 
> $_POST =
> 
> array(3) {
>   ["MAX_FILE_SIZE"]=>
>   string(6) "100000"
>   ["year"]=>
>   string(4) "2008"
>   ["Submit"]=>
>   string(6) "Insert"
> }
> 
> $_FILES =
> 
> array(1) {
>   ["image"]=>
>   array(5) {
>     ["name"]=>
>     string(5) "1.png"
>     ["type"]=>
>     string(9) "image/png"
>     ["tmp_name"]=>
>     string(26) "/private/var/tmp/phpeVMSM5"
>     ["error"]=>
>     int(0)
>     ["size"]=>
>     int(37543)
>   }
> }
> 
> 
> You also don't need to use basename($_FILES['image']['name']) -- the
> only thing stored there is the basename already.
> 
> 
> Here, in your original pastebin, at line 36:
> 
> mysql_query ("INSERT INTO inventory(image, year, make, model, milage, price)
> VALUES('$_POST[image]', '$_POST[year]', '$_POST[make]',
> '$_POST[model]', '$_POST[milage]', '$_POST[price]')");
> 
> should be:
> 
> mysql_query ("INSERT INTO inventory(image, year, make, model, milage, price)
> VALUES('{$_FILES['image']['name']}', '$_POST[year]', '$_POST[make]',
> '$_POST[model]', '$_POST[milage]', '$_POST[price]')");

This method was tried, and didn't work, it was inserting "Array[name]" into 
the db. This method was also what made me realize that $_FILES['image']
['name'] is being interpreted as an array. So what I did was assigned the 
value to a variable.
> 
> (I'm hoping what you are showing us is purely for learning sake, and
> that you will also be learning to untaint your input.)

Yeah, it is. I plan on learning every aspect of this one step at a time, from 
building the form, to making it functional, inserting in a db, checking user 
input for unwanted stuff, valid images with getimagesize() and wherever else 
this exercise takes me.

The end result, I want to have a form that uses anything and everything that 
is needed to make it safe and functional.
> 
> (Also, minor minor nit: it's spelled "mileage" :) )

Yup. I had mispelled it when I made the sql table and I was just too lazy to 
fix it. Although I realize I should fix it because if I have to keep typing it 
wrong, eventually it might become a habit. LOL

Reply via email to