Solved

help with modifying a PHP upload script

Posted on 2009-05-06
30
373 Views
Last Modified: 2013-12-13
hello, I wonder if i could get some help modifying this upload script please.

At the moment I have it so a user can upload a document to the server.

What i need to be able to do now though is

1. The user selects a course from a dropdown list on the form, and then uploads the document. That dropdown list is populated from a table in my mysql database called leaders. the column names are ID, course , email.  

2. When a user selects a course from the dropdown list and submits the document, i would like to send an email to the address attached to course, and in the email  there will be a link to the new uploaded document on the server.

As i say the uploading of the document works at the moment but need some help modifying it with the above modifications. Could somebody help me please?.

Regards,

LPHP
<?PHP
require_once("Session.class");
$sess = new Session();
if($sess->getVariable("auth") != "yes")
{
	header("Location: ../login-OOtest.php");
	exit();
}
include('header.html');
 
echo("<center><h1>Paper Submissions</h1>");
echo("Please rename paper to delegate name. i.e joe_bloggs.pdf");
echo("<br />");
echo("<form action=\"./upload1.php\" method=\"post\" enctype=\"multipart/form-data\"/>");
echo("<label for=\"file\">Select a file:</label>
	  <input type=\"file\" name=\"userfile\" id=\"file\"/>
	  <button>Upload File</button></center>");
 
 
 include('footer.html');
?>
 
<?PHP
 
 
// Configuration - Options
// These will be the types of file that will pass the validation.
	$allowed_filetypes = array('.doc','.txt','.pdf');
// Maximum filesize in BYTES.
	$max_filesize = 2000000;
// The place the files will be uploaded to (currently /uploads/ directory).
    $upload_path = './uploads/';
// Get the name of the file (including file extension).
   	$filename = $_FILES['userfile']['name'];
// Get the extension from the filename.
   	$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
 
// Check if the filetype is allowed, if not DIE and inform the Delegate.
   if(!in_array($ext,$allowed_filetypes))
      die('The file you attempted to upload is not allowed.');
 
// Check the filesize, if it is too large then DIE and inform the Delegate.
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('The file you attempted to upload is too large.');
 
// Check if we can upload to the specified path, if not DIE and inform the Delegate.
   if(!is_writable($upload_path))
      die('You cannot upload to the specified directory, please CHMOD it to 777.');
 
// Upload the file to your specified path.
   if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
         echo 'Your file upload was successful, view the file <a href="' . $upload_path . 			                 $filename . '" title="Your File">here</a>';
// It worked.
      else
// It failed :(.
         echo 'There was an error during the file upload.  Please try again.';
 
?>

Open in new window

0
Comment
Question by:LearningPHPMySQL
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 16
  • 14
30 Comments
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24321613
There are several components to getting you where you want to go.  I assume you can get into your database and generate the drop-down <select> menu.  The code below assumes you named that field "courseID"

The tricky thing here-- what I'm assuming you're mainly asking about-- is the mail component of it.  If not, let me know.  What's tricky is that it all depends on how your mail server is setup.  Are you using shared hosting?  Do you have a dedicated server?  Does your domain, in fact, have its own separate mail server?

The code below is fairly standard and may work as is.  If not, you can try:
  • removing the ini_set lines (try leaving each in by itself, or removing both)
  • try just your domain name-- www.mydomainname.com-- rather than mail
  • if you have your address setup in Outlook or another mail client, check your settings and see what your outgoing server is; that server name should work in the SMTP line
Note that this function is more likely to work if you're sending and receiving messages within the same domain.  If you have problems getting it going, try testing it in just a simple script where you do nothing but call the mail() function using constant values (in other words, remove anything else from your code that may be causing a problem.

I know that's a bit wide open.  Let me know if it helps!

<?php
 
// Upload the file to your specified path.
   if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)) {
         echo 'Your file upload was successful, view the file <a href="' .
			 $upload_path . $filename . '" title="Your File">here</a>';
 
		$course_details = mysql_query("SELECT * FROM leaders WHERE ID=" .
			$_REQUEST['courseID']);
 
		$email_message = "A user has just submitted a file for the course " . 
			mysql_result($course_details,0,"course") .
			".  That file can be downloaded here: " . 
			"http://www.mydomainname.com/uploads/" . $filename
		
		$email_address = mysql_result($course_details,0,"email");
 
		// mydomainname.com is your domain and joe@mydomainname.com is your email
		ini_set ("sendmail_from","joe@mydomainname.com");
		ini_set("SMTP","mail.mydomainname.com");
		mail($email_address, "joe@mydomainname.com", "New File Upload!", $email_message);
 
// It worked.
   }  else {
// It failed :(.
         echo 'There was an error during the file upload.  Please try again.';
   }
 
 
 
 
 
