Author Topic: обработка форм HTML средствами PHP  (Read 8821 times)

0 Members and 2 Guests are viewing this topic.

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
Час добрый всем!
сразу скажу, что php почти не знаю, поэтому и прошу помочь, очень срочно нужно  
Задача:
есть HTML код в котором 2 checkbox'а, 2 формы под логин и пароль и кнопка!
так вот, необходимо, чтобы при нажатии на кнопку выполнить,чтобы он определил IP с которого заходит пользователь, положил в определенный файл логин и пароль и ip(причем положил, посмотрев, есть ли такой уже) и по выбранному checkbox'у (например, с именем 1) перезагружал скрипт определенный -система Linux Slackware.
Цель, ограничения внешки пользователям (сам человек, если сам себе не доверяет  отключался)
Заранее благодарю!
P.S. может готовые решения есть, чтобы никого не напрягать...

Offline lamaka

  • Jr. Member
  • **
  • Posts: 51
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #1 on: May 16, 2006, 11:54:28 »
Ну тут наверное надо сделать чтобы логин/пароль/ИП-адрес лежали не в файле каком-нибудь, а в базе данных (таблица из трех исходных пунктов, причем ИП-адрес сделать как примари кей).

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #2 on: May 16, 2006, 12:24:29 »
Quote from: lamaka
Ну тут наверное надо сделать чтобы логин/пароль/ИП-адрес лежали не в файле каком-нибудь, а в базе данных (таблица из трех исходных пунктов, причем ИП-адрес сделать как примари кей).


если бы я знал такие тонкости, я к вам и обращаюсь за помощью поэтому!
как это примерно сделать, как создать таблицу, поля(пользователей.. соответствие IP адреса)?
я и прошу, мож готовые решения есть.. мож кто делал подобное? я самостоятельно навряд ли напишу..

Offline ack

  • Jr. Member
  • **
  • Posts: 75
  • Karma: +0/-0
    • http://
обработка форм HTML средствами PHP
« Reply #3 on: May 16, 2006, 19:50:31 »
Quote from: lsk
если бы я знал такие тонкости, я к вам и обращаюсь за помощью поэтому!
как это примерно сделать, как создать таблицу, поля(пользователей.. соответствие IP адреса)?
я и прошу, мож готовые решения есть.. мож кто делал подобное? я самостоятельно навряд ли напишу..
lamaka правильно говорит. С файлами плохо то, что придётся думать как разделить попытки одновременного доступа к файлу из разных процессов. Поэтому БД в твоём варианте - самое лучшее.
А по поводу PHP либо сам пиши, либо проси кого-нибудь за тебя написать.
У меня есть подобная система, но навряд ли это в точности то, что тебе нужно.

Offline loki

  • Jr. Member
  • **
  • Posts: 65
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #4 on: May 16, 2006, 21:13:56 »
Вот. Примерный код php скрипта, которому передаются твои данные:

Code: [Select]
<?php

$ip = $_SERVER['REMOTE_ADDR'];
$name = $_POST["name"];
$pass = $_POST["pass"];
$checkbox = $_POST["box"];

 
$host = "localhost";    // MySQL server
$user_db = "root";        // MySQL пользователь
$pass_db = "";            // MySQL пароль
$dbase = "users";        // MySQL база данных
$dtable = "user";        // Таблица в базе данных

 /* Соединение с сервером базы данных */
@ $db = mysql_pconnect ($host, $user_db, $pass_db);
if (!$db) {
    echo "<b>Извините!</b>";
    exit;
}
                
/* Выбор базы данных */
mysql_select_db($dbase);
mysql_query("SET NAMES koi8r");

$sql = "SELECT name, pass FROM users WHERE ip=$ip";
        /* Исполнение SQL запроса */
$result = mysql_query($sql);
        /* Проверка количества вернувшихся строчек в результате*/
$rows = mysql_num_rows($result);
        /* Если нет результата или результат меньше 1, то предупредить нас об этом или вывести результат*/
if ((!$rows) || ($rows < 1))
{
    echo "Извини.";
    create($name, $pass);
}
else
{
    while(list($ip, $name, $pass) = mysql_fetch_row($result))
    {
        if ($checkbox == 1) system('/usr/bin/script1.sh'); //
            else system('/usr/bin/script2.sh');
    }        
}


?>

Скрипт выполняет следующее.
Получает методом Post данные от формы (не знаю, как checkbox правильно поставить, но думаю сам сможешь).
Коннектится к mysql базе $dbase.
Выполняет sql-запрос , в котором просит выдать базу только те записи, которые совпадают с ip-пользователя. Если такого нет, то передает управление функции, которая может либо создать новую запись в базе либо выйти.
Если записи есть, и выжат 1й чекбокс то выполняется script1.sh, другой - script2.sh.
Вот так. Скрипт очень простой, но если надо можем вместе его подогнать. Спрашивай.

