веб-форма не добавляет или удаляет из таблицы MySQL - PullRequest
0 голосов
/ 25 сентября 2011

Я работаю над базовой веб-формой (используя шаблоны PHP и smarty), которая позволяет пользователям добавлять и удалять данные из таблицы базы данных mysql. Данные и форма отображаются нормально, но ничего не происходит, когда пользователь пытается добавить или удалить записи из таблицы (даже не отображается сообщение об ошибке «не удается удалить / добавить запись»). Вот как выглядит код:

<?php //smartytest.php

$path =$_SERVER['DOCUMENT_ROOT'];
require "$path/Smarty/Smarty.class.php";

$smarty = new Smarty();
$smarty->template_dir = "$path/temp/smarty/templates";
$smarty->compile_dir= "$path/temp/smarty/templates_c";
$smarty->cache_dir="$path/temp/smarty/cache";
$smarty->config_dir="$path/temp/smarty/configs";

require_once ("$path/phptest/login.php");

$db_server=mysql_connect($db_hostname, $db_username, $db_password);

if(!$db_server) die('unable to connect to MySQL: '. mysql_error());

mysql_select_db($db_database) or die("unable to select database: " . mysql_error());

if(isset($_POST['author'])&&
    isset($_POST['title'])&&
    isset($_POST['category'])&&
    isset($_POST['year'])&&
    isset($_POST['isbn']))
    {
        $author = get_post('author');
        $title = get_post('title');
        $category=get_post('category');
        $year = get_post('year');
        $isbn =get_post('isbn');

        if (isset($_POST['delete']) && $isbn !='')
        {
            $query= "DELETE FROM classics WHERE isbn='$isbn'";

            if (!mysql_query($query))
            {
                echo "DELETE failed: $query<br>". mysql_error() . "<p>";
            }
        }
        else 
        {
            $query = "INSERT INTO classics VALUES" . "('$author','$title', '$category', '$year', '$isbn')";
        if (!mysql_query($query))
        {
            echo "INSERT failed: $query<br>" . mysql_error() . "<p>";
        }   
    }
}
$query = "SELECT * FROM classics";
$result = mysql_query($query);

if (!$result) die ("Database access failed: ". mysql_error());

$rows = mysql_num_rows($result);

for ($j=0; $j < $rows; ++$j)
{
    $results[] = mysql_fetch_array($result);
}

mysql_close($db_server);

$smarty->assign('results', $results);
$smarty->display("smartytest.tpl");

function get_post($var)
{
    return mysql_escape_string($_POST[$var]);
}
?>

Кроме того, вот файл шаблона Smarty:

<code><html><head>
<title>Smarty Test</title>
</head><body>

<form action="/phptest/smartytest.php" method="post"><pre>
    Author <input type="text" name="author">
    Title<input type="text" name="title">
    Category<input type="text" name="category">
    Year<input type="text" name="year">
    ISBN<input type="text" name="isbn">
        <input type="submit" value="ADD RECORD">
{имя раздела = цикл строки = $ результаты}
Author    {$results[row].author}
Title     {$results[row].title}
Category  {$results[row].category}
Year      {$results[row].year}
ISBN      {$results[row].isbn}
        <input type="submit" value="DELETE RECORD"></form>
    
{/раздел}

Мое лучшее предположение заключается в том, что с вложенными операторами if что-то не так (возможно, именно поэтому даже не отображается сообщение об ошибке), но я дважды проверил код, и он выглядит хорошо (по крайней мере для меня). Кто-нибудь замечает что-то не так с этим? Я могу опубликовать экран, на котором будет выглядеть страница, если это поможет.

1 Ответ

0 голосов
/ 25 сентября 2011

Вы проверяете наличие author, title, category, year, isbn с помощью isset(..), прежде чем проверять, какой тип действия был предпринят. Существуют переменные (например, $_POST['author'], , а не . Причина в том, что на странице имеется несколько форм. В $_POST.

доступны только входные данные в отправленной форме.

В этом случае вы можете просто сделать:

if (isset($_POST['delete'])
    && isset($_POST['isbn'])
    && strlen($_POST['isbn'])) {
    // Remove record code here
}
else {
    // Add record code here
}
...