Я продолжаю правильно кодировать функцию редактирования и удаления в php/mysql, phpMyAdmin?

Я работаю над добавлением функции редактирования и удаления в свое основное приложение для блога. Я борюсь с тем, чтобы мой код 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 () );
 }
?>

person Greg    schedule 06.12.2010    source источник


Ответы (1)


На вашей странице обновления нет кода, связанного с определением того, какую запись пользователь вообще хочет отредактировать. Он просто представляет новую форму и пытается обновить строку с идентификатором строки «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:

https://rads.stackoverflow.com/amzn/click/com/0980576814

person Dan Grossman    schedule 06.12.2010