?>

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24322741
would i do this?  

bear with me please,  I'm new to all this :'(
upload.php
<?PHP
require_once("includes/account.class");
require_once("includes/database.class");
 
try {
	$db = new Database("includes/vars.inc");
	// use database "test"
	$db->useDatabase("test");
	// create new account.
	$conn = new connection($db->getConnection(), "leaders");
}
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
include('header.html');
 
$list = mysql_query("SELECT * FROM leaders");
 
echo("<center><h1>Paper Submissions</h1>");
echo("Please rename paper to delegate name. i.e joe_bloggs.pdf");
echo("<br />");
echo("<form action=\"./upload1.php\" method=\"post\" enctype=\"multipart/form-data\"/>");
echo("<label for=\"file\">Select a file:</label>
	  <input type=\"file\" name=\"userfile\" id=\"file\"/>
	  <select name=\"list\" size=\"10\"></select>
	  <option value=\"$list['course']\"></option>
	  <button>Upload File</button></center>");
 
 
 include('footer.html');
?>
 
upload1.php
<?PHP
/**
require_once("includes/account.class");
require_once("includes/database.class");
 
try {
	$db = new Database("includes/vars.inc");
	// use database "test"
	$db->useDatabase("test");
	// create new account.
	$conn = new connection($db->getConnection(), "leaders");
}
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
// Configuration - Options
// These will be the types of file that will pass the validation.
	$allowed_filetypes = array('.doc','.txt','.pdf');
// Maximum filesize in BYTES.
	$max_filesize = 2000000;
// The place the files will be uploaded to (currently /uploads/ directory).
    $upload_path = './uploads/';
// Get the name of the file (including file extension).
   	$filename = $_FILES['userfile']['name'];
// Get the extension from the filename.
   	$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
 
// Check if the filetype is allowed, if not DIE and inform the Delegate.
   if(!in_array($ext,$allowed_filetypes))
      die('The file you attempted to upload is not allowed.');
 
// Check the filesize, if it is too large then DIE and inform the Delegate.
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('The file you attempted to upload is too large.');
 
// Check if we can upload to the specified path, if not DIE and inform the Delegate.
   if(!is_writable($upload_path))
      die('You cannot upload to the specified directory, please CHMOD it to 777.');
 
// Upload the file to your specified path.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)) {
	echo 'Your file upload was successful, view the file <a href="' .
                         $upload_path . $filename . '" title="Your File">here</a>';
 
	$course_details = mysql_query("SELECT * FROM leaders WHERE ID=" .
                        $_REQUEST['courseID']);
 
	$email_message = "A user has just submitted a file for the course " .
                        mysql_result($course_details,0,"course") .
                        ".  That file can be downloaded here: " .
                        "http://www.mydomainname.com/uploads/" . $filename
    $email_address = mysql_result($course_details,0,"email");
 
// mydomainname.com is your domain and joe@mydomainname.com is your email
      ini_set ("sendmail_from","joe@mydomainname.com");
	  ini_set("SMTP","mail.mydomainname.com");
	  mail($email_address, "joe@mydomainname.com", "New File Upload!", $email_message);
// It worked.
      else
// It failed :(.
         echo 'There was an error during the file upload.  Please try again.';
 
 
?>

Open in new window

0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24324520
Are you asking for help with accessing your MySQL database?  In other words, are you asking about the code in lines 6 - 16?
0
Don't Cry: How Liquid Web is Ensuring Security

WannaCry is just the start. Read how Liquid Web is protecting itself and its customers against new threats.

 

Author Comment

by:LearningPHPMySQL
ID: 24324749
I am reusing code from another script (my login script) to connect to the database. I have spotted the error on line 11 which should be new Account.

Now the connection is there though i need help with the form, so it populates the listbox so i can pick a course, and then upload document and click submit.  Then it runs upload1.php and hopefully when done uploads the document to a directory and also sends an email with the link to the email associated with that course.
0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24326538
Personally, I use a different method for connecting to and accessing the database.  With your connection method, I'm not sure if my code will work, but let's give it a shot.  If it doesn't work, let me know and I'll show you my connection method... but you'll need to know your database's address and your logon name and password.

<!-- You'll want to put this code up top, where you've
	currently got your try/catch block //-->
<?php
 
	//connect to MySQL and select database
	$db = new Database("includes/vars.inc");
	mysql_select_db("test",$db) or die("Cannot select database");
 
	if($_REQUEST['courseID']=="") {
		//generate resultset for first visit
		$courseQuery = "SELECT * FROM leaders ORDER BY course ASC";
		$courseResult = mysql_query($courseQuery) or die("Cannot execute list query");
		$numCourses = mysql_numrows($courseResult);
	} else {
		//get details for selected course
		$courseQuery = "SELECT * FROM leaders WHERE ID = " . $_REQUEST['courseID'];
		$courseDetails = mysql_query($courseQuery) or die("Cannot execute details query");
	}
 
?>
 
 
<!-- Add this code wherever you want your listbox to appear //-->
<?php
 
	//print dropdown select box of courses
	echo "<select name='courseID'>";
	for($i=0;$i<$numCourses;$i++) {
		echo "<option value='" . 
			mysql_result($courseResult,$i,"ID") . "'>";
		echo mysql_result($courseResult,$i,"course");
		echo "</option>";
	}
	echo "</select>";
 
?>
 
 
<!-- The following is an adapted version of the first code block
	I posted in response to your question; my same notes and suggestions
	from my first post apply //-->
<?php
 
// Upload the file to your specified path.
   if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)) {
         echo 'Your file upload was successful, view the file <a href="' .
                         $upload_path . $filename . '" title="Your File">here</a>';
 
                $email_message = "A user has just submitted a file for the course " . 
                        mysql_result($courseDetails,0,"course") .
                        ".  That file can be downloaded here: " . 
                        "http://www.mydomainname.com/uploads/" . $filename
                
                $email_address = mysql_result($courseDetails,0,"email");
 
                // mydomainname.com is your domain and joe@mydomainname.com is your email
                ini_set ("sendmail_from","joe@mydomainname.com");
                ini_set("SMTP","mail.mydomainname.com");
                mail($email_address, "joe@mydomainname.com", "New File Upload!", $email_message);
 
// It worked.
   }  else {
// It failed :(.
         echo 'There was an error during the file upload.  Please try again.';
   }
 
?>

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24326625
thank you, I will try have a go at this now. Thank you for helping me , I need it :o
0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24326635
It's my pleasure.  I love this stuff! :-)
0
 

Author Comment

by:LearningPHPMySQL
ID: 24328050
have i got the first page correct .. upload.php?

and in the 2nd page upload1.php  phpedit is showing an error on this line

$email_address = mysql_result($courseDetails,0,"email"); saying unexpectid T variable ??
<?PHP
 
try {
	//connect to MySQL and select database
	$db = new Database("includes/vars.inc");
	mysql_select_db("test",$db) or die("Cannot select database");
 
	if($_REQUEST['courseID']=="") {
		//generate resultset for first visit
		$courseQuery = "SELECT * FROM leaders ORDER BY course ASC";
		$courseResult = mysql_query($courseQuery) or die("Cannot execute list query");
		$numCourses = mysql_numrows($courseResult);
	} else {
		//get details for selected course
		$courseQuery = "SELECT * FROM leaders WHERE ID = " . $_REQUEST['courseID'];
		$courseDetails = mysql_query($courseQuery) or die("Cannot execute details query");
	}
 
}
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
include('header.html');
 
 
echo("<center><h1>Paper Submissions</h1>");
echo("Please rename paper to delegate name. i.e joe_bloggs.pdf");
echo("<br />");
echo("<form action=\"./upload1.php\" method=\"post\" enctype=\"multipart/form-data\"/>");
echo("<label for=\"file\">Select a file:</label>");
echo("<input type=\"file\" name=\"userfile\" id=\"file\"/>");
	//print dropdown select box of courses
echo("<select name='courseID'>");
	for($i=0;$i<$numCourses;$i++) {
echo("<option value='" . mysql_result($courseResult,$i,"ID") . "'>");
echo mysql_result($courseResult,$i,"course");
echo("</option>");
	}
echo ("</select>");
echo ("<button>Upload File</button></center>");
 
 
include('footer.html');
?>
 
<?PHP
 
// Configuration - Options
// These will be the types of file that will pass the validation.
	$allowed_filetypes = array('.doc','.txt','.pdf');
// Maximum filesize in BYTES.
	$max_filesize = 2000000;
// The place the files will be uploaded to (currently /uploads/ directory).
    $upload_path = './uploads/';
// Get the name of the file (including file extension).
   	$filename = $_FILES['userfile']['name'];
// Get the extension from the filename.
   	$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
 
// Check if the filetype is allowed, if not DIE and inform the Delegate.
   if(!in_array($ext,$allowed_filetypes))
      die('The file you attempted to upload is not allowed.');
 
// Check the filesize, if it is too large then DIE and inform the Delegate.
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('The file you attempted to upload is too large.');
 
// Check if we can upload to the specified path, if not DIE and inform the Delegate.
   if(!is_writable($upload_path))
      die('You cannot upload to the specified directory, please CHMOD it to 777.');
 
// Upload the file to your specified path.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)) {
	echo 'Your file upload was successful, view the file <a href="' .
	                $upload_path . $filename . '" title="Your File">here</a>';
 
	$email_message = "A user has just submitted a file for the course " .
	               mysql_result($courseDetails,0,"course") .
	               ".  That file can be downloaded here: " .
	               "http://www.mydomainname.com/uploads/" . $filename
                
	       $email_address = mysql_result($courseDetails,0,"email");
 
	// mydomainname.com is your domain and joe@mydomainname.com is your email
	ini_set ("sendmail_from","joe@mydomainname.com");
	ini_set("SMTP","mail.mydomainname.com");
	mail($email_address, "joe@mydomainname.com", "New File Upload!", $email_message);
 
	// It worked.
}  else {
	// It failed :(.
	echo 'There was an error during the file upload.  Please try again.';
}
 
?>

Open in new window

0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24328294
Sorry, I wasn't looking very closely, and I assumed all the code was in one page.  Your code for the first page looks ok... because you're not doing everything in one page, though, you can remove that conditional at the top and just stick with:

try {
     //connect to MySQL and select database
      $db = new Database("includes/vars.inc");
      mysql_select_db("test",$db) or die("Cannot select database");
 
            //generate resultset for first visit
            $courseQuery = "SELECT * FROM leaders ORDER BY course ASC";
            $courseResult = mysql_query($courseQuery) or die("Cannot execute list query");
            $numCourses = mysql_numrows($courseResult);
}
When you load it up, does the list populate ok?

As for your second page, you need to access your database again.  Use the following code at the beginning of the file, just like you do in the first page.  The way you've got it above, it shouldn't work.  However, if after you update it as below, you still get that "unexpected T variable" error, check to make sure your field name is correct (i.e. are you sure the field is called "email"?).

About editing your previous post to remove your name... I don't have the foggiest.  Sorry!

<?php
 
try {
	//connect to MySQL and select database
	$db = new Database("includes/vars.inc");
	mysql_select_db("test",$db) or die("Cannot select database");
 
	//get details for selected course
	$courseQuery = "SELECT * FROM leaders WHERE ID = " . $_REQUEST['courseID'];
	$courseDetails = mysql_query($courseQuery) or die("Cannot execute details query");
}
 
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
 
?>

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24328748
I am still getting the unexpected T variable" error on phpedit.

after $filename and before $email_address is their suppost to be a semi-colon or something ?

The first script is loading fine and populating the box,  so looks like i just need to fix this error and then i will beable to test.
"http://www.mydomainname.com/uploads/" . $filename
                
 $email_address = mysql_result($courseDetails,0,"email");
 

Open in new window

0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24328936
You're right-- we're missing a semicolon there.  Haha, listen to me saying "we."  Yes, I left out that semicolon.  Add that in after $filename, and you should be good.  I'm an idiot for not looking right there when you told me you had a parse error.
0
 

Author Comment

by:LearningPHPMySQL
ID: 24328994
Ok I am getting somwhere i think. I have got rid of that error, and now the file is being uploaded correctly but error messages are appearing also.

Notice: Undefined variable: courseDetails in /var/www/vhosts/numyspace.co.uk/web_users/home/~unn_r031923/public_html/Testing/upload1TEST.php on line 47

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/numyspace.co.uk/web_users/home/~unn_r031923/public_html/Testing/upload1TEST.php on line 47

Notice: Undefined variable: courseDetails in /var/www/vhosts/numyspace.co.uk/web_users/home/~unn_r031923/public_html/Testing/upload1TEST.php on line 51

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/numyspace.co.uk/web_users/home/~unn_r031923/public_html/Testing/upload1TEST.php on line 51

my table is definitely leaders and the 3 columns are
 "courseID"       
"course"
"email"

My list box is populating ok, then i search for the document and submit and then it shows a link on the page saying the the document was uploaded successfully, but with those 3 errors underneath.
<?PHP
 
 
 
try {
	//connect to MySQL and select database
	// Connects to your Database
	mysql_connect("localhost", "xx", "xx") or die(mysql_error());
	mysql_select_db("test") or die(mysql_error());
 
	//generate resultset for first visit
	$courseQuery = "SELECT * FROM leaders ORDER BY course ASC";
	$courseResult = mysql_query($courseQuery) or die("Cannot execute list query");
	$numCourses = mysql_numrows($courseResult);
}
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
include('header.html');
 
 
echo("<center><h1>Paper Submissions</h1>");
echo("Please rename paper to delegate name. i.e joe_bloggs.pdf");
echo("<br />");
echo("<form action=\"./upload1TEST.php\" method=\"post\" enctype=\"multipart/form-data\"/>");
echo("<label for=\"file\">Select a file:</label>");
echo("<input type=\"file\" name=\"userfile\" id=\"file\"/>");
	//print dropdown select box of courses
echo("<select name='courseID'>");
	for($i=0;$i<$numCourses;$i++) {
echo("<option value='" . mysql_result($courseResult,$i,"ID") . "'>");
echo mysql_result($courseResult,$i,"course");
echo("</option>");
	}
echo ("</select>");
echo ("<button>Upload File</button></center>");
 
 
include('footer.html');
?>

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24329032

<?PHP
try {
	//connect to MySQL and select database
	// Connects to your Database
	mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());
	mysql_select_db("test") or die(mysql_error());
 
}
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
// Configuration - Options
// These will be the types of file that will pass the validation.
	$allowed_filetypes = array('.doc','.txt','.pdf');
// Maximum filesize in BYTES.
	$max_filesize = 2000000;
// The place the files will be uploaded to (currently /uploads/ directory).
    $upload_path = './uploads/';
// Get the name of the file (including file extension).
   	$filename = $_FILES['userfile']['name'];
// Get the extension from the filename.
   	$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
 
// Check if the filetype is allowed, if not DIE and inform the Delegate.
   if(!in_array($ext,$allowed_filetypes))
      die('The file you attempted to upload is not allowed.');
 
// Check the filesize, if it is too large then DIE and inform the Delegate.
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('The file you attempted to upload is too large.');
 
// Check if we can upload to the specified path, if not DIE and inform the Delegate.
   if(!is_writable($upload_path))
      die('You cannot upload to the specified directory, please CHMOD it to 777.');
 
// Upload the file to your specified path.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)) {
	echo 'Your file upload was successful, view the file <a href="' .
	                $upload_path . $filename . '" title="Your File">here</a>';
 
	$email_message = "A user has just submitted a file for the course " .
	               mysql_result($courseDetails,0,"course") .
	               ".  That file can be downloaded here: " .
	               "http://www.mydomainname.com/uploads/" . $filename;
                
	       $email_address = mysql_result($courseDetails,0,"email");
 
	// mydomainname.com is your domain and joe@mydomainname.com is your email
	ini_set ("sendmail_from","joe@mydomainname.com");
	ini_set("SMTP","mail.mydomainname.com");
	mail($email_address, "joe@mydomainname.com", "New File Upload!", $email_message);
 
	// It worked.
}  else {
	// It failed :(.
	echo 'There was an error during the file upload.  Please try again.';
}
 
?>

Open in new window

0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24329172
Okay, you're missing the code from that last block of code I posted.  Instead of what you put in your last post, it needs to be as below.  Do you see where $courseDetails is assigned a recordset result?  That's what's missing above.

<?PHP<?php
 
try {
	//connect to MySQL and select database
	$db = new Database("includes/vars.inc");
	mysql_select_db("test",$db) or die("Cannot select database");
 
	//get details for selected course
	$courseQuery = "SELECT * FROM leaders WHERE ID = " . $_REQUEST['courseID'];
	$courseDetails = mysql_query($courseQuery) or die("Cannot execute details query");
}
 
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
 
?>
 
// Configuration - Options
// These will be the types of file that will pass the validation.
	$allowed_filetypes = array('.doc','.txt','.pdf');
// Maximum filesize in BYTES.
	$max_filesize = 2000000;
// The place the files will be uploaded to (currently /uploads/ directory).
    $upload_path = './uploads/';
// Get the name of the file (including file extension).
   	$filename = $_FILES['userfile']['name'];
// Get the extension from the filename.
   	$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
 
// Check if the filetype is allowed, if not DIE and inform the Delegate.
   if(!in_array($ext,$allowed_filetypes))
      die('The file you attempted to upload is not allowed.');
 
// Check the filesize, if it is too large then DIE and inform the Delegate.
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('The file you attempted to upload is too large.');
 
// Check if we can upload to the specified path, if not DIE and inform the Delegate.
   if(!is_writable($upload_path))
      die('You cannot upload to the specified directory, please CHMOD it to 777.');
 
// Upload the file to your specified path.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)) {
	echo 'Your file upload was successful, view the file <a href="' .
	                $upload_path . $filename . '" title="Your File">here</a>';
 
	$email_message = "A user has just submitted a file for the course " .
	               mysql_result($courseDetails,0,"course") .
	               ".  That file can be downloaded here: " .
	               "http://www.mydomainname.com/uploads/" . $filename;
                
	       $email_address = mysql_result($courseDetails,0,"email");
 
	// mydomainname.com is your domain and joe@mydomainname.com is your email
	ini_set ("sendmail_from","joe@mydomainname.com");
	ini_set("SMTP","mail.mydomainname.com");
	mail($email_address, "joe@mydomainname.com", "New File Upload!", $email_message);
 
	// It worked.
}  else {
	// It failed :(.
	echo 'There was an error during the file upload.  Please try again.';
}
 
?>

Open in new window

0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24329183
Grrr... See below.  Sorry, typo in last.

<?PHP
 
try {
	//connect to MySQL and select database
	$db = new Database("includes/vars.inc");
	mysql_select_db("test",$db) or die("Cannot select database");
 
	//get details for selected course
	$courseQuery = "SELECT * FROM leaders WHERE ID = " . $_REQUEST['courseID'];
	$courseDetails = mysql_query($courseQuery) or die("Cannot execute details query");
}
 
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
 
// Configuration - Options
// These will be the types of file that will pass the validation.
	$allowed_filetypes = array('.doc','.txt','.pdf');
// Maximum filesize in BYTES.
	$max_filesize = 2000000;
// The place the files will be uploaded to (currently /uploads/ directory).
    $upload_path = './uploads/';
// Get the name of the file (including file extension).
   	$filename = $_FILES['userfile']['name'];
// Get the extension from the filename.
   	$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
 
// Check if the filetype is allowed, if not DIE and inform the Delegate.
   if(!in_array($ext,$allowed_filetypes))
      die('The file you attempted to upload is not allowed.');
 
// Check the filesize, if it is too large then DIE and inform the Delegate.
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('The file you attempted to upload is too large.');
 
// Check if we can upload to the specified path, if not DIE and inform the Delegate.
   if(!is_writable($upload_path))
      die('You cannot upload to the specified directory, please CHMOD it to 777.');
 
// Upload the file to your specified path.
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)) {
	echo 'Your file upload was successful, view the file <a href="' .
	                $upload_path . $filename . '" title="Your File">here</a>';
 
	$email_message = "A user has just submitted a file for the course " .
	               mysql_result($courseDetails,0,"course") .
	               ".  That file can be downloaded here: " .
	               "http://www.mydomainname.com/uploads/" . $filename;
                
	       $email_address = mysql_result($courseDetails,0,"email");
 
	// mydomainname.com is your domain and joe@mydomainname.com is your email
	ini_set ("sendmail_from","joe@mydomainname.com");
	ini_set("SMTP","mail.mydomainname.com");
	mail($email_address, "joe@mydomainname.com", "New File Upload!", $email_message);
 
	// It worked.
}  else {
	// It failed :(.
	echo 'There was an error during the file upload.  Please try again.';
}
 
?>

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24329339
I have changed my code now,  and it is the same as yours other than i am using this for connection below.

Now i am getting the following error

Cannot execute details query

Which is something to do with the SQL query ?


try {
	//connect to MySQL and select database
	// Connects to your Database
	mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());
	mysql_select_db("test") or die(mysql_error());
 
	//get details for selected course
	$courseQuery = "SELECT * FROM leaders WHERE ID = " . $_REQUEST['courseID'];
	$courseDetails = mysql_query($courseQuery) or die("Cannot execute details query");
}

Open in new window

0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24329374
With the code you just posted, add in an echo statement so we can see if there's something wrong with the SQL you're trying to execute.  Let's make sure we're getting good data from that courseID.

try {
	//connect to MySQL and select database
	// Connects to your Database
	mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());
	mysql_select_db("test") or die(mysql_error());
 
	//get details for selected course
	$courseQuery = "SELECT * FROM leaders WHERE ID = " . $_REQUEST['courseID'];
	echo "<p>" . $courseQuery ."<p>";
	$courseDetails = mysql_query($courseQuery) or die("Cannot execute details query");
}

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24329413
SELECT * FROM leaders WHERE ID =

Cannot execute details query
0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24329512
Yep, you're not getting any data from that drop down menu (listbox).  First thing, load up your initial page and right click to show the source.  Make sure that when your list is populating, it's actually getting values (i.e. make sure each <option> tag has a value in the value attribute).  If it does, run through your entire process, making sure to pick a course that you know the value for.  See what your error message says then.

I've not dealt much with file upload forms, so I'm actually not sure if other form fields (like this courseID listbox) get submitted when the file itself uploads.  You may need to separate that out into a separate step.
0
 

Author Comment

by:LearningPHPMySQL
ID: 24329620

<form action="./upload1TEST.php" method="post" enctype="multipart/form-data"/><label for="file">Select a file:</label><input type="file" name="userfile" id="file"/><select name='courseID'><br />
<b>Warning</b>:  mysql_result() [<a href='function.mysql-result'>function.mysql-result</a>]: ID not found in MySQL result index 3 in <b>/public_html/Test/uploadTEST.php</b> on line <b>40</b><br />
 
<option value=''>Paper_Topic_1</option><br />
<b>Warning</b>:  mysql_result() [<a href='function.mysql-result'>function.mysql-result</a>]: ID not found in MySQL result index 3 in <b>/var/www/vhosts/numyspace.co.uk/web_users/home/~unn_r031923/public_html/Testing/uploadTEST.php</b> on line <b>40</b><br />
<option value=''>Paper_Topic_2</option></select><button>Upload File</button>

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24329739
working now,  ID should be courseID on both pages : )  YaY!

Just need last query on the email.

the line

ini_set("SMTP","mail.mydomainname.com");  

what is this ?    is that like jondoh@hotmail.com ?
0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24329752
Can you post for me all of your code from your initial page?  I think I see the problem, but I don't want to muddy the waters any further! :-)
0
 
LVL 8

Accepted Solution

by:
Bobaran98 earned 500 total points
ID: 24330034
Sorry, only just saw your last post.  Those ini_set lines may not be necessary.  Try going without the SMTP line.  If it doesn't work, try using:

ini_set("SMTP","localhost");

If it still doesn't work... well, if you're sending from your email address, and you've got your address setup in a mail client like Outlook, look in your settings and get the info for your outgoing mail server.  Then try putting that server address in the place of localhost.


0
 

Author Comment

by:LearningPHPMySQL
ID: 24330054
It is now looks like it is working now ID has changed to courseID.

Not sending the email though, I not sure how to configure it though

// mydomainname.com is your domain and joe@mydomainname.com is your email
      ini_set ("sendmail_from","jonblabla@hotmail.com");
      ini_set("SMTP","mail.mydomainname.com");
      mail($email_address, "New Paper Submission", "New File Upload!", $email_message);
<?PHP
 
try {
	//connect to MySQL and select database
	// Connects to your Database
	mysql_connect("localhost", "xxx", "xxx") or die(mysql_error());
	mysql_select_db("test") or die(mysql_error());
 
	//generate resultset for first visit
	$courseQuery = "SELECT * FROM leaders ORDER BY course ASC";
	$courseResult = mysql_query($courseQuery) or die("Cannot execute list query");
	$numCourses = mysql_numrows($courseResult);
}
catch(Exception $e) {
	echo $e->getMessage() . "\n <br /> ";
	exit();
}
include('header.html');
 
 
echo("<center><h1>Paper Submissions</h1>");
echo("Please rename paper to delegate name. i.e joe_bloggs.pdf");
echo("<br />");
echo("<form action=\"./upload1TEST.php\" method=\"post\" enctype=\"multipart/form-data\"/>");
echo("<label for=\"file\">Select a file:</label>");
echo("<input type=\"file\" name=\"userfile\" id=\"file\"/>");
	//print dropdown select box of courses
echo("<select name='courseID'>");
	for($i=0;$i<$numCourses;$i++) {
echo("<option value='" . mysql_result($courseResult,$i,"courseID") . "'>");
echo mysql_result($courseResult,$i,"course");
echo("</option>");
	}
echo ("</select>");
echo ("<button>Upload File</button></center>");
 
 
include('footer.html');
?>

Open in new window

0
 

Author Comment

by:LearningPHPMySQL
ID: 24330075
sorry : )  Only just saw your new message.  I will try your suggestions now   Thank You
0
 

Author Comment

by:LearningPHPMySQL
ID: 24330305
ini_set("SMTP","smtp.uk.aol.com");   that is my server address  but it is not working
0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24330357
Yeah, there's probably no chance you would be able to send mail from either a hotmail or an aol address.  But try removing both ini_set lines and just using the mail() function with your email address.  It may work, who knows?  Just depends how your server's setup.  If not, try that ini_set("SMTP","localhost");
0
 

Author Comment

by:LearningPHPMySQL
ID: 24330767
I have tried all sorts here but cannot send the mail.

I have tried the ini_set("SMTP", "localhost");

Tried it with just the mail() function,

I have echo'd  $email_address  and it is picking out the correct address  just somehow will not send the email.  This is frustrating,  I want to bury my head in the sand : (
0
 
LVL 8

Expert Comment

by:Bobaran98
ID: 24331741
May I ask how your website is hosted?  Is it a shared hosting deal-- an account you have with a company where you get X mb of space on their machine?  Or is it on a dedicated server you have direct access to?

Unfortunately, this mailing issue is especially tricky because of all the variables involved, especially now that the web community is cracking down so hard on spammers.
0
 

Author Comment

by:LearningPHPMySQL
ID: 24331789
its a university account  http://www.numyspace.co.uk/   I think they pay these for the web hosting ? but i am not sure.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Author Note: Since this E-E article was originally written, years ago, formal testing has come into common use in the world of PHP.  PHPUnit (http://en.wikipedia.org/wiki/PHPUnit) and similar technologies have enjoyed wide adoption, making it possib…
Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

617 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question