Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Добавить записи в таблицу


Автор: Enya 28.1.2006, 22:35
И так есть БД authors.
Этот фаил делаеь вывод списка авторов из таблицы (authorslist.php):
Код

<?php
    include "config.php";
    
    $ath = mysql_query("SELECT * FROM authors");
    
    if(!$ath) //echo mysql_result($ath,0,'name');
     exit(mysql_error());
    echo "<table border=1>";
        while(list($id_author, $name, $password) = mysql_fetch_row($ath))
        {
            echo "<tr>
                    <td>$id_author</td>
                    <td>$name</td>
                    <td>$password</td>
                </tr>";
        }
        echo "</table>";
?>
Он работает.
Вот с помощью этого файла хочу добавить записи в таблицу authors.
Просто 2 поля для ввода имени и пароля + кнопочка (add) (addauthors.php):
Код

<?php
    include "config.php";
    $action = $HTTP_POST_VARS["action"];
    if($action!=""){
    $query = "INSERT INTO authors VALUES
                (0, '$name', '$pass');";
    if(mysql_query($query)){
        print "<html><head>\n";
        print "<meta http-equiv='Refresh' content='0; url=authorslist.php'>\n";
        print "</head></html>\n";
        exit();
    }else{
        echo("<p><h3>Ошибка при добавлении</h3></p>");
        echo("<p>$query</p>");
        exit();
    }
    }
    //********* FORM *****************//    
?>
<HTML>
<HEAD>
    <TITLE>AddNewMember</TITLE>
<BODY>
    <form action=addauthors.php method=post>
        <input type=text name=name size=25 value='<? echo $name; ?>'><br>
        <input type=password name=pass size=25 value='<? echo $pass; ?>'><br>
        <input type=submit value=ADD>
    </form>
</BODY>
</HEAD>
</HTML>

Мне не понятно как работать с переменной $action = $HTTP_POST_VARS["action"]; ???
Потомучто без неё, просто выполняеться запрос добавления пустых записей и вывод списка получаеться вот такой:
Цитата

1  author01  testpass
2  author02  testpass02
3 
4 

