On Fri, Oct 25, 2013 at 8:27 PM, Stephen <[email protected]> wrote:
> Problem Situation
>
> I have two web sites on the same shared host. They share code for the
> control panel. When executed for one site I get a warning (reproducible
> always), but on the other there is no warning.
>
> One my home server, set up in the same way, I do not get a warning for
> either site.
>
> The warning is from this code:
>
> if ( in_array( $keys, $photo_ids ) )
>
> *Warning*: in_array() expects parameter 2 to be array, null given in
> */home/rois3324/include/**cpprocessforms.php* on line *203*
>
> Steps
>
> 1) Photos are transferred to incoming directory using ftp.
> 2) Photo data is imported into database and files moved to web site's file
> system
> 3) Photos are linked to a "category" by
> i) Specifying photos to consider by entering filespec using wildcards
> ii) User presented with photos
> iii) User selects photos to be added to category and clicks process
> button
> iv) Form returns array of photo_ids (key in database table)
> v) Form processor creates entry in "link" table that links category_id
> to photo_id
> vi) A check is made to detect and reject when the link already exists
>
> This is where the error occurs
>
> I have looked at the code, but I am at a total loss to figure out why I
> have trouble on one site and not the other, even though they are using the
> code. And my home development system has no problems.
>
> I can't play trial and error on the development system.
>
> Anyone have any ideas?
>
> This is the code where the warning is triggered:
>
> function linkphotos( $dbh, $x ) {
>
> global $thumbsdirectory;
>
> $ret_str = "";
> $cat_id = $x['category'];
> $photos = $x['list'];
> $sql0 = "SELECT photo_filename FROM photographs WHERE photo_id = :id";
> $sql1 = "SELECT photo_id FROM gallery_photos WHERE photo_category = :id";
> $sql2= "INSERT INTO gallery_photos VALUES ( :id, :photo_id, :order )";
>
> $stmt = $dbh->prepare($sql0);
> try {
> foreach( $photos as $keys=> $on) {
> $stmt->bindValue(':id', $keys);
> $stmt->execute();
> $row = $stmt->fetch(PDO::FETCH_ASSOC)**;
> $filenames[$keys] = $thumbsdirectory . "/" . $row['photo_filename'];
> }
> } catch (PDOException $e) {
> return 'Error selecting existing file names: ' . $e->getMessage();
> }
>
> $stmt = $dbh->prepare($sql1);
> try {
> $stmt->bindValue(':id', $cat_id);
> $stmt->execute();
> while ( list( $id ) = $stmt->fetch(PDO::FETCH_NUM)) {
> $photo_ids[] = $id;
> }
> } catch (PDOException $e) {
> return 'Error selecting existing photos: ' . $e->getMessage();
> }
>
> $stmt = $dbh->prepare($sql2);
> try {
> $stmt->bindValue(':id', $cat_id);
> foreach( $photos as $keys=> $on) {
> $ret_str .= htmlimage($filenames[$keys], $filenames[$keys] ) .
> "<br />";
> if ( in_array( $keys, $photo_ids ) ) { <<<<<<<<warning raised here
> $ret_str .= " Duplicate. Already in Category.<br />";
> } else {
> $stmt->bindValue(':photo_id', $keys);
> $stmt->bindValue(':order', $keys);
> $stmt->execute();
> $ret_str .= " Added to Category.<br />";
> }
> }
> } catch (PDOException $e) {
> return 'Error inserting new photos: ' . $e->getMessage();
> }
>
> return $ret_str;
> }
>
> --
> Stephen
>
>
Your $photo_ids array is not declared. After
$photos = $x['list'];
add
$photo_ids = array();