[PHP] trying to combine two forms into a single form

2011-06-09 Thread matty jones
I have a mediawiki extension that allows me to design a form in the wiki to
facilitate data entry into the wiki and it works good except that I also
want to be able to up load images and take the file location/name and enter
that into the wiki so that the image displays on the page as well.  I found
code online that works well for uploading an image to a site and it works
good in my mediawiki but when I combined the forms on a single page and
click on the upload button it wipes the other textarea fields clean
and doesn't submit the text data but it does upload the image and return the
path and filename.  I know this is supposed to happen but I don't totally
understand why.  If I just click on the save form button the image isn't
upload, but the text data is saved, again I understand something having to
do with two different forms/form handlers but I have been trying to combine
them with no luck.  My line of thinking was to write a function to submit
the second form and call it when the first form is submitted but
this doesn't seem to be working or I am doing it wrong.  The ultimate goal
is to have a form that submits issues into a knowledge base and allows
screenshots of error messages.

Here is the code for the page.

?php

 //define a maxim size for the uploaded images in Kb
 define (MAX_SIZE,1024);

//This function reads the extension of the file. It is used to determine if
the file is an image by checking the extension.
 function getExtension($str) {
 $i = strrpos($str,.);
 if (!$i) { return ; }
 $l = strlen($str) - $i;
 $ext = substr($str,$i+1,$l);
 return $ext;
 }

//This variable is used as a flag. The value is initialized with 0 (meaning
no error  found)
//and it will be changed to 1 if an errro occures.
//If the error occures the file will not be uploaded.
 $errors=0;
//checks if the form has been submitted
// if(isset($_POST['Submit']))
 //{
  //reads the name of the file the user submitted for uploading
  $image=$_FILES['image']['name'];
  //if it is not empty
  if ($image)
  {
  //get the original name of the file from the clients machine
  $filename = stripslashes($_FILES['image']['name']);
  //get the extension of the file in a lower case format
  $extension = getExtension($filename);
  $extension = strtolower($extension);
  //if it is not a known extension, we will suppose it is an error and will
not  upload the file,
//otherwise we will do more tests
 if (($extension != jpg)  ($extension != jpeg)  ($extension !=
png)  ($extension != gif))
  {
//print error message
  echo 'h1Unknown extension!/h1';
  $errors=1;
  }
  else
  {
//get the size of the image in bytes
 //$_FILES['image']['tmp_name'] is the temporary filename of the file
 //in which the uploaded file was stored on the server
 $size=filesize($_FILES['image']['tmp_name']);

//compare the size with the maxim size we defined and print error if bigger
if ($size  MAX_SIZE*1024)
{
echo 'h1You have exceeded the size limit!/h1';
$errors=1;
}

//we will give an unique name, for example the time in unix time format
$image_name=time().'.'.$extension;
//the new name will be containing the full path where will be stored (images
folder)
$newname=images/.$image_name;
//we verify if the image has been uploaded, and print error instead
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
echo 'h1Copy unsuccessfull!/h1';
$errors=1;
}}}

//If no errors registred, print the success message
 if(isset($_POST['Submit'])  !$errors)
 {
  echo h1File Uploaded Successfully! Try again!/h1;
echo $newname=images/.$image_name;
 }