Теперь надо создать базу и таблицу с тремя полями:
Code: [Select]
CREATE DATABASE `test` DEFAULT CHARACTER SET koi8r COLLATE koi8r_general_ci;

CREATE TABLE `user` (
`ip` TINYINT NOT NULL ,
`name` VARCHAR( 20 ) CHARACTER SET koi8r COLLATE koi8r_general_ci NOT NULL ,
`pass` VARCHAR( 20 ) CHARACTER SET koi8r COLLATE koi8r_general_ci NOT NULL
);

Кому чего не нравится, можете подправить.
Не проверял, но работать должно   .

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #5 on: May 17, 2006, 10:11:55 »
в любом случае, огроменное спасибо!!! база есть, если будет вопроси обязательно обращусь!
« Last Edit: May 17, 2006, 10:13:43 by lsk »

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #6 on: May 17, 2006, 20:48:43 »
вот чего он выдает!
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/myform.php on line 41
Извините!
не могу понять, но в базе не хочет храниться IP, любой IP, который прописываешь в таблицу(поле IP) выдает при сохранении значение 127  и, соответственно при проверке скриптом "есть ли такой в базе", выдается ошибка описанная сверху и снизу...

и ещё вот это Fatal error: Call to undefined function: create() in /www/myform.php on line 46

да и как сделать, чтобы при условии, если есть в базе user с таким именем, паролем  и IP, то IP этого пользователя дописывалось в файл(из базы) при положении checkbox 1 и щел перезапуск скрипта, а при положении checkbox2 удалялся этот Ip(если такой есть в файле) из того же файла и  так же перезапуск скрипта.
Извиняюсь за назойливость и заранее благодарю!


Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
обработка форм HTML средствами PHP
« Reply #7 on: May 17, 2006, 23:31:48 »
Quote from: lsk
вот чего он выдает!
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/myform.php on line 41
Извините!
не могу понять, но в базе не хочет храниться IP, любой IP, который прописываешь в таблицу(поле IP) выдает при сохранении значение 127  и, соответственно при проверке скриптом "есть ли такой в базе", выдается ошибка описанная сверху и снизу...

и ещё вот это Fatal error: Call to undefined function: create() in /www/myform.php on line 46

да и как сделать, чтобы при условии, если есть в базе user с таким именем, паролем  и IP, то IP этого пользователя дописывалось в файл(из базы) при положении checkbox 1 и щел перезапуск скрипта, а при положении checkbox2 удалялся этот Ip(если такой есть в файле) из того же файла и  так же перезапуск скрипта.
Извиняюсь за назойливость и заранее благодарю!
Для тех кто не любит читать документацию
http://dev.mysql.com/doc/refman/5.0/en/num...e-overview.html
Quote
TINYINT -- A very small integer. The signed range is -128 to 127. The unsigned range is 0 to 255.
Вам же нужен для хранения IP адреса как минимум
INT -- A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.
Кроме того $_SERVER['REMOTE_ADDR'] хранит на самом деле строку вида (\d{1,3}\.){4}
которую еще нужно перевести в тип INT, например, так
http://ru.php.net/manual/ru/function.ip2long.php
"p2long --  Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address"
« Last Edit: May 17, 2006, 23:36:15 by demiurg »

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #8 on: May 18, 2006, 14:54:06 »
Вам же нужен для хранения IP адреса как минимум
INT -- A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.
Кроме того $_SERVER['REMOTE_ADDR'] хранит на самом деле строку вида (\d{1,3}\.){4}
которую еще нужно перевести в тип INT, например, так
http://ru.php.net/manual/ru/function.ip2long.php
"p2long --  Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address"
[/quote]


написал

$ip = $_SERVER['REMOTE_ADDR'];
$ip_long = ip2long($ip);

и в sql задал тип поля INT не работает   в sql адресс полноценный храниться только в VARCHAR(15).. но все равно ничего не рпаботает...


выдает по-прежнему Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/myform.php on line 42
Извините!
Fatal error: Call to undefined function: create() in /www/myform.php on line 48
help
« Last Edit: May 18, 2006, 14:57:24 by lsk »

Offline loki

  • Jr. Member
  • **
  • Posts: 65
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #9 on: May 18, 2006, 18:26:14 »
Ok.
Там, при создании таблицы ip, и правда ошибка небольшая закралась. Надо varchar(16), у меня самого ip в такую таблицу пишется. Меняется так:
Code: [Select]
ALTER TABLE `user` CHANGE `ip` `ip` VARCHAR( 16 ) DEFAULT '0' NOT NULL

 Вот, если будет такой тип таблицы, то ипшник можно будет записывать в базу.
