Solved

How do you Pass an Arrary from HTML --> PHP--> PostgreSQL fucntion.

Posted on 2014-07-28
14
565 Views
Last Modified: 2014-08-04
So,  

   I have an HTML page with a from in it that calls a PHP CGI when the user hits submit.  In the form is a select box with a size="5" multiple name="Key" statement.  

   phpinfo()  shows that his is properly passing the select as Key[] to the PHP CGI .   An I can get the data $_POST('Key')  and process it in the PHP program.  

   Where my problem starts is trying to pass the Array of keys to a PostgreSQL function through a pg_prepare / pg_execute combination.  

   
$return_cde = pg_prepare($conn, "SendKeys", 'select web.sendKeys($1, $2, $3)');
.....
$return_cde = pg_execute($conn, "SendKeys", array($_POST('Pin'), $userData, $current_user->user_login));

Open in new window


I have tried changing the prepare and execute a dozen different ways an received a dozen differ errors.  

The PostgreSQL function looks like this --

CREATE OR REPLACE FUNCTION web.sendKeys(web_targets_  integer[], web_test_ text, web_user_ text) RETURNS integer As
$BODY$
DECLARE
    value  integer := NULL;

Open in new window


TIA -- Fir any direction anyone can offer --
0
Comment
Question by:Phonebuff
  • 7
  • 6
14 Comments
 
LVL 13

Expert Comment

by:duncanb7
ID: 40224992
Could your provide more code from  your html form, php to parser  $_POST with key array  and all PostpreSQL code ?

I don't find any "?" character in your question post so I guess you need PostpreSQL and PHP tutorial at
this http://www.designmagick.com/article/9/Starting-Out/Adding-data-to-your-database, Right ?

Hope understand your question completely .If not, pls pt it out and  write it in detail

Duncan
0
 
LVL 15

Author Comment

by:Phonebuff
ID: 40225035
Duncan,

   First off my php is runinng as a result of a form post not embedded in the html..

  So ---
<form action="/cgi-bin/xxxicgi.php" method="post" name="FrontPage_Form1" id="pagemsg" onsubmit="return autocomplete="off" FrontPage_Form1_Validator(this)">

<select id="targetGroups" class="targetSubselect" size="5" multiple name="Key[]" width="40" style="width: 400px">

==============================================================================================

The php cgi has no problem with the array Key

 $mySelected=$_POST['Key']
 echo "<br>You chose:<br>\n";
 foreach ($mySelected as $item)
 echo $item."<br>\n";

 But when I try to pass the array key to to the PostgreSQL function I get various errors depending on how and where I place the brackets or casts.  But nothing seems to work ..

----------------------------------
0
 
LVL 13

Expert Comment

by:duncanb7
ID: 40225111
pg_execute has error, right ?  if so, variable passing into web.sendKeys is matched or confilict.

and pg_prepare is no any error at all ?

Please put more echo statement to find out each code is error first

Duncan
0
Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

 
LVL 13

Assisted Solution

by:duncanb7
duncanb7 earned 100 total points
ID: 40225119
you can use gettype() php to check all input variable type  first at http://php.net/manual/en/function.gettype.php and there is a lot  related function at the bottom page and make sure it is matched to your SQL database varible type

Duncan
0
 
LVL 15

Author Comment

by:Phonebuff
ID: 40225145
Okay,

Get this --

userKey is array
userMsg is string
user_Login is string

Warning: pg_execute() [function.pg-execute]: Query failed: ERROR: array value must start with "{" or dimension information in /home/dxxxxxxxxx/public_html/xxxxxxxx/cgi-bin/xxxxcgi.php on line 87

$return_cde = pg_execute($conn, "SendKeys", array($userKey, $userMsg, $current_user->user_login));
0
 
LVL 13

Expert Comment

by:duncanb7
ID: 40225166
COuld you put $current_user->user_login as variable  first ? something like that

$a=$current_user['user_login']  //example only
echo $a //to see that is what you want
and put it into  pg_execute if okay

Duncan
0
 
LVL 83

Expert Comment

by:Dave Baldwin
ID: 40225169
The 'pg_execute' page only shows 3 parameters and your statement above has 5.
http://us2.php.net/manual/en/function.pg-execute.php
0
 
LVL 15

Author Comment

by:Phonebuff
ID: 40225195
Dave,  

   The pg_execute has 3 and the statement has 3 ..   The connection, and the Reference and the array() of values to be passed.  The problem is that the first element of the array is also an array.    I think thinking I need to unnest it and pass it that way..  

Duncan,    

   I am passing (or at least trying to) array(array, string,  string)   which is what the PostgreSQL function wants.  Changing the order kind of makes a mess of some documentation and standards in a function that has been used for years within the postgresql database.  Are you suggesting array(text, text, array) will make a difference ?
0
 
LVL 13

Expert Comment

by:duncanb7
ID: 40225206
Just think about the input "->" is okay or not ,

Could you put the exact value into put pg_execute()  to test pg_execute is okay on sql database ?
PostpreSql sometimes have different declaration writing syntax tolerance from mysql or other sql


Duncan
0
 
LVL 13

Expert Comment

by:duncanb7
ID: 40225213
I mean try simple example first and it will help to narrow down the bug,

Duncan
0
 
LVL 15

Author Comment

by:Phonebuff
ID: 40225272
Okay,

   So in this case it appears to have passed  (Array,  Text String, Text String)   according to the tail on the postgreSQL system..

   
               $userMsgE = pg_escape_string($userMsg);
               $userLoginE = pg_escape_string($current_user->user_login);

               $return = pg_query($conn, "select web.sendKeys($userKey, $userMsgE, $userLoginE)");

Open in new window

 


ERROR:  syntax error at or near "," at character 26
STATEMENT:  select web.sendKeys(Array, ergewgrewgewgwerg / XXX, JSXXXXXX)
0
 
LVL 15

Author Comment

by:Phonebuff
ID: 40225696
The problem is passing a PHP arrary to a PostgreSQL Arrary --  

I see lot's of hits with Google searches but no answers yet --

================
0
 
LVL 15

Accepted Solution

by:
Phonebuff earned 0 total points
ID: 40229662
So the correct answer is to reformat the PHP data into a PostgreSQL array and pass that variable.  

$userKey = "{".implode(",",array_map("intval", $userKey))."}";

An then pass $userKey in the Array for $1.
   $return = pg_query($conn, "select web.sendKeys($userKey, $userMsgE, $userLoginE)");
0
 
LVL 15

Author Closing Comment

by:Phonebuff
ID: 40238541
Correct answer for the specific question was derived elsewhere, posted here for documentation purposes.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

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

The Confluence of Individual Knowledge and the Collective Intelligence At this writing (summer 2013) the term API (http://dictionary.reference.com/browse/API?s=t) has made its way into the popular lexicon of the English language.  A few years ago, …
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

791 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