function wfSpecialAddactivity() {
global $wgOut, $wgScriptPath;

$mine = $wgScriptPath.'/index.php?action=submit';
 if (!empty($_GET['id'])) {
  $data = StructuredInput::getStructuredData($_GET['id']);
} else {
  $data = array();
}

$html = TEMPLATE

 h2Add Issue/h2

script
function setAction(formEl) {
  if (formEl['_title'].value) {
formEl.action += 'title=' + formEl['_title'].value;
return true;
  } else {
return false;
  }
}
/script

form name=text method=post enctype=multipart/form-data action=$mine
onsubmit=return setAction(this)
input type=hidden name=_type value=addactivity /
!-- input type=hidden name=wpPreview value=Show preview / --

!-- This is the title of the page being created --
label for=_titleIssue Title:/label
input id=_title name=_title value={$data['_title']} /

br /br /

 !-- This is the Software Product --
label for=softwareSoftware:/label
select id=software name=software
option value={$data['software']}/option
option value=Server For Windows{$data['software']}Server For
Windows/option
option value=Suite For Windows{$data['software']}Suite For
Windows/option
option value=Job{$data['software']}Job/option
/select

!-- This is the specific version of the software --
label for=versionSoftware Version:/label
input id=version name=version 

Re: [PHP] trying to combine two forms into a single form

2011-06-09 Thread matty jones
The two forms work fine by themselves, my issue is getting to two of them to
work with together, I don't even care if you need to upload the image
seperately from submitting the text data as long as it is all on the same
page.  Thanks for the thoughts on jQuerry, I will look into it.

On Thu, Jun 9, 2011 at 10:53 AM, Jim Lucas li...@cmsws.com wrote:

 On 6/9/2011 5:37 AM, matty jones wrote:
  formEl.action += 'title=' + formEl['_title'].value;

 The only thing I see inconsistent is the above line.  But then again, it
 could
 be right.  You might be looking for $_GET['title'] in your processing page
 instead of $_GET['_title']



Re: [PHP] trying to combine two forms into a single form

2011-06-09 Thread matty jones
I believe this is it.  It is part of the mediawiki extension that I used as
a starting point for what I need it to do.  I am slowly getting better at
PHP, this was dropped into my lap and I don't have much experience yet with
PHP, I come from bash/sed/awk land.  This file is structuredinput.php, there
is only one more php file in the extension call specialstructuredinput.php
and I included that after this one as well.

Thanks


?php

  error_reporting(0);

set_include_path(get_include_path() . PATH_SEPARATOR .
$IP.'/extensions/structuredInput/special' );

$StructuredInput = new StructuredInput();
$wgHooks['SpecialPage_initList'][] = array($StructuredInput,
'addToSpecialPages');
$wgHooks['EditPage::showEditForm:initial'][] = array($StructuredInput,
'editForm');

// Bootleg php namespace
class StructuredInput
{

  public static $inputList = array();

  function getInputList() {
return StructuredInput::$inputList;
  }

  function addToSpecialPages($list) {
global $wgAllMessagesEn;
global $wgMessageCache;

foreach (StructuredInput::getInputList() as $val) {
  $key = str_replace (' ', '', strtolower($val));
  if (!array_key_exists($key, $wgAllMessagesEn)) {
$wgAllMessagesEn[$key] = $val;
$wgMessageCache-addMessages( array ($key = $val) );

$pageName = str_replace (' ', '', $val);

$list[$pageName] = array('SpecialPage', $pageName);
  }
}

$wgAllMessagesEn['structuredinput'] = 'Structured Input Forms';
$wgMessageCache-addMessages( array ('structuredinput' =
'Structured Input Forms') );

$list['StructuredInput'] = array('SpecialPage', 'StructuredInput');

return true;
  }

  function editForm($form) {
if (!empty($_POST['_type'])) {
  $post = $_POST;

require_once('structuredInput/transformations/'.$_POST['_type'].'.php');
  $form-textbox1 = $output;
  $form-starttime = wfTimestampNow();
  $form-edittime = wfTimestampNow();
} elseif (empty($_GET['viewsource']) 
strpos($form-mArticle-mContent, '!--|StructuredInput|--') !== False){
  global $wgServerName, $wgScriptPath;

  $inputType = str_replace(array('','!','-',''),
   array('','','',''),

 $this-extractStructuredValue('StructuredInput',

 $form-mArticle-mContent)
   );

  header('Location: http://
'.$wgServerName.$wgScriptPath.'/index.php?title=Special:'.$inputType.'id='.$_GET['title']);
  die();
}

return true;
  }

  function extractStructuredValue($key, $haystack) {
preg_match('/!--\|'.$key.'\|--(.*?)!--\|'.$key.'\|--/', $haystack,
$matches);

if (!empty($matches)) {
  return $matches[1];
} else {
  return '';
}
  }

  function extractStructuredValues($haystack) {
preg_match_all('/!--\|(.*)\|--(.*?)!--\|\1\|--/s', $haystack,
$matches);

return array_combine($matches[1], $matches[2]);
  }

  function makeRadios($key, $data, $selectedValue) {
$output = '';

foreach ($data as $item) {
  $id = $key.str_replace(' ', '', $item['value']);

  if ($item['value'] == $selectedValue) {
$selected = 'checked=checked';
  } else {
$selected = '';
  }

  $output .= TEXT

input type=radio id=$id name=$key value={$item['value']}
$selected /
label for=$idstrong{$item['value']}/strong:
{$item['caption']}/label
br /

TEXT;

}

return $output;
  }

  function makeSelect($key, $data, $selectedValue) {
$output = 'select id='.$key.' name='.$key.'';
foreach ($data as $value) {
  if ($value == $selectedValue) {
$selected = ' selected=selected';
  } else {
$selected = '';
  }

  $output .= 'option'.$selected.''.$value.'/option';
}
$output .= '/select';
return $output;
  }

  function getStructuredData($id) {
$pageContent = Revision::newFromTitle( Title::newFromText($id)
)-getText();

$data = StructuredInput::extractStructuredValues($pageContent);
$data['_title'] = $id;

return $data;
  }

}


 NEW FILE __

?php


function wfSpecialStructuredInput() {

  global $wgOut, $wgServerName, $wgScriptPath;

  $structuredInputs = '';

  foreach (StructuredInput::getInputList() as $input) {
$key = ucfirst(str_replace (' ', '', strtolower($input)));
$structuredInputs .= 'lia href=http://
'.$wgServerName.$wgScriptPath.'/index.php/Special:'.$key.''.$input.'/a/li';
  }

  if (!empty($structuredInputs)) $structuredInputs =
'ul'.$structuredInputs.'/ul';


  $wgOut-addHTML($structuredInputs);

}

?





On Thu, Jun 9, 2011 at 11:10 AM, Jim Lucas li...@cmsws.com wrote:

 On 6/9/2011 8:07 AM, matty jones wrote:
  The two forms work fine by themselves, my issue is getting to two of them
 to
  work with together, I don't even care if you need to upload the image
  seperately from submitting the text data as long as it is all on the same
  page.  Thanks for the thoughts on jQuerry, I will look

[PHP] possible variable declaration error

2011-03-25 Thread matty jones
I get the following error  PHP Notice:  Undefined index: publisher in
/var/www/testfunctions.php on line 65 and I have narrowed it down to what I
*think* is a variable not being declared.  Here is the code.


//this will fetch the data from a table
$d_series_fetch = $db-prepare(SELECT * FROM defaultseries WHERE publisher
= :id);
$d_series_fetch -bindParam(':id', $id);
$id = 'DC Comics';


if ($d_series_fetch -execute(array($_GET['publisher']))) {
while ($row = $d_series_fetch - fetch()) {
print_r($row);
}
}

I have prepared statements to open a connection and insert data and they
work fine if I comment the preceding block out so I am fairly certain the
problem is in there somewhere.  I am using the latest version of PHP and am
running Postgres8.4 as my db.  If I use the isset() function and add an echo
(code below) I get no errors but the query still  doesn't work so again I am
fairly certain that I am forgetting to declare something somewhere.

//this will fetch the data from a table
$d_series_fetch = $db-prepare(SELECT * FROM defaultseries WHERE publisher
= :id);
$d_series_fetch -bindParam(':id', $id);
$id = 'DC Comics';

$publisher = '';

if (isset($_GET['publisher']))
{

if ($d_series_fetch -execute(array($_GET['publisher']))) {
while ($row = $d_series_fetch - fetch()) {
print_r($row);

}
}
}

else {echothis didn't work;}

$dbh = null;  //close the database connection by setting the PDO object to
NULL
   }

I am fairly new to PHP and have very little idea on PDO's so this is most
likely a simple error(s) I know.
Thank

Matt


Re: [PHP] possible variable declaration error

2011-03-25 Thread matty jones
On Fri, Mar 25, 2011 at 8:34 AM, Daniel Brown danbr...@php.net wrote:

 On Fri, Mar 25, 2011 at 08:24, Daniel Brown danbr...@php.net wrote:

 And, now that I'm not on a three-inch screen, I can see that I
 didn't read your entire message, so my response appears rather idiotic
 --- because you already did the isset().  Sorry for that.

You're not even seeing your it didn't work error kick out?

 No problem, it is still early here on the East Coast.  No I dohave that
error message kicked out, I put it there as a test to try and isolate the
offending code block, which it did.  Now I just have to figure out how to
get it to work.  I understand your point with the GET so here is what I am
trying to do in the big picture.  I have a form with a drop down menu, for
now, where the user picks a value.  This value is sent using
AJAX(XMLHttpRequest) to the php script.  I want the script to grab this
value, run the prepared query with it and return a table structure again,
using AJAX( innerHTML).  I figured I would start small and try to get it
working with just simple values and then would move on to passing the values
to the script.  On the INSERT statements, I posted one below, I just bind
the value and then set it and it works fine with no errors or warnings,
thats why I am still scratching my head over the query.

//insert values into the default series table
$d_series = $db-prepare(INSERT INTO defaultseries (defaultseries,
publisher) VALUES (:defaultseries, :publisher));  //SQL statement
$d_series-bindParam(':defaultseries', $defaultseries);  //bind the prepared
value to a php variable
$d_series-bindParam(':publisher', $publisher);//bind the prepared value to
a php variable

//the first row to be inserted
$defaultseries = 'Batman';  //declare the php variable
$publisher = 'DC Comics';  //declare the php variable
$d_series-execute();  //execute the prepared statement


Re: [PHP] possible variable declaration error

2011-03-25 Thread matty jones
On Fri, Mar 25, 2011 at 8:24 AM, Daniel Brown danbr...@php.net wrote:

 On Fri, Mar 25, 2011 at 08:18, matty jones urlu...@gmail.com wrote:
  I get the following error  PHP Notice:  Undefined index: publisher in
  /var/www/testfunctions.php on line 65 and I have narrowed it down to
 what I
  *think* is a variable not being declared.  Here is the code.

 This line is the issue:

  if ($d_series_fetch -execute(array($_GET['publisher']))) {

 $_GET is populated, in part, by the query string --- the data
 following the question mark in your browser.  For example:

http://example.com/fake.php?publisher=Random%20House

?php echo $_GET['publisher']; // Output: Random House ?

So, as you can see, it's complaining because you didn't give it
 that information.  If you don't always want to have to do so, surround
 it with an isset() case.

 I used the format of your link and that gave me something like what I was
looking for, so I am sure now the error is just in my markup.  How would I
get this to work without passing it a value or does the function not work
like that, in which case no biggy I am just trying to figure all this out
the old fashioned way.  I read the manual page for the function and I
thought that the type of setup I was using would work.

 --
 /Daniel P. Brown
 Network Infrastructure Manager
 http://www.php.net/



Re: [PHP] possible variable declaration error

2011-03-25 Thread matty jones
On Fri, Mar 25, 2011 at 8:23 AM, ja...@nixsecurity.org wrote:

 Correct me if I wrong, but you're declaring $id AFTER binding the SQL
 parameter, therefore your :id isn't being bound to anything, hence the empty
 returned array.

 I think:
 $d_series_fetch = $db-prepare(SELECT * FROM defaultseries WHERE publisher
  :id);
 $id = 'DC Comics';
 $d_series_fetch-bindParam(':id',$id);

 *should* work.

 No that doesn't work either, I have a few INSERT statements using prepared
statements like so

$defaultseries = 'Batman';  //declare the php variable
$publisher = 'DC Comics';  //declare the php variable
$d_series-execute();  //execute the prepared statement

 and they work just fine.  Not entirely sure yet why, I am just starting to
really get into PDO's.


 Original Message 
 From: matty jones urlu...@gmail.com
 To: php-general@lists.php.net
 Sent: Fri, Mar 25, 2011, 8:19 AM
 Subject: [PHP] possible variable declaration error
 
 I get the following error  PHP Notice:  Undefined index: publisher in
 /var/www/testfunctions.php on line 65 and I have narrowed it down to what
 I
 *think* is a variable not being declared.  Here is the code.
 
 
 //this will fetch the data from a table
 $d_series_fetch = $db-prepare(SELECT * FROM defaultseries WHERE
 publisher
 = :id);
 $d_series_fetch -bindParam(':id', $id);
 $id = 'DC Comics';
 
 
 if ($d_series_fetch -execute(array($_GET['publisher']))) {
 while ($row = $d_series_fetch - fetch()) {
 print_r($row);
 }
 }
 
 I have prepared statements to open a connection and insert data and they
 work fine if I comment the preceding block out so I am fairly certain the
 problem is in there somewhere.  I am using the latest version of PHP and
 am
 running Postgres8.4 as my db.  If I use the isset() function and add an
 echo
 (code below) I get no errors but the query still  doesn't work so again I
 am
 fairly certain that I am forgetting to declare something somewhere.
 
 //this will fetch the data from a table
 $d_series_fetch = $db-prepare(SELECT * FROM defaultseries WHERE
 publisher
 = :id);
 $d_series_fetch -bindParam(':id', $id);
 $id = 'DC Comics';
 
 $publisher = '';
 
 if (isset($_GET['publisher']))
 {
 
 if ($d_series_fetch -execute(array($_GET['publisher']))) {
 while ($row = $d_series_fetch - fetch()) {
 print_r($row);
 
 }
 }
 }
 
 else {echothis didn't work;}
 
 $dbh = null;  //close the database connection by setting the PDO object to
 NULL
}
 
 I am fairly new to PHP and have very little idea on PDO's so this is most
 likely a simple error(s) I know.
 Thank
 
 Matt