-2

I am getting some errors trying to upload a file to an directory. These are the errors:

Notice: Undefined index: sPic in C:\wamp\www\uniqueminecraftservers\upload\upload.php on line 8
Notice: Undefined index: sPic in C:\wamp\www\uniqueminecraftservers\upload\upload.php on line 13
Notice: Undefined index: sPic in C:\wamp\www\uniqueminecraftservers\upload\upload.php on line 23

Here is my PHP:

<?php
    $name = htmlspecialchars($_POST['sName']);
    $ip   = htmlspecialchars($_POST['sIp']);
    $type = $_POST['sType'];
    $port = htmlspecialchars($_POST['sPort']);
    $website = htmlspecialchars($_POST['sWeb']);
    $video = htmlspecialchars($_POST['sVideo']);
    $pic = ($_FILES['sPic']['name']);    // line 8
    $desc = htmlspecialchars($_POST['sDesc']);


     $target = "/uniqueminecraftservers/slist/banners/"; 
     $target = $target . basename( $_FILES['sPic']['name']); // line 13

// Connects to your Database 
 mysql_connect("localhost", "root", "") or die(mysql_error()) ; 
 mysql_select_db("slist") or die(mysql_error()) ; 

 //Writes the information to the database 
 mysql_query("INSERT INTO `postdata` VALUES ('$name', '$ip', '$port', '$type', '$website', '$video', '$desc')") ; 

 //Writes the photo to the server 
 if(move_uploaded_file($_FILES['sPic']['tmp_name'], $target)) // line 23
 { 

 //Tells you if its all ok 
 echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
 } 
 else { 

 //Gives and error if its not 
 echo "Sorry, there was a problem uploading your file."; 
 } 
 ?>

I have tried evrything I can find online while searching for the past 2 hours. I CANNOT FIGURE OUT HOW TO FIX THIS.

Note: Running on WAMP with PHP 5.4.3

Barmar
  • 741,623
  • 53
  • 500
  • 612
  • 1
    Can you edit in the upload form? – Barmar Jun 24 '13 at 04:14
  • [Please, don't use `mysql_*` functions](http://stackoverflow.com/q/12859942/1190388) in new code. They are no longer maintained and are [officially deprecated](https://wiki.php.net/rfc/mysql_deprecation). See the red box? Learn about prepared statements instead, and use [tag:PDO] or [tag:MySQLi]. – hjpotter92 Jun 24 '13 at 04:15
  • What does `$_FILES['sPic']['error']` say? Where has `$_FILES['uploadedfile']['name']` come from? Why are you not doing any checking? And `htmlspecialchars` should not be used on input data, only when displaying data back – Lawrence Cherone Jun 24 '13 at 04:19
  • possible duplicate of [PHP: "Notice: Undefined variable" and "Notice: Undefined index"](http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) – Barmar Jun 24 '13 at 04:23
  • Do you have something like this in your FORM? `` – Rob W Jun 27 '13 at 19:42
  • Just after the `' . print_r($_FILES, TRUE) . ''` – RiggsFolly Jul 01 '13 at 13:08

1 Answers1

0

Before this question gets closed, perhaps have a ponder through this, it may be of some interest.

<?php
try{
    //connect to the database using PDO
    $db = new PDO("mysql:host=localhost;dbname=slist","root", "mysql_password");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
    //if there is an error catch it here
} catch( PDOException $e ) {
    //display the Exception
    exit($e->getMessage());
}

//Setup vars we going to use
$insert = array();
$message= null;
$error  = array();
$target = "/uniqueminecraftservers/slist/banners/";

//ok is request POST?
if($_SERVER['REQUEST_METHOD'] === 'POST'){

    /* Quick crude validation */
    //Allowed keys we are expecting from POST
    $keys = array('sName','sIp','sType','sPort','sWeb','sVideo','sDesc');

    //Loop the above and match with $_POST[*]
    foreach($keys as $key=>$value){
        if(isset($_POST[$key])){
            $insert[':'.$key] = $value;
        }else{
            $error[$key] = "*required";
        }
    }

    //ok $error is empty lets go further
    if(empty($error)){
        //Check files array for error
        if(isset($_FILES['sPic']['name']) && $_FILES['sPic']['error'] == 0){
            //Writes the photo to the server
            if(move_uploaded_file($_FILES['sPic']['tmp_name'], $target.basename($_FILES['sPic']['name'])))
            {
                //Insert into sql using a prepared query, matching placeholders
                $sql = 'INSERT INTO `postdata` VALUES (:sName, :sIp, :sType, :sPort, :sWeb, :sVideo, :sDesc)';
                $stmt = $db->prepare($sql);
                $stmt->execute($insert);

                //Tells you if its all ok
                $message = "The file ".htmlspecialchars(basename($_FILES['sPic']['name']))." has been uploaded, and your information has been added to the directory";
            }
            else {
                $error['upload_error'] = "Sorry, there was a problem uploading your file.";
            }
        }else{
            //What was the upload error
            if($_FILES['sPic']['error']==1){$error['upload_error'] = 'The uploaded file exceeds the Max filesize';}
            if($_FILES['sPic']['error']==2){$error['upload_error'] = 'The uploaded file exceeds the Max filesize of '.ini_get('upload_max_filesize').'MB';}
            if($_FILES['sPic']['error']==3){$error['upload_error'] = 'The uploaded file was only partially uploaded.';}
            if($_FILES['sPic']['error']==4){$error['upload_error'] = 'No file was uploaded.';}
            if($_FILES['sPic']['error']==6){$error['upload_error'] = 'Missing a temporary folder.';}
            if($_FILES['sPic']['error']==7){$error['upload_error'] = 'Failed to write file to disk.';}
            if($_FILES['sPic']['error']==8){$error['upload_error'] = 'A PHP extension stopped the file upload.';}
        }
    }

    //Final check on whats gone on
    if(!empty($error)){
        //ill leave you to decide what happens here
        echo '<pre>'.print_r($error,true).'</pre>';
    }else{
        //success
        echo $message;
    }

}else{
    //do something if not POST
}
?>

Untested...

Lawrence Cherone
  • 46,049
  • 7
  • 62
  • 106