mikidudle Posted November 7, 2011 Share Posted November 7, 2011 Hi, Old novice I am - confused and frustrated I'm getting. I see the following error: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\XAMPP\xampp\htdocs\websitename\edit_user.php on line 91 This happens in scripts 9.2 and 9.3 when they are called from script 9.1 I can't tell if this is because I think I'm talking to the database and I'm not, or if there's something about the setup I have of XAAMP - which I kind of doubt - or if there's something wrong with script 9.1. That's why I didn't initially post the code - cause I don't know what'd be helpful. I have looked over the code in 9.1 and 9.2 with a fine tooth comb. Found mistakes but nothing that fixed this error. What causes mysqli_num_rows() to return a boolean? I have been searching everywhere. Did I miss something in Larry's explanation? I'm sure it's right in front of me ... I'll be dayng-ed if I can find it! Help - and Thanks! Mike Link to comment Share on other sites More sharing options...
Jonathon Posted November 7, 2011 Share Posted November 7, 2011 (edited) Normally I'd be inclined to say that something your doing query wise with the database isn't returning any result resource. Are you calling the query and using the @ to suppress error messages? Just post the code anyway, probably be quicker. Edited November 7, 2011 by Jonathon Link to comment Share on other sites More sharing options...
mikidudle Posted November 7, 2011 Author Share Posted November 7, 2011 Thanks Jonathon, Yes I am using the @ error suppressor - that's what's in the book. Should I remove it? Thank you so much! Here's the code: <?php # Script 9.3 - edit_user.php // This page is for editing a user record. // This page is accessed through view_users.php $page_title = 'Edit a User'; include('includes/header.htm'); echo '<h1>Edit a User</h1>'; // Check for a valid user ID, through Get or Post: if( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // From view_users.php $id = $_GET['id']; } elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // Form Submission $id= $_POST['id']; } else { // No valid ID, kell the script. echo '<p class="error">This page has been accessed in error.</p>'; include('includes/footer.html'); exit(); } require_once('../called_functions/mysqli_connect.php'); // Check if the form has been submitted: if (isset($_POST['submitted'])) { $errors = array(); // Check for a first name: if(empty($_POST['first_name'])) { $errors[] = 'You forgot to enter your first name.'; } else { $fn = mysqli_real_escape_string($dbc, trim($_POST['first_name'])); } // Check for the last name: if(empty($_POST['last_name'])) { $errors[] = 'You forgot to enter your last name.'; } else { $ln = mysqli_real_escape_string($dbc, trim($_POST['email'])); } // Check for an email address: if (empty($_POST['email'])) { $errors[] = 'You forgot to enter your email address'; } else { $ln = mysqli_real_escape_string($dbc, trim($_POST['email'])); } if (empty($errors)) { // If everything is ok // Test for unique email addresses: $q = "SELECT user_id FROM users WHERE email = '$e' AND user_id != $id"; $r = @mysqli_query($dbc, $q); if (mysqli_num_rows($r) == 0) { // Make query $q = "UPDATE users SET first_name='$fn', last_name='$ln', email='$e' WHERE user_id=$id LIMIT 1"; $r = @mysqli_query ($dbc, $q); if (mysqli_affected_rows($dbc) == 1) { // If it ran ok ... // Print a message: echo '<p>The user has been edited.</p>'; } else { // If it did not run OK echo'<p class="error">The user could not be edited due to a system error. We apologize for any inconvenience.</p>'; // Public message echo '<p>' . mysqli_error($dbc) . '<br />Query: ' . $q . '</p>'; // Debugging message. } } else { echo '<p class="error">That email address has already been registered</p>'; } } else { echo '<p class="error">The following error(s) occurred:<br />'; foreach ($errors as $msg) { // Print each error. echo" - #msg<pr /> \n"; } echo '</p><p>Please try again.</p>'; } // End if if (empty($errors)) IF. } //End of submit conditional. // Always show the form ... // Retrieve the user's information" $q = "SELECT first_name, last_name, email, FROM users WHERE user_id=$id"; $r = @mysqli_query ($dbc, $q); if (mysqli_num_rows($r) == 1) { // Valid user ID, show the form. // Get the user's information: $row = mysqli_fetch_array ($r, MYSQLI_NUM); // Create the form echo '<form action="edit_user.php" method = "post"> <p>First Name: <input type = "text" name ="first_name" size="15" maxlenght="15" value="' . $row[0] . '" /></p> <p>Last Name: <input type="text" name="last_name" size="15" maxlength="30" value="' . $row[1] . '" /></p> <p>Email Address: <input type = "text" name="email" size="20" maxlength="40" value="'.$row[2] . '" ?> </p> <p><input type="submit" name="submit" value="Submit" /></p> <input type=:hidden" name="submitted" value="TRUE" /> <input type="hidden" name="id" value="' . $id . '" /> </form>'; } else { echo'<p class="error">This page has been accessed in error.</p>'; } mysqli_close($dbc); include('includes/footer.html'); ?> Link to comment Share on other sites More sharing options...
Jonathon Posted November 8, 2011 Share Posted November 8, 2011 Hi, I'm only on my phone now, but I think your query is invalid, there looks to be an extra comma after the email clause in the last query. 1 Link to comment Share on other sites More sharing options...
mikidudle Posted November 8, 2011 Author Share Posted November 8, 2011 Yes! Thank You. Same problem in the other script too. if (You can find that code error -> on your phone!!!!) { echo "Maybe you can help me find the next error"; } however { I'll try and figure it out myself first } Thanks!!! You - are a prince! Thanks Link to comment Share on other sites More sharing options...
Jonathon Posted November 8, 2011 Share Posted November 8, 2011 So what's the code for the other script? And wht's the error? Link to comment Share on other sites More sharing options...
mikidudle Posted November 8, 2011 Author Share Posted November 8, 2011 Hi Jonathon, The error for the 9.2 script is: The user could not be deleted due to a system error. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1' at line 1 Query: DELETE FROM users WHERE user_id= LIMIT 1 What's odd is that if I run the script and echo the variable $id right after the first isset conditional, it is empty. However, it exists everywhere else. Since $id is empty, the query fails and presents that error. I can echo $id in every part of the code and it's there, except after those conditionals. Thanks in advance! the code is: <?php # Script 9.2 - delete_user.php //This page is for deleting a user record. //This page is accessed through view_users.php $page_title = 'Delete a User'; include('includes/header.htm'); echo '<h1>Delete a User</h1>'; //Check for a valid user ID, through GET or POST: if( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { //From view_users.php $id = $_GET['id']; } elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // Form submission. $id = $_GET['id']; } else { // No valid ID - kill the script --- echo '<p class = "error">This page has been accessed in error.</p>'; include('includes/footer.html'); exit(); } require_once('../called_functions/mysqli_connect.php'); //Check if the form has been submitted" if(isset($_POST['submitted'])) { if($_POST['sure'] == 'Yes') { //Delete the record. //Make the query: $q = "DELETE FROM users WHERE user_id=$id LIMIT 1"; $r = @mysqli_query($dbc, $q); if (mysqli_affected_rows($dbc) == 1 ) { //If it ran OK //Print a message: echo '<p>The user has been deleted.</p>'; } else { // If the query did not run OK. echo '<p class="error">The user could not be deleted due to a system error.</p>'; //Public Message. echo '<p>' . mysqli_error($dbc) . '<br />Query: ' . $q . '</p>'; // Debugging message. } } else { // No confirmation of deletion echo'<p>The user has NOT been deleted.</p>'; } } else { //Show the form //Retrieve the users information: $q = "SELECT CONCAT(first_name, ' ', last_name) FROM users WHERE user_id=$id"; $r = @mysqli_query ($dbc, $q); if (mysqli_num_rows($r) == 1) { // Valid user ID, show the form // Get the user's information $row = mysqli_fetch_array($r, MYSQLI_NUM); //Create the form" echo '<form action="delete_user.php" method="post"> <h3>Name: ' . $row[0] . '</h3> <p>Are you sure you want to delete this user?<br /> <input type="radio" name="sure" value="Yes" /> Yes <input type="radio" name="sure" value="No" checked="checked" /> No</p> <p><input type="submit" name="submit" value="Submit" /></p> <input type="hidden" name="submitted" value="TRUE" /> <input type="hidden" name="id" value="' . $id . '" /> </form>'; } else { // Not a valid user ID. echo '<p class="error">This page has been accessed in error.</p>'; } } // End of the main submission conditional. mysqli_close($dbc); include('includes/footer.html'); ?> Link to comment Share on other sites More sharing options...
mikidudle Posted November 8, 2011 Author Share Posted November 8, 2011 So, While I've played with this every which way I have discovered that, the id variable that shows in the url (localhost/sitename/delete_user.php?id=6) disappears from the url when I click the Submit button (localhost/sitename/delete_user.php). Please can you explain where it went, why that does that, and how to prevent that? Thanks M Link to comment Share on other sites More sharing options...
Jonathon Posted November 9, 2011 Share Posted November 9, 2011 The elseif where you check for a $_POST value you then set $id using the $_GET value. This should perhaps use the $_POST if I had to guess. Again I'm on my phone. 1 Link to comment Share on other sites More sharing options...
mikidudle Posted November 9, 2011 Author Share Posted November 9, 2011 Thanks. That's what it was - I'd typed $_GET instead of $_POST. I really appreciate you taking the time to look at these. The second pair of eyes - much appreciated! Mike Link to comment Share on other sites More sharing options...
Jonathon Posted November 9, 2011 Share Posted November 9, 2011 No problem , glad you can carry on through the book. Link to comment Share on other sites More sharing options...
Recommended Posts