darcyg Posted June 29, 2011 Share Posted June 29, 2011 Hello, I am looking for help on this php script... i have tried many things... even downloading the script completely from the book's downloads and it will not work. I am brand new at php and have no idea what could be the problem. Thanks! --- Here is the error message I am getting: The user could not be edited due to a system error. We apologize for any inconvenience. Query: UPDATE `users2` SET `first_name`='Larry', `last_name`='Ullman', `email`='email@example.com' WHERE `user_id`=1 LIMIT 1 Here is my code: <?php # Script 9.3 - edit_user.php $page_title = 'Edit a User'; include ('includes/book_header.html'); 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, kill the script. echo '<p class="error">This page has been accessed in error.</p>'; include ('includes/book_footer.html'); exit(); } require_once ('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 a last name: if (empty($_POST['last_name'])) { $errors[] = 'You forgot to enter your last name.'; } else { $ln = mysqli_real_escape_string($dbc, trim($_POST['last_name'])); } // Check for an email address: if (empty($_POST['email'])) { $errors[] = 'You forgot to enter your email address.'; } else { $e = mysqli_real_escape_string($dbc, trim($_POST['email'])); } if (empty($errors)) { // If everything's OK. // Test for unique email address: $q = "SELECT user_id FROM users2 WHERE email='$e' AND user_id != $id"; $r = @mysqli_query($dbc, $q); if (mysqli_num_rows($r) == 0) { // Make the query: $q = "UPDATE `users2` 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 { // Already registered. echo '<p class="error">The email address has already been registered.</p>'; } } else { // Report the errors. echo '<p class="error">The following error(s) occurred:<br />'; foreach ($errors as $msg) { // Print each error. echo " - $msg<br />\n"; } echo '</p><p>Please try again.</p>'; } // End of 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 `users2` 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" maxlength="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 { // Not a valid user ID. echo '<p class="error">This page has been accessed in error.</p>'; } mysqli_close($dbc); include ('includes/book_footer.html'); ?> Link to comment Share on other sites More sharing options...
HartleySan Posted June 29, 2011 Share Posted June 29, 2011 Here's the block of code that is the issue: $q = "UPDATE `users2` 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. } I'm not sure if this is the error, but those grave accent marks (`) in the query are bothering me. If you take those out (but leave the normal single quotation marks), it might work. I have to assume that the DB connection is okay, as the query before this one has to have been successful, in order to pass the if statement right above the block of code I have noted in this post. Basically, for some reason, your query is not working. I would check the structure of the database, and make sure that there are no spelling/syntax errors, etc. Somewhere, there is probably an inconsistency. Sorry I can't be of more help. 1 Link to comment Share on other sites More sharing options...
Larry Posted June 29, 2011 Share Posted June 29, 2011 You'll also see that result if the update works but doesn't actually change any of the stored values, in which case the number of affected rows will be 0. Link to comment Share on other sites More sharing options...
Recommended Posts