kingnutter Posted September 10, 2009 Share Posted September 10, 2009 HI everyone, I keep coming up against this. I am trying to use the results of a query as an array, currently coded thus: $query="SELECT moj_genre FROM genres INNER JOIN genrelinkcd ON genres.genre_id=genrelinkcd.genre_id WHERE genrelinkcd.moj_id='$id'"; $result=mysql_query($query); $orig_genres=array(); while($row = mysql_fetch_array($result)) { echo "$row[0]".", "; // Printing it on screen at the same time which works fine. $orig_genres[] =$row[0]; // This is where I'm trying to create the array but maybe there's an even shorter cut? } When I try and use the following code later on the same page: $missing_genres=array_diff($orig_genres, $new_genres); I get the error message: Warning: array_diff() [function.array-diff]: Argument #1 is not an array in C:\web\mojo\php-files\edit_mojo_cd.php on line 419 What do I keep doing wrong? I am constantly falling down when I'm trying to process mysql results. Cheers, KN Link to comment https://forums.phpfreaks.com/topic/173837-use-result-of-query-as-an-array/ Share on other sites More sharing options...
mikesta707 Posted September 10, 2009 Share Posted September 10, 2009 do a print_r on the $orig_genres before you call that function. see what it holds. this line $orig_genres[] = $row[0]; is correct, in that it will push the value of $row[0] in the $orig_games array. Idk what else is happening to it afterwards tho, so try a print_r and maybe post the code after that while loop Link to comment https://forums.phpfreaks.com/topic/173837-use-result-of-query-as-an-array/#findComment-916310 Share on other sites More sharing options...
kingnutter Posted September 10, 2009 Author Share Posted September 10, 2009 print_r($orig_genres); gives me: Array ( [0] => Rock [1] => Goth [2] => Punk ) Any ideas? Should those spaces be there? Link to comment https://forums.phpfreaks.com/topic/173837-use-result-of-query-as-an-array/#findComment-916320 Share on other sites More sharing options...
kingnutter Posted September 10, 2009 Author Share Posted September 10, 2009 Sorry, typo: Array ( [0] => Rock [1] => Goth [2] => Punk ) Link to comment https://forums.phpfreaks.com/topic/173837-use-result-of-query-as-an-array/#findComment-916346 Share on other sites More sharing options...
mikesta707 Posted September 10, 2009 Share Posted September 10, 2009 hmm, do a print_r on new_genres maybe. And post the code between the while loop and the function call. Do you alter the variable in anyway before the function call? Link to comment https://forums.phpfreaks.com/topic/173837-use-result-of-query-as-an-array/#findComment-916348 Share on other sites More sharing options...
kingnutter Posted September 10, 2009 Author Share Posted September 10, 2009 new_genres is fine as well. Here's the rest of the code. The MySQL queries that follow the functions are still a work in progress, but the errors are occuring on the lines before. $query="SELECT moj_genre FROM genres INNER JOIN genrelinkcd ON genres.genre_id=genrelinkcd.genre_id WHERE genrelinkcd.moj_id='$id'"; $result=mysql_query($query); // $num_rows=mysql_num_rows($result); // $count=1; $orig_genres=array(); while($row = mysql_fetch_array($result)) { echo "$row[0]".", "; $orig_genres[] =$row[0]; } // print_r($orig_genres); ?> "> </tr> <tr> <td colspan=2> <input type="Submit" name="submit" value="Update"> </td> </tr> </form> </table> <?php } // no result returned // print error message else { echo '<font size=-1>That instance could not be located in the database.</font>'; } } else { // set up error list array $errorList = array(); $moj_title = $_POST['moj_title']; $moj_issue = $_POST['moj_issue']; $moj_day = $_POST['day']; $moj_month = $_POST['month']; $moj_year = $_POST['year']; $moj_summary = $_POST['moj_summary']; $moj_genre = $_POST['moj_genre']; $moj_id = $_POST['id']; // Check for errors if (trim($_POST['moj_title']) == '') { $errorList[] = 'Invalid entry: Title'; } if (trim($_POST['moj_issue']) == '') { $errorList[] = 'Invalid entry: Issue (remember - not validating numeric entry yet)'; } if (trim($_POST['moj_summary']) == '') { $errorList[] = 'Invalid entry: Summary'; } if (trim($_POST['moj_genre']) == '') { $errorList[] = 'You must enter at least one genre tag'; } // ultimately the day will be checked against the month i.e. no 30th Feb. Can maybe do this with 'minus' on unixtime if (trim($_POST['day']) == '' && ($freq == "daily")) { $errorList[] = 'Invalid entry: Day of date'; } if (trim($_POST['month']) == '' && (($freq == "daily") || ($freq == "monthly"))) { $errorList[] = 'Invalid entry: Month of date'; } if (trim($_POST['year']) == '' && ((($freq == "daily") || ($freq == "monthly") || ($freq == "yearly")))) { $errorList[] = 'Invalid entry: Year of date'; } // if none found... if (sizeof($errorList) == 0) { // open database connection $connection = mysql_connect($host, $user, $pass) or die ('Unable to connect!'); // select database mysql_select_db($db) or die ('Unable to select database!'); // This works for the text based date for now as preceding spaces appear to be stripped // $date = "$moj_day"." "."$moj_month"." "."$moj_year"; // if monthly turn $day into 01 and use $month and $year for $unixdate // $day = '8'; // $month = 'February'; // $year = '1978'; // NB: FREQUENCY $freq MUST BE POSTED!!! $freq = 'monthly'; if ($freq == 'daily') { $moj_date = "$moj_day"." "."$moj_month"." "."$moj_year"; } if ($freq == 'monthly') { $moj_day = '1'; $moj_date = "$moj_month"." "."$moj_year"; } // if yearly, turn $day into 01 and $month into 01 and use $year for $unixdate if ($freq == 'yearly') { $moj_day = '1'; $moj_month = 'January'; $moj_date = "$moj_year";} $dateforunix = "$moj_day-$moj_month-$moj_year + 1 hour"; $unixdate = strtotime($dateforunix); // echo $dateforunix; ?><br><?php // echo $unixdate; ?><br><?php // echo $date; // generate and execute query $query = "UPDATE mojocd SET moj_title = '$moj_title', moj_date = '$moj_date', moj_issue = '$moj_issue', moj_summary = '$moj_summary', unix_timestamp = '$unixdate' WHERE moj_id = '$moj_id'"; $result = mysql_query($query) or die ("Error in Query: $query. " . mysql_error()); $new_genres = explode(",", $moj_genre); print_r($new_genres); $missing_genres=array_diff($orig_genres, $new_genres); //now we have to count the occurances of each $missing_genre in genrelinkcd. If it is 1 it needs to be deleted from genres. Whatever the outcome, $missing_genre needs to be deleted where moj_id=$moj_id foreach ($missing_genres as $row) { //connect to database?? $query="SELECT genre_id FROM genrelinkcd and genres INNER JOIN genrelinkcd ON genres.genre_id=genrelinkcd.genre_id WHERE genres.moj_genre='$row'"; $result = mysql_query($query); $amount = mysql_num_rows($result); //Get amount as $amount if ($amount == 1) { // If it is the only instance, delete the tag from the 'genres' table $query="DELETE * FROM genres WHERE moj_genre='$row'"; $result = mysql_query($query) or die; } // Delete the genres that are now missing from genrelinkcd // $query="DELETE * FROM genrelinkcd WHERE genrelinkcd INNER JOIN genres ON genres.genre_id = genrelinkcd.genre_id AND genres.moj_genre='$row' $query="DELETE * FROM genrelinkcd WHERE genrelinkcd.genre_id = (SELECT genre_id FROM genres WHERE moj_genre='$row') AND genrelinkcd.moj_id='$id'"; $result = mysql_query($query) or die; } //establish which tags are new. Simply reverse the strings in array_diff! $added_genres=array_diff($new_genres, $orig_genres); foreach ($added_genres as $row) { $query="SELECT * FROM genres WHERE moj_genre='$row'"; $result = mysql_query($query); $amount = mysql_num_rows($result); //Get amount as $amount if ($amount == 0) { // If it does not already exist in genres, add it to genres $query="INSERT INTO genres (moj_genre) VALUE ('$row')"; $result = mysql_query($query) or die; } // put a record in genrelinkcd whatever the result $query="INSERT INTO genrelinkcd (genre_id, moj_id) VALUES (genres.genre_id WHERE genres.moj_genre = '$row'), '$id'"; $result = mysql_query($query) or die; } ?> " Link to comment https://forums.phpfreaks.com/topic/173837-use-result-of-query-as-an-array/#findComment-916354 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.