Автор: dipsy 28.1.2006, 22:44
Код

  $action = $HTTP_POST_VARS["action"];
    if($action!=""){
    $query = "INSERT INTO authors VALUES
                (0, '$name', '$pass');";


У тебя переменные $name и $pass как определяются?

Автор: Enya 28.1.2006, 22:56
dipsy, наверное никак smile
А как их определить?

Автор: sugee 28.1.2006, 22:56
А откуда у тебя взялась переменная $HTTP_POST_VARS['action']?
В твоей форме нет поля с таким именем.
Чтобы оно было надо написать так
Код

<input type=submit name=action value=ADD>

А когда форма приходит ты проверяешь что она действительно была отправлена
Код

if (isset($HTTP_POST_VARS['action'])&&$HTTP_POST_VARS['action'] == 'ADD')

Но если ты хочешь избежать добавления пустых записей то проверять нужно пришли ли данные из полей name и pass
Код

if (isset($_POST['name'])&&$_POST['name'] !== '')
// и также проверяешь pass

Добавлено @ 23:01
И еще поставь в php.ini register_globals=Off и юзай массив $_POST вместо $HTTP_POST_VARS.

Автор: sugee 28.1.2006, 23:18
Цитата(Enya @ 28.1.2006, 22:35 Найти цитируемый пост)

<input type=text name=name size=25 value='<? echo $name; ?>'><br>
<input type=password name=pass size=25 value='<? echo $pass; ?>'>
<br>


Если у тебя имя и пароль вводятся в поля автоматически, значит я так понимаю у тебя в форме есть галочка типа "запомнить меня" . В этом случае значения $name и $pass берутся из кук.
Но поскольку у тебя такой галочки нет то вот это
Код

value='<? echo $name; ?>'
value='<? echo $pass; ?>'
нужно убрать.

Автор: Enya 29.1.2006, 18:27
sugee
Код

value='<? echo $name; ?>'
value='<? echo $pass; ?>'
Убрала.
Переделала фаил добавления авторов вот так:
Код

<?php
    include "config.php";
    $action = $HTTP_POST_VARS["action"];
//вот здесь если $action пуста, то выводим форму
    if(!isset($action))
    {
    ?>
<HTML>
<HEAD>
    <TITLE>AddNewMember</TITLE>
<BODY>
    <form action=addauthors.php method=post>
        <input type=text name=name size=25><br>
        <input type=password name=pass size=25><br>
        <input type=submit name=action value=ADD>
    </form>
</BODY>
</HEAD>
</HTML>
<?php
    }else
    {
    $query = "INSERT INTO authors VALUES
                (0, '$name', '$pass');";
    if(mysql_query($query)){
        print "<html><head>\n";
        print "<meta http-equiv='Refresh' content='0; url=authorslist.php'>\n";
        print "</head></html>\n";
        exit();
    }else{
        echo("<p><h3>Îøèáêà ïðè äîáàâëåíèè!</h3></p>");
        echo("<p>$query</p>");
        exit();
    }
    }    
?>
И всё равно не работает. smile
Цитата("Выдаёт вот такую ошибку")
Notice: Undefined index: action in r:\home\ldo.com\www\addauthors.php on line 3


Автор: Enya 29.1.2006, 20:37
Нет ну я его уломаю. Вот не много перекроила скрипт. Но всё равно не работает. Чувствую что близка к решению вопроса.
Код

<?php
    include "config.php";
    
    $name = $HTTP_POST_VARS['name'];
    $pass = $HTTP_POST_VARS['pass'];
    
    if ($name!="" && $pass!=""){
    $query = "INSERT INTO authors VALUES(0, '$name', '$pass');";
    if(!mysql_query($query)){
        echo("<p><h3>Îøèáêà ïðè äîáàâëåíèè!</h3></p>");
        echo("<p>$query</p>");
        exit();
        }
    }
    else
    {
print("<HTML>\n");
print("<HEAD>\n");
print("<TITLE>AddNewMember</TITLE>\n");
print("<BODY>\n");
    print("<form " .
        "action=\"{$_SERVER['PHP_SELF']}\" " .
        "method=\"post\">\n");
    print("<input type=\"text\" name=\"name\" value=\"{$HTTP_POST_VARS['name']}\" size=\"25\">\n");
    print("<input type=\"password\" name=\"pass\" value=\"{$HTTP_POST_VARS['pass']}\" size=\"25>\" \n");
    print("<input type=\"submit\" value=\"ADD\">\n");
    print("</form>\n");
print("</BODY>\n");
print("</HEAD>\n");
print("</HTML>\n");
}    
?>
Цитата("А вот что видим в результате")


Notice: Undefined index: name in r:\home\ldo.com\www\addauthors.php on line 4

Notice: Undefined index: pass in r:\home\ldo.com\www\addauthors.php on line 5

Notice: Undefined index: name in r:\home\ldo.com\www\addauthors.php on line 29

Notice: Undefined index: pass in r:\home\ldo.com\www\addauthors.php on line 30


Автор: o.s.a. 29.1.2006, 21:01
Код

<?php
    include "config.php";

    $name = (isset($_POST['name']))?$_POST['name']:"";
    $pass = (isset($_POST['pass']))?$_POST['pass']:"";

    if ($name!="" && $pass!=""){
    echo "added";
    /*
    $query = "INSERT INTO authors VALUES(0, '$name', '$pass');";
    if(!mysql_query($query)){
        echo("<p><h3>I^?e`a'e^a` i"?e` a"i^a'a`a^e"a*i'e`e`!</h3></p>");
        echo("<p>$query</p>");
        exit();
        }
    */
    }
    else
    {
print("<HTML>\n");
print("<HEAD>\n");
print("<TITLE>AddNewMember</TITLE>\n");
print("<BODY>\n");
    print("<form " .
        "action=\"{$_SERVER['PHP_SELF']}\" " .
        "method=\"post\">\n");
    print("<input type=\"text\" name=\"name\" value=\"{$name}\" size=\"25\">\n");
    print("<input type=\"password\" name=\"pass\" value=\"{$pass}\" size=\"25>\" \n");
    print("<input type=\"submit\" value=\"ADD\">\n");
    print("</form>\n");
print("</BODY>\n");
print("</HEAD>\n");
print("</HTML>\n");
}
?>

Автор: Enya 29.1.2006, 21:18
o.s.a. а зачем коментить вот это?
Код

/*
    $query = "INSERT INTO authors VALUES(0, '$name', '$pass');";
    if(!mysql_query($query)){
        echo("<p><h3>I^?e`a'e^a` i"?e` a"i^a'a`a^e"a*i'e`e`!</h3></p>");
        echo("<p>$query</p>");
        exit();
        }
    */
Мне нужно добавть записи из формы в БД.

Автор: o.s.a. 29.1.2006, 21:30
Enya, просто у меня же нету твоей таблицы,
а чтобы проверить работу скрипта, я этот кусок закомментил smile

Автор: Enya 29.1.2006, 21:44
o.s.a. можно вот этот кусок не много объяснить?
Код

$name = (isset($_POST['name']))?$_POST['name']:"";
    $pass = (isset($_POST['pass']))?$_POST['pass']:"";
    if ($name!="" && $pass!=""){

Конструкцию () ? () : () я понимаю.

И в чём отличие от моего кода?
Код

$name = $HTTP_POST_VARS['name'];
    $pass = $HTTP_POST_VARS['pass'];
    
    if ($name!="" && $pass!=""){


Если не сложно не много фраз. Всё таки начинающаяя програмисточка.

Автор: o.s.a. 29.1.2006, 21:59
Код

$name = $HTTP_POST_VARS['name'];

Здесь ПХП ругается потому, что при первой загрузке не определен елемент массива $HTTP_POST_VARS с индексом name.
З.Ы. Вообще лучше использовать $_POST и $_GET вместо $HTTP_POST_VARS и $HTTP_GET_VARS.

Код

$name = (isset($_POST['name']))?$_POST['name']:"";

Здесь я проверяю существует ли переменная name, переданная постом,
если да, то $name = $_POST['name'];
иначе $name = "";

Автор: Enya 30.1.2006, 00:46
o.s.a., спасибо. Всё окей.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)