Christopher Posted December 12, 2013 Share Posted December 12, 2013 When I use NetBeans to debug scripts of Ch10, I encountered some strange issues: 1. Script 10.2 - delete_user.php The code block in this script: // Check if the form has been submitted: if ($_SERVER['REQUEST_METHOD'] == 'POST') { 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. When I use NetBeans to debug this script, after the record is deleted($r = @mysqli_query ($dbc, $q) is executed), the affected_rows = 1 in the variable section of NetBeans, which is correct. But then after I press F7 to step into and 'if (mysqli_affected_rows($dbc) == 1)' is executed, affected_rows suddenly becomes -1, and the program logic jumps to the error reporting branch.If I don't debug and just run the script, the Deletion is totally OK. What's the possible cause?Here's the whole script: <?php # Script 10.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.html'); 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 = $_POST['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 ('./mysqli_connect.php'); // Check if the form has been submitted: if ($_SERVER['REQUEST_METHOD'] == 'POST') { 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, to confirm that this user should be deleted. // Retrieve the user's information: $q = "SELECT CONCAT(last_name, ', ', first_name) FROM users WHERE user_id=$id"; $r = @mysqli_query ($dbc, $q); if (mysqli_num_rows($r) == 1) { // Valid user ID, show the form. (Just 1 result as user_id is PK) // Get the user's information: $row = mysqli_fetch_array ($r, MYSQLI_NUM); // Display the record being deleted: echo "<h3>Name: $row[0]</h3> Are you sure you want to delete this user?"; // Create the form: echo '<form action="delete_user.php" method="post"> <input type="radio" name="sure" value="Yes" /> Yes <input type="radio" name="sure" value="No" checked="checked" /> No <input type="submit" name="submit" value="Submit" /> <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'); ?> 2. Another problem is that after finish debugging the script, there are many lines of warnings: Warning: main(): Couldn't fetch mysqli in C:\xampp\htdocs\phpmysql4_working\delete_user.php on line 75 Warning: main(): Couldn't fetch mysqli in C:\xampp\htdocs\phpmysql4_working\includes\footer.html on line 11 Call Stack # Time Memory Function Location 1 0.1000 146128 {main}( ) ..\delete_user.php:0 2 249.5054 187032 include( 'C:\xampp\htdocs\phpmysql4_working\includes\footer.html' ) ..\delete_user.php:75 But MySQL was actually been accessed successfully. 3. Script 10.4 - view_users.php #4 // This script retrieves all the records from the users table.// This new version paginates the query results The problem here is similar to question 2 above: If I directly run the script, the result in the browser is good. But if I debug it, after debug finishes, there are many lines of error messages like: Warning: main(): Couldn't fetch mysqli_result in C:\xampp\htdocs\phpmysql4_working\view_users_pagination.php on line 80 Call Stack # Time Memory Function Location 1 0.1090 146936 {main}( ) ..\view_users_pagination.php:0 ( ! ) Warning: main(): Couldn't fetch mysqli_result in C:\xampp\htdocs\phpmysql4_working\view_users_pagination.php on line 80 Call Stack # Time Memory Function Location 1 0.1090 146936 {main}( ) ..\view_users_pagination.php:0 Anyone met this kind of issue during debugging? Link to comment Share on other sites More sharing options...
Antonio Conte Posted December 12, 2013 Share Posted December 12, 2013 This might be because NetBeans tries to debug footer.php on it's own and don't keep the variables from the old script in memory. If that's not the problem, I have no idea. If the goal is to ensure that everything is working correctly, you might want to look into Unit testing with PHPUnit. You'll find some good sources on NetTuts and Youtube as examples. Link to comment Share on other sites More sharing options...
Recommended Posts