Я продолжаю кодировать функцию редактирования и удаления правильно в php / mysql, phpMyAdmin - PullRequest
0 голосов
/ 07 декабря 2010

Я работаю над добавлением функции редактирования и удаления в мое основное приложение блога.Я борюсь с правильной обработкой кода edit.php и delete.php.

Когда человек нажимает кнопку удаления или редактирования, код в соответствующем php-файле не обрабатывается.

Основной PHP-файл:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="container">

  <h1>Lay Down Your Thoughts</h1>

    <div id="boxtop"></div>
  <div id="content">

     <!-- form to leave a message -->
    <form action="<?php $self ?>" method="post">
    <h2>Post your thought!</h2>

    <div class="fname"><label for="name"><p>Name:</p></label><input name="name" type="text" cols="20" /></div>
    <div class="femail"><label for="email"><p>Email:</p></label><input name="email" type="text" cols="20" /></div>
    <label for="message"><p>Message:</p></label>
    <textarea name="post" rows="5" cols="40"></textarea>
    <input name="send" type="hidden" />
    <p><input type="submit" value="send" /></p>
    </form>

 <?php
    $self = $_SERVER['PHP_SELF']; //the $self variable equals this file
    $ipaddress = ("$_SERVER[REMOTE_ADDR]"); //the $ipaddress var equals users IP
    include ('db.php');
        // checks the POST to see if something has been submitted
        if(isset($_POST['send'])) 
            if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['post'])) {
                echo('<p class="error">You did not fill in a required field.</p>');
            } else {

                // if there are no empty fields, insert into the database:

                //validate through htmlspecialchars()
                // eliminates the user from submitting harmful html 
                // also runs through mysql_real_escape_string()
                // stops users sending SQL code to infiltrate the db
                $name = htmlspecialchars(mysql_real_escape_string($_POST['name'])); 
                $email = htmlspecialchars(mysql_real_escape_string($_POST['email'])); 
                $post = htmlspecialchars(mysql_real_escape_string($_POST['post']));

                    // this is our SQL string to insert shouts into db
                    $sql = "INSERT INTO messages SET name='$name', email='$email', post='$post', ipaddress='$ipaddress';";

                        // run the SQL string
                        // if it succeeds, display message
                        if (@mysql_query($sql)) {
                            echo('<p class="success">message has been posted</p>');
                        } else {
                            // if error, send message
                            echo('<p class="error">There was an unexpected error when posting your message.</p>');
                        }
             }

        // display 8 latest messages
        $query = "SELECT * FROM messages ORDER BY `id` DESC LIMIT 8;";

        // run query if it fails display fail
        $result = @mysql_query("$query") or die('<p class="error">There was an unexpected error collecting messages.</p>');

        ?><ul><?
        // display the rows from the post
        while ($row = mysql_fetch_array($result)) {

            $ename = stripslashes($row['name']);
            $eemail = stripslashes($row['email']);
            $epost = stripslashes($row['post']);

            // gravatar image 
            $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5(strtolower($eemail))."&size=70"; 

            echo('<li><div class="meta"><img src="'.$grav_url.'" alt="Gravatar" /><p>'.$ename.'</p></div><div class="message"><p>'.$epost.'</p></div></li>');

            echo ('<form action="messageME_final_delete.php" method="post"><input name="delete" type="hidden" /> <p><input type="submit" value="delete" /></p></form>');

             echo('<form action="messageME_final_update.php" method="post"><input name="edit" type="hidden" /> <p><input type="submit" value="edit" /></p></form>');


        }
        ?></ul><?
    ?>

  </div><!--/content-->
  <div id="boxbot"></div>

</div><!--/container-->

</body>
</html>

Вот правка php-файла:

<form action="messageME_final_update.php" method="post">
    <h2>Edit this Thought!</h2>

    <div class="fname"><label for="name"><p>Name:</p></label><input name="name" type="text" cols="20" /></div>
    <div class="femail"><label for="email"><p>Email:</p></label><input name="email" type="text" cols="20" /></div>
    <label for="message"><p>Message:</p></label>
    <textarea name="post" rows="5" cols="40"></textarea>
    <input name="send" type="hidden" />
    <p><input type="submit" value="send" /></p>
    </form>

 <?
 include ('db.php');

$query="UPDATE messages SET name='name', email='email', post='post' WHERE id='ID'";
mysql_query($query);
echo "Record Updated";
mysql_close();
?>

Наконец, вот код удаления php:

<?php

   include ('db.php');

 $sql = "DELETE FROM `messages` WHERE `ID` ="  ." mysql_real_escape_string ( $_GET['ID'] )";

 mysql_select_db ( $database, $connect );

 if ( @mysql_query ( $sql ) )
 {
  echo 'Article ID = ' . $_POST['ID'];
  echo ' was deleted successfully';
 }
 else {
  die ( mysql_error () );
 }
?>

1 Ответ

1 голос
/ 07 декабря 2010

Ваша страница обновления не имеет кода, связанного с определением того, какой пост пользователь хочет редактировать вообще.Он просто представляет новую форму и пытается обновить строку с идентификатором строки 'ID'.

Ваша страница удаления пытается получить доступ как к $ _GET ['ID'], так и к $ _POST ['ID'], который никогда не будет установлен, так как HTTP-запрос всегда относится к одному методу (GET, POST, HEAD и т. д.).Вы также не можете объединить строку с функцией правильно, вместо этого отправив текстовый запрос «mysql_real_escape_string (...» как часть запроса, который не будет выполняться.

$sql = "DELETE FROM messages WHERE ID = " . (int)$_POST['ID'];

... ближе кчто вы хотите, за исключением того, что ваша форма в списке сообщений не содержит элемент с именем ID. Вы должны создать его и заполнить его идентификатором сообщения, которому соответствует строка.

<input type="hidden" name="ID" value="<?php echo $row['ID']; ?>" />

ВыполнитеТо же самое для формы, указывающей на страницу редактирования, и используйте $ _POST ['ID'], чтобы просмотреть сообщение и заполнить поля формы для редактирования.

Рекомендуемое чтение, которое проведет вас через построение всех аспектовCMS в PHP / MySQL:

http://www.amazon.com/Build-Database-Driven-Using-MySQL/dp/0980576814/ref=dp_ob_title_bk

...