Нужен простенький PHP скрипт.

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
При обращении к которому с параметрами param1, param2, param3 будет записывать их в БД.

Я набрасал просто вывод полученных параметров, на надо полученное в БД записывать. Тут уже знаний не хватает.

PHP:
$param1 = $_GET['param1'];
$param2 = $_GET['param2'];
$param3 = $_GET['param3'];

echo "$param1";
echo "$param2";
echo "$param3";
Может у кого готовое что то есть, поделитесь. Буду благодарен.
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
  • Спасибо
Реакции: Dimionix

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113
$param1 = $_GET["param1"];
$param2 = $_GET["param2"];
$param3 = $_GET["param3"];

$db['hostname'] = "localhost";
$db['username'] = "myusername";
$db['password'] = "mypassword";
$db['database'] = "mydatabase";


$mysqli = new mysqli($db['hostname'], $db['username'], $db['password'], $db['database']);
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

$mysqli->query("SET NAMES UTF8");

$query = "INSERT INTO mytable SET param1='$param1', param2='$param2', param3='$param3'";
$res = $mysqli->query($query);


естественно у вас уже должна быть создана база mydatabase в которой должна быть таблица mytable с такой структурой

id int unsigned auto_increment primary key,
param1 varchar(100),
param2 varchar(100)
param3 varchar(100)

p.s это если считать что параметры это строки ... если это числа, то должно быть так

$query = "INSERT INTO mytable SET param1=$param1, param2=$param2, param3=$param3";

id int unsigned auto_increment primary key,
param1 int unsigned,
param2 int unsigned
param3 int unsigned
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Уже утро... Пффф...

С добавлением данных разобрался, спасибо! Все работает как и задумано. Теперь вот проблема с получением данных. Проблема в грамматике.

PHP:
    $result = mysqli_query($mysqli, "SELECT `answer` FROM `out_data` WHERE `token`=$token");
Переменная $token содержит символы и цифры. Не получается ее правильно указать в запросе.

А если подробнее то, передаем скрипту параметр param1 ищем по его значению запись в БД в поле token и из этой строки получаем и выводим данные из ячейки answer.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113
в одинарные кавычки токен окутай
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
в одинарные кавычки токен окутай
Да вот пробовал, фик, не выводит ничего. Значит что то дальше не так. Вот весь фрагмент кода:
PHP:
// Переменные c парамтерами.
$token = $_GET['token'];

if ($token != '')    {

    $result = mysqli_query($mysqli, "SELECT `answer` FROM `out_data` WHERE `token`='$token'");

    while ($row = mysqli_fetch_array($result)) {
        echo "{OK:".$row['answer']."}";
    }
}


else    {

    echo "ERROR";
}
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Блин, токен не существующий указывал. Все выводит. Только else почему то не отдает. Тут надо если параметр не передан или его нет в БД вывести ошибку.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113
Если else не отдает значит $token не пустой ;-)

p.s еще неплохо делать проверку существует ли вообще такой GET параметр, прежде чем его содержимое в $token запихивать

вот так например, будет записывать пустое значение в $token если GET параметр не существует, иначе переданное значение

PHP:
$token = isset($_GET["token"]) ? trim($_GET["token"]) : "";
 
Последнее редактирование:
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Не знаю на сколько корректно, но работает. Может выскажитесь знатоки PHP. Приму все самое мрачное.

PHP:
// Переменные c парамтерами.
$token = $_GET['token'];

if ($token != '')    {

    $result = mysqli_query($mysqli, "SELECT `answer` FROM `out_data` WHERE `token`='$token'");

    while ($row = mysqli_fetch_array($result)) {
        echo "{OK:".$row['answer']."}";
    }
   
    if ($row['answer'] =! $token);

    echo "TOKEN NOT FOUND!";

}

    else    {

    echo "ERROR";
}
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Если else не отдает значит $token не пустой ;-)

p.s еще неплохо делать проверку существует ли вообще такой GET параметр, прежде чем его содержимое в $token запихивать

вот так например, будет записывать пустое значение в $token если GET параметр не существует, иначе переданное значение

$token = isset($_GET["token"]) ? trim($_GET["token"]) : "";
Ну я его через else проверял и сейчас добавил на пустоту при запросе в БД.

Позже подправлю с вашим предложенным вариантом. Можно идти спать... Задача выполнена. :-) Фух...
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113
Не знаю на сколько корректно, но работает. Может выскажитесь знатоки PHP. Приму все самое мрачное.
PHP:
 if ($row['answer'] =! $token);
в этом месте переменной $row уже не существует
 
  • Спасибо
