2011-07-05 6 views
1

J'ai le code ci-dessous qui met à jour les informations de l'utilisateur. Je dois exécuter la requête SEULEMENT pour les champs qui sont remplis, ainsi vous ne devez pas ajouter toutes les informations chaque fois que vous voulez faire un peu d'édition à un utilisateur. Je veux IGNORE les champs de formulaire videsPHP empêcher la publication en double

Je ne peux pas comprendre quelle méthode pour aller avec pour atteindre cet objectif:

if(isset($_POST['do_edit'])) { 


    $id = mysql_real_escape_string($_POST['user_id']); 
    $company_name = mysql_real_escape_string($_POST['company_name']); 
    $contact = mysql_real_escape_string($_POST['contact']); 
    $username = mysql_real_escape_string($_POST['username']); 
    $phone = mysql_real_escape_string($_POST['phone']); 
    $address = mysql_real_escape_string($_POST['address']); 
    $email = mysql_real_escape_string($_POST['email']); 
    $password = mysql_real_escape_string($_POST['password']); 
    $password2 = mysql_real_escape_string($_POST['confirm']); 
    $level = mysql_real_escape_string($_POST['user_level']); 
    $restrict = mysql_real_escape_string($_POST['restrict']); 

    $delete = mysql_real_escape_string($_POST['delete']); 

    // Ticked the 'delete user' box? If so, delete and echo message.  
    if($delete == 'delete_uid' && $error == '') { 

    $sql = "DELETE FROM login_users WHERE user_id='$id'"; 
    $query = mysql_query($sql) or die("Fatal error: ".mysql_error()); 

    echo "<h3>Deleted</h3>"; 
    echo "<div class='success_message'>User <b>$company_name $contact</b> has been removed from the database.</div>"; 

    echo "<h2>What to do now?</h2><br />"; 
    echo "<a href=''>&laquo; Back to Admin Panel</a> | Go to the <a href='user_edit.php'>edit users</a> page.</li>"; 

    } else { 

    // Validate the submitted information 

     if(trim($id) == '1') { 
      $error = '<div class="error_message">Attention! You cannot edit the main Administrator, use database.</div>'; 
     } else if(trim($company_name) == '') { 
      $error = '<div class="error_message">Attention! You must enter a company name.</div>'; 
     } else if(trim($contact) == '') { 
      $error = '<div class="error_message">Attention! You must enter a contact name.</div>'; 
     } else if(!isEmail($email)) { 
      $error = '<div class="error_message">Attention! You have entered an invalid e-mail address, try again.</div>'; 
     } else if(trim($level) == '') { 
      $error = '<div class="error_message">Attention! No user level has been selected.</div>'; 
     } 

    // Password been entered? If so, validate and update information. 

     if($password != '') { 

      if($password != $password2) { 
       $error = '<div class="error_message">Attention! Your passwords did not match.</div>'; 
      } 

      if(strlen($password) < 5) { 
       $error = '<div class="error_message">Attention! Your password must be at least 5 characters.</div>'; 
      } 

      if($error == '') { 

      $sql = "UPDATE login_users SET restricted='$restrict', company_name='$company_name', contact='$contact', email='$email', user_level='$level', password = MD5('$password') WHERE user_id = '$id'"; 
      $query = mysql_query($sql) or die("Fatal error: ".mysql_error()); 

      echo "<h2>Updated</h2>"; 
      echo "<div class='success_message'>User information (and password) updated for User ID <b>$id ($company_name)</b>.</div>"; 

      echo "<h2>What to do now?</h2><br />"; 
      echo "<a href=''>&laquo; Back to Admin Panel</a> | Go to the <a href='user_edit.php'>edit users</a> page.</li>"; 

      } 

    // Password has not been entered don't update password fields. 

     } else { 

      if($error == '') { 

      $sql = "UPDATE login_users SET restricted='$restrict', company_name='$company_name', contact='$contact', username='$username', email='$email', user_level='$level' WHERE user_id = '$id'"; 
      $query = mysql_query($sql) or die("Fatal error: ".mysql_error()); 

      echo "<h2>Updated</h2>"; 
      echo "<div class='success_message'>User information updated for <b>$company_name</b>.</div>"; 

      echo "<h2>What to do now?</h2><br />"; 
      echo "<a href=''>&laquo; Back to Admin Panel</a> | Go to the <a href='user_edit.php'>edit users</a> page.</li>"; 

      } 

     } 

    } 
} 
+0

vous pouvez faire une boucle sur la variable $ _POST et voir ce qui est défini, selon ce jeu pour construire votre requête. –

+1

si vous ne voulez pas empêcher PHP de mettre à jour la base de données, mettez 'return' après' $ error = 'dans la validation – k102

Répondre

1

Consultez la liste des champs et construire dynamiquement votre requête UPDATE basée sur ceux qui répondent le critère. Envisager sérieusement d'écrire une fonction ou deux pour aider à construire la requête sans la logique répétée, mais ce qui suit devrait fournir une indication:

$sql = "UPDATE login_users SET "; 
$first = 1; 
if ($restrict != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "restricted='$restrict'"; 
} 

if ($company_name != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "company_name='$company_name'"; 
} 

if ($contact != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "contact='$contact'"; 
} 

if ($username != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "username='$username'"; 
} 

if ($email != '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "email='$email'"; 
} 

if ($level!= '') { 
    if ($first) { 
     $first = 0; 
    } else { 
     $query += ", "; 
    } 
    $query += "user_level='$level'"; 
} 

$query += " WHERE user_id = '$id'"; 

if (! $first) { 
    // do query, since we know something was changed 
} 
0

Deux façons de le faire:

  • Celui que je l'habitude d'utiliser est utiliser simplement les champs de la base de données (sauf le mot de passe ...) pour pré-remplir les champs du formulaire. Ils ne doivent pas être vides.
  • Commencez avec une requête UPDATE vide (UPDATE login_users SET ? WHERE user_id=$id) et construisez une chaîne field = 'value', ... pour remplacer le?

Le second semble plus lourd que de simplement remplir le formulaire.

0

Vous pouvez essayer quelque chose comme ceci:

$sql = "UPDATE login_users SET "; 
foreach ($_POST as $fieldname=>$value) { 
    if ($value) { 
     $sql .= "$fieldname='$value', "; 
    } 
} 
$sql = substr($sql, 0, -2); // to remove the last ", " 
$sql .= " WHERE user_id = '$id';"; 

Prenez garde de deux choses:

  1. $ fieldname doit être le même que le nom du champ réel dans votre base de données (sinon, vous devriez faire quelque chose pour le renommer).
  2. Vous devriez faire le md5 pour les mots de passe quelque part entre les deux.

EDIT: Deux autres choses! Ne pas oublier de faire MySQL s'échapper.

  1. Cela pourrait se faire plus joli en utilisant sprintf
Questions connexes