Jump to content
Larry Ullman's Book Forums

Recommended Posts


Is there an easy way to debug when you get a Server Error?

I've proofread multiple times, and can't seem to find my typo, I'm sure there is some simple miss I'm not catching

I'm using the 5th Edition of PHP and MySQL for Dynamic web sites, and I'm working on the edit_user.php in Chapter 10

I have been successful in getting the view_users.php to work along with the delete_user.php 



Link to comment
Share on other sites

My code is as follows:

<?php # Script 10.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';
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>';


// Check if the form has been submitted:
    $errors = [];
    // 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 users WHERE email='$e' AND user_id != $id";
        $r = @mysqli_query($dbc, $q);
        if(mysqli_num_rows($r) == 0) { 
            // Make the 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 { // 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 users WHERE user_id=$id";
$r = @mysqli_query($dbc, $q);

if(mysqli_num_rows($r) == 1) { // Valid user ID, show the form.

// Get the usre'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="email" name="email" size="20" maxlength="60" value"'.$row[2].'"></p>
<p><input type="submit" name="submit" value="Submit"></p>
<input type="hidden" name="id" value="'.$id.'">
} else { // Not a valid user ID.
    echo '<p class="error">This page has been accessed in error</p>';

Link to comment
Share on other sites

If developing locally, what you really want to do is enable display_errors in your PHP configuration. If not developing locally, you'll want to do this too, but it may not be as easy! 

Otherwise, you'll need to find out where your web server records error messages (what log file) and then open that to see what the problem is.

Link to comment
Share on other sites


  • Create New...