2008-09-25 9 views
1

J'ai ce code PHP que j'essaie d'utiliser pour permettre à un utilisateur de modifier un enregistrement de nouvelles dans un formulaire, puis quand il appuie sur le bouton Soumettre le dossier dans une base de données. Le problème est que tout fonctionne mais que l'enregistrement n'est pas réellement mis à jour dans la base de données.PHP/MySQL mettre à jour un enregistrement de nouvelles dans un problème de base de données

Est-ce que quelqu'un pourrait regarder mon code et voir où un problème pourrait se produire?

<?php 
    $title = "Edit News"; 
    include("../includes/header.php"); 
    include("../includes/database.php"); 
    $done = false; 
    $expected = array('newstitle', 'newscontent', 'id'); 
    if ($_GET && !$_POST) { 
     if (isset($_GET['id']) && is_numeric($_GET['id'])) { 
      $id = $_GET['id']; 
     } 
     else { 
      $id = NULL; 
     } 
     if ($id) { 
      $sql = "SELECT * FROM news WHERE id = $id"; 
      $result = mysql_query($sql) or die ("Error connecting to database..."); 
      $row = mysql_fetch_assoc($result); 
     } 
     // if form has been submitted, update record 
     if (array_key_exists('update', $_POST)) { 
      // prepare expected items for insertion into database 
      foreach ($_POST as $key => $value) { 
       if (in_array($key, $expected)) { 
        ${$key} = mysql_real_escape_string($value); 
       } 
      } 
      // abandon the process if primary key invalid 
      if (!is_numeric($id)) { 
       die('Invalid request'); 
      } 
      // prepare the SQL query 
      $query = "UPDATE news SET title = '$title', content = '$content' WHERE id = $id"; 
      // submit the query 
      $done = mysql_query($query) or die("Error connecting to database..."); 
     } 
    } 
    // redirect page if $id is invalid 
    if ($done) { 
     header("Location: $ROOT/admin/listnews.php"); 
     exit; 
    } 
?> 

Répondre

0

Si vous exécutez cette UPDATE à partir du fichier mysql cli avec les mêmes données que l'utilisateur envoie-t-elle à jour?

Si ce n'est pas le cas, vérifiez les caractères d'échappement.

5
if ($_GET && !$_POST) { 

...

if (array_key_exists('update', $_POST)) { 

Est-ce pas assurer le code de mise à jour ne se déclenche jamais?

0

Est-ce que $ content et $ title dans la ligne ci-dessous sont $ newstitle et $ newscontent?

// prepare the SQL query 
$query = "UPDATE news SET title = '$newstitle', content = '$newscontent' WHERE id = $id"; 
0

Couple de choses à essayer et affiner le problème:

  • écho à un texte de débogage juste à l'intérieur du bloc if (array_key_exists('update', $_POST)) pour vous assurer que vous obtenez en fait là-dedans. Le sommet de votre "si" est if($_GET && !$_POST), donc vous devrez peut-être changer ce $_POST en $_GET
  • avez-vous essayé de faire écho $query juste avant l'appel db? Est-ce qu'il fonctionne sur l'interface de ligne de commande mysql ok?
  • si ma lecture de votre foreach ($_POST as $key => $value) est correcte, vous finirez par la définition des variables avec les mêmes noms que ceux $expected - ($newstitle, $newscontent, $id) - mais dans votre référence SQL $content et $title. Ils peuvent être la cause de ce bug, mais quelque chose à garder à l'œil.
0

Il est un peu difficile de savoir exactement ce qui se passe sans voir la source de votre formulaire HTML, mais je pense que le

if (array_key_exists('update', $_POST)) { 

bloc doit être déplacé hors de l'extérieur si, puisqu'il ne sera jamais exécuté s'il est là.

Si vous ne voulez pas utiliser une sorte de framework de test, print() est votre ami quand il s'agit de déboguer votre code. Essayez de trouver ce qui est en train d'être exécuté et ce qui ne l'est pas; vous découvrirez rapidement laquelle de vos suppositions est incorrecte, et donc où est le bogue.

0

Prenez cette instruction if de la imbriquée si:

 

if (array_key_exists('update', $_POST)) { 
... 
} 
 

puis ajoutez ce conditionnel:

 


if (count($_POST) && array_key_exists('update', $_POST)) { 
... 
} 
 

Je suis assez sûr qui prendra soin de votre problème.

Questions connexes