2015-02-05 2 views
2

Я работаю над CMS и, кажется, сейчас имею проблемы с моим кодом редактирования, и я не могу понять, в чем проблема для жизни меня, когда я подчиняюсь редактированию, все идет как будто редактирование было успешным, однако ничто не изменено или не отправлено в базу данных.изменить данные из mysql db

Я пробовал много разных вещей, и ничто не имеет никакого значения, я полностью потерял это.

editarticle.php

<?php 
ob_start(); 
session_start(); 

include_once('includes/connection.php'); 
include_once('includes/news.php'); 
include_once('includes/functions.php'); 

$article = new Article; 
$funct = new UserFunctions; 

if (isset($_SESSION['logged_in'])) { 
    $articles = $article->fetch_all(); 

    if (isset($_POST['title'], $_POST['content'])) { 
     $title = $_POST['title']; 
     $content = nl2br($_POST['content']); 

     if (empty($title) or empty($content)) { 
      $error = 'All fields are required!'; 
      header('Location: index.php?p=editarticle'); 
     } else { 
      global $pdo; 

      $query = $pdo->prepare('UPDATE articles SET article_title = ?, article_content = ? WHERE article_id=?'); 
      $query->bindValue(1, $title); 
      $query->bindValue(2, $content); 
      $query->bindValue(3, $id); 

      $query->execute(); 

      header('Location: index.php'); 
     } 
    } 

    //check if an article is selected to be edited 
    if (isset($_GET['id'])) { 
     $id = $_GET['id']; 

     $query = $pdo->prepare("SELECT * FROM articles WHERE article_id = ?"); 
     $query->bindValue(1, $id); 
     $query->execute(); 

     $rows = $query->fetchAll(); 

     //get the article title and content to put in edit inputs 
     foreach ($rows as $row) { 
      $id = $row['article_id']; 
      $title = $row['article_title']; 
      $content = $funct->br2nl($row['article_content']); 
     } 
?> 
<!-- POST --> 
<div class="post"> 
    <div class="topwrap"> 
     <div class="userinfo pull-left"> 
      <div class="avatar"> 
       <img src="images/avatar.jpg" alt="" /> 
       <div class="status green">&nbsp;</div> 
      </div> 

      <div class="icons"> 
       <img src="images/icon1.jpg" alt="" /><img src="images/icon4.jpg" alt="" /><img src="images/icon5.jpg" alt="" /><img src="images/icon6.jpg" alt="" /> 
      </div> 
     </div> 
     <div class="posttext pull-left"> 
      <h2>Edit Article</h2> 
      <!-- add Article form start !--> 
      <form action="editarticle.php" method="post" autocomplete="off"> 
       <input type="text" name="title" value="<?php echo $title; ?>" /><br /><br /> 
       <textarea rows="10" cols="87" name="content" /><?php echo $content; ?></textarea> 
       <!-- add article form break !--> 
     </div> 
     <div class="clearfix"></div> 
    </div>        
    <div class="postinfobot"> 

     <div class="dateposted pull-right"> 
       <!-- add article form continue !--> 
       <input class="btn btn-primary" type="submit" value="Submit Changes" /> 
      </form> 
      <!-- add article form end !--> 
     </div> 

     <div class="clearfix"></div> 
    </div> 
</div> 
<!-- POST --> 
<?php 
    } else { 
?> 
<!-- POST --> 
<div class="post"> 
    <div class="topwrap"> 
     <div class="userinfo pull-left"> 

     </div> 
     <div class="posttext pull-left"> 
      <h2>Select an Article to Edit</h2> 
        <?php foreach ($articles as $article) { ?> 
         <?php echo $article['article_id']; ?> - <a href="index.php?p=editarticle&id=<?php echo $article['article_id']; ?>"><?php echo $article['article_title']; ?></a><br /> 
        <?php } ?> 
     </div> 
     <div class="clearfix"></div> 
    </div>        
    <div class="postinfobot"> 
     <div class="dateposted pull-right"> </div> 

     <div class="clearfix"></div> 
    </div> 
</div> 
<!-- POST --> 
<?php 
    } 
} else { 
    header('Location: index.php'); 
} 

?> 

включает/news.php

class Article { 
    public function fetch_all() { 
     global $pdo; 
     $article_status = 1; 

     $query = $pdo->prepare("SELECT * FROM articles WHERE article_status = ? ORDER BY article_timestamp DESC"); 
     $query->bindValue(1, $article_status); 
     $query->execute(); 

     return $query->fetchAll(); 
    } 

    public function fetch_data($article_id) { 
     global $pdo; 
     $article_status = 1; 

     $query = $pdo->prepare("SELECT * FROM articles WHERE article_id = ? AND article_status = ?"); 
     $query->bindValue(1, $article_id); 
     $query->bindValue(2, $article_status); 
     $query->execute(); 

     return $query->fetch(); 
    } 
} 

Я получаю обратно в PHP впервые за 10 лет, и делали много C# развития за последние 2 года. Мне очень сложно устранить проблемы с PHP до сих пор, так как у меня очень мало или вообще не было сообщений об ошибках (даже в error_log на моем хосте).

Любые идеи, почему это не отправляет изменения в базу данных?

+0

при нажатии на кнопку редактирования отображаются данные? –

+0

Вы используете '? P', но я не вижу' $ _GET ['p'] 'где угодно. –

+0

Что такое возвращаемое значение '$ query-> execute();' –

ответ

2

Страница задает $ id при получении при загрузке. Но опять же вы публикуете данные для себя, создавая новый экземпляр сообщения, в котором этот новый пост ничего не знает о $ id

Так что вам нужно явно передать $ id (если только это не переменная сеанса, где вы можно использовать $ _SESSION переменной, чтобы получить его) как скрытое значение в вашей форме попробуйте добавить это форма:

<input type="hidden" value="<?php echo $id;?>"> 
+0

, если это сработает, я буду чувствовать себя действительно глупым, потому что у меня уже было это в какой-то момент и удалил его, думая, что это не нужно, если я могу просто установить $ id без необходимости скрытого ввода). – Meta

+0

Это сработало, однако мне также нужно было добавить $ id = $ _POST ['id']; выше, где я устанавливаю новый заголовок. Я чувствую себя настолько немым для того, чтобы удалить это, а потом забыть об этом. – Meta

+0

forcourse @Meta вам нужна переменная post для ее получения –

1

как @noob отметил, юй нужно передать идентификатор статьи в первой форме, потому что ваша UPDATE заявление нужно.

Поэтому:

if (isset($_POST['title'], $_POST['content'], $_POST['id'])) { 
     $title = $_POST['title']; 
     $content = nl2br($_POST['content']); 
     $id= $_POST['id']; 

И в вашей форме:

<form action="editarticle.php" method="post" autocomplete="off"> 
       <input type="hidden" value="<?php echo $id;?>"> 
       <input type="text" name="title" value="<?php echo $title; ?>" /><br /><br /> 
       <textarea rows="10" cols="87" name="content" /><?php echo $content; ?></textarea> 
       <!-- add article form break !--> 
     </div> 
     <div class="clearfix"></div> 
    </div>        
    <div class="postinfobot"> 

     <div class="dateposted pull-right"> 
       <!-- add article form continue !--> 
       <input class="btn btn-primary" type="submit" value="Submit Changes" /> 
      </form> 
Смежные вопросы