Реакции: Gfoblin

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113
пхп не шарп. Там переменные существуют почти везде)
В данном случае область существования переменной строго ограничена циклом while

проверяется элементарно ... эмулируем происходящее ( вместо бд берем массив и извлекаем в цикле по элементу из него ), а после цикла проверяем существование переменной $row

PHP:
$data = array(1,2,3,4,5);

while ($row = array_pop($data)){
   print $row;
}

if ( isset($row) )
print "row exist";
else
print "row not exist";
 
  • Спасибо
Реакции: Sanekk и doc

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113
Да, одна запись. Тогда как правильно сделать?
1) сделать проверку кол-ва строк возвращаемых из БД ( примеры тут http://php.net/manual/ru/mysqli-result.num-rows.php )
2) если пункт 1) говорит что строк больше 0, то вместо цикла просто

PHP:
$row = $result->fetch_assoc();
print "{OK:".$row['answer']."}";
 
  • Спасибо
Реакции: one

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Ещё бы не мешало экранировать данные, полученные из GET + делать им urldecode. А то потом придет злой дядька хацкер и за 2 запроса вначале выкачает всю базу данных, а потом удалит )
 
  • Спасибо
Реакции: Sanekk и one

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113
Ещё бы не мешало экранировать данные, полученные из GET + делать им urldecode. А то потом придет злой дядька хацкер и за 2 запроса вначале выкачает всю базу данных, а потом удалит )
я так когда-то однокурснику сайт по курсовой положил перед сдачей)
 
  • Спасибо
Реакции: Sanekk и Lord_Alfred

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
1) сделать проверку кол-ва строк возвращаемых из БД ( примеры тут http://php.net/manual/ru/mysqli-result.num-rows.php )
2) если пункт 1) говорит что строк больше 0, то вместо цикла просто

PHP:
$row = $result->fetch_assoc();
print "{OK:".$row['answer']."}";
Хорошо! И как вывести TOKEN NOT FOUND если вернуло 0 строк? Проверку в цикле как то не хочется делать.

Ещё бы не мешало экранировать данные, полученные из GET + делать им urldecode.
Каким образом?

Я для локальной работы делаю скрипт, но на будущее пример или пояснение на моем примере не помешало бы получить.
 
Последнее редактирование:

ol1ver

Client
Регистрация
29.08.2013
Сообщения
332
Благодарностей
82
Баллы
28
Хорошо! И как вывести TOKEN NOT FOUND если вернуло 0 строк? Проверку в цикле как то не хочется делать.


Каким образом?

Я для локальной работы делаю скрипт, но на будущее пример или пояснение на моем примере не помешало бы получить.
mysql_real_escape_string гуглите, а вообще mysql injection
 
  • Спасибо
Реакции: one

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 518
Благодарностей
990
Баллы
113
делать им urldecode.
нет необходимости, пхп сам как бы декодирует, а когда зенкой пуляешь надо кодировать...
mysql_real_escape_string гуглите, а вообще mysql injection
да если скрипт паблик маст хев, если на локалке, то я просто кладу в .htaccess свои ip.
Код:
<Files *.php>
Order Deny,Allow
Deny from all
Allow from 127.0.0.
</Files>
К стате тогда уж не гет, а лучше пост кидать...
Был прикол гугл сцука прочухал вероятно через браузер, прошелся по моему скрипту (менюхи) и все активировал мне, то что я руками проверял, лишний раз убедился, что лучше на постах+htaccess по IP закрывать диру :(
 
  • Спасибо
Реакции: one и doc

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
PHP:
if ( кол-во строк больше нуля ){
$row = $result->fetch_assoc();
print "{OK:".$row['answer']."}";
}
else {
print "TOKEN NOT FOUND!";
}
Все работает, спасибо!

Только вот остался вопрос. Если в запросе не указан параметр или его значение не могу вывести ошибку ERROR до того как провериться в БД. Ставил проверку на чеком в БД, тоже самое.

PHP:
// Переменные c парамтерами.
//$token = $_GET['token'];
$token = isset($_GET["token"]) ? trim($_GET["token"]) : "";

if ($result = mysqli_query($mysqli, "SELECT `answer` FROM `out_data` WHERE `token` = '$token'")) {

    $row_cnt = mysqli_num_rows($result);

    if ( $row_cnt > 0 ){
        $row = $result->fetch_assoc();
        print "{OK:".$row['answer']."}";
    }

    else {
        print "TOKEN_NOT_FOUND";
    }

    mysqli_free_result($result);

}

else {
    echo "ERROR";
}
И почему Вы в примерах выводите значение на страницу print а не echo? Устарело?
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: WebBot

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 719
Благодарностей
1 376
Баллы
113

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)