Такой вопрос. В mysql-консоли, что выдает запрос:
Code: [Select]
SELECT ip, name, pass FROM users;
Если выдает правильно, то скорее всего, проблемы в настройках скрипта.
Пароль, логин, хост в скрипте правильно заданы? Имя базы в скрипте менял? я в примере немного другое имя привел.
Функцию create() нужно закомментировать, я ведь ее для примера привел и не написал.

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #10 on: May 18, 2006, 22:30:01 »
грубо говоря завелся, для этого я сделал:
1. Вместо $sql = "SELECT name, pass FROM users WHERE ip=$ip";
   сдела запись в скрипте $sql = "SELECT ip, name, pass FROM user" ;
2. sql на запрос SELECT ip, name, pass FROM user; выдал; SQL-запрос:SELECT ip, name, pass
FROM user
LIMIT 0 , 30 и все...
3. поменял тип поля на varchar (16)
да, говорит echo что скрипт удачно отработан.., но не перезагружает скрипты,  причем, чего бы ты в полях не писал  
можно даже ничего не вводить в форму, он все равно скажет, что все отлично, без ошибок, но тем не менее-результат нулевой

да, и ещё, если делаю $sql = "SELECT name, pass FROM user WHERE ip" ; с этой строчкой выдает:Notice: Undefined offset: 2 in /www/myform.php on line 49

Notice: Undefined offset: 2 in /www/myform.php on line 49

и ещё вместо POST я использую $HTTP_GET_VARS  потому как при методе POST выдается ошибка Notice: Undefined index: login in /www/myform.php on line 6
« Last Edit: May 19, 2006, 10:57:39 by lsk »

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #11 on: May 19, 2006, 18:29:46 »
все, спасибо, я решил проблемы.. с выборкой пользователей были проблемы + опрос checkbox'а не работали условия..

теперь буду думать, как в файл грузить IP.

Offline loki

  • Jr. Member
  • **
  • Posts: 65
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #12 on: May 20, 2006, 00:25:10 »
Quote from: lsk
все, спасибо, я решил проблемы.. с выборкой пользователей были проблемы + опрос checkbox'а не работали условия..
как то особенно скрипт менял? или что сам не то делал?
Quote
теперь буду думать, как в файл грузить IP.
а зачем в файл? так мало информации, что легче писать в файл нежели в базу.
Просто интересно.

Offline lsk

  • Newbie
  • *
  • Posts: 26
  • Karma: +0/-0
обработка форм HTML средствами PHP
« Reply #13 on: May 21, 2006, 20:52:04 »
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$inet_on = $HTTP_GET_VARS["on"];
$name = $HTTP_GET_VARS["login"];
$pass = $HTTP_GET_VARS["pass"];

$host = "localhost";    
$user_db = "******";
$pass_db = "******";            
$dbase = "inet_access";        
$dtable = "user";        

@ $db = mysql_connect ($host, $user_db, $pass_db);
if (!$db) {
echo "<center><b>оЕ НПЗХ УПЕДЙОЙФШУС У УЕТЧЕТПН...</b>";
exit;
}
mysql_select_db($dbase);
$result = mysql_query("SET NAMES koi8r");
$sql = "SELECT ip, name, pass FROM user WHERE name='".$name."' AND pass='".$pass."'";
$result = mysql_query($sql);
$rows = mysql_num_rows($result);

   if ((!$rows) || ($rows < 1))
 {
    echo "<center><b>йЪЧЙОЙФЕ, ОП ЧБЫЙ ЧЧЕДЕООЩЕ ДБООЩЕ ОЕ УППФЧЕУФЧХАФ ДБООЩН Ч ВБЪЕ!";
#        create($name, $pass);
}
               
   else
{
while(list($ip, $name, $pass) = mysql_fetch_row($result))
{
if ($inet_on == "on") system('script1.php'); //
else system('script2.php');
}        
echo "<hr><center><b><i>чБЫ IP = ";
echo  $_SERVER['REMOTE_ADDR'];
echo "<br>ЙНС РПМШЪПЧБФЕМС  ";
echo $name= $HTTP_GET_VARS["login"];
echo "<br><b>УЛТЙРФ ХУРЕЫОП ЧЩРПМОЙМ УЧПА ТБВПФХ!<b><hr>";
if ($inet_on == "on") echo "йОФЕТОЕФ ЧЛМАЮЕО";
else echo "йОФЕТОЕФ ЧЩЛМАЮЕО";

}
?>

вот код.
теперь необходимо, чтобы работали 2 условия либо удаления, либо записи IP в определенный файл, либо удаления, если такой существует. Грубо говоря, скрипт должен проверять при записи, есть ли такой уже существует IP, то выдавать echo, если нет-дописывать. И наоборот, при другом условии: "смотреть" есть ли такой IP если есть- удалять, если нет, то выдавать echo.
« Last Edit: May 21, 2006, 20:58:13 by lsk »