Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Проблема с PHP(не передаются переменные из формы в PHP- скрипт) (http://forum.oszone.net/showthread.php?t=146184)

Kirander 25-07-2009 13:29 1177325

Проблема с PHP(не передаются переменные из формы в PHP- скрипт)
 
Подскажите пож-та в чем проблема:

Поставил себе Апач 2.2, PHP5, MySql итд и столкнулся с такой проблемой: форма, находящаяся в HTML- файле не передает значения переменных в пхп скрипт, находящийся в отдельном файле. Приведу пример на основе исходника калькулятора, выложенного в этой теме . Так вот результатом сего у меня выдает:

"Первое число = Второе число = Действие = Результат:"

То есть ни одна переменная не была проинициализированна. Пробовал создавать форму, в которой бы только создавалась и инициализировалась бы переменная и передавалась бы в пхп скрипт, который выводил ее на экран - как результат - чистый экран.. Сразу скажу что сменил несколько сборок и php и апача - результат один и тот же...

Coutty 25-07-2009 14:24 1177359

В той теме куча разных скриптов - неизвестно, что вы используете.

Попробуйте выполнить такой скрипт (неважно, как вы его назовёте):
PHP код:

<form action="?kyu=10" method="post">
<input type="text" name="nya" />
<input type="submit" value="Отправить" />
</form>
<?php
echo "Результат работы скрипта: <br />";
echo 
"Переменная <b>nya</b> = " $_POST['nya'] . "<br />Переменная <b>kyu</b> = " $_GET['kyu'] . "<br />";
?>


Kirander 25-07-2009 21:04 1177583

Результат работы скрипта:
Переменная nya = 322
Переменная kyu =

EGORR_TOO 25-07-2009 21:06 1177586

Лучше передавать не POST, а GET. Сразу видно что передается. Потом на POST снова поменяешь. Это кстати...
Если не предаются переменные - это в 95% случаев косяк с путями.
Смотри errorlog Апача.
Установи HttpFox.
Надеюсь в приведенной цитате все только для простоты: и кирилица и неверный формат строки...

Kirander 26-07-2009 00:26 1177703

что то я не вьехал:) ну вот допустим скрипт проверки соединения с мускулем:
PHP код:

<?php 
   $link 
mysql_connect("localhost""root""pass")  or die("Не могу подключиться");  
   print (
"Соединение выполнено");  
   
mysql_close($link); 
?>

результат - пустая страница, хотя по идее должен вывеси 1 из двух вариантов...

EGORR_TOO 26-07-2009 00:44 1177711

А что ты здесь проверяешь?
Функция mysql_connect() возвращает указатель на соединение с скульским сервантом, если таковое удалось, либо false, если возникла ошибка.
Правильней писать

PHP код:

$link mysql_connect("localhost""root""pass")  or die("Не могу подключиться! И вот почему:".mysql_error());   
if(!
$link) echo "Какая-то фигня с соединением...";
echo 
"Всё молотит как надо!"

И не закрывай соединение прежде, чем ты обратишься к базе данных с запросом.

Kirander 26-07-2009 01:01 1177725

все- проблему решил был небольшой конфликт прог, вот и выдавало сбой.. всем спасибо)

bFree 26-07-2009 12:47 1177945

EGORR_TOO, чушь написали

EGORR_TOO 26-07-2009 18:47 1178241

Цитата:

Цитата bFree
EGORR_TOO, чушь написали »

Почему? Высказывайтесь яснее.

bFree 26-07-2009 21:32 1178384

EGORR_TOO, если mysql_connect вернет false, то сработает die. Незачем потом проверять if(!$link)

EGORR_TOO 26-07-2009 23:13 1178467

Согласен. Я хотел применение mysql_error() посоветовать...
Строка
PHP код:

if(!$link) echo "Какая-то фигня с соединением..."

действительно лишняя потому как die завершит все это безобразие...

Guffer 02-08-2009 11:04 1183464

Всем привет. у меня возникла проблема с передачей данных из формы в переменные, а затем из переменных в базу данных. если форме указать метод get то видно что данные заносятся в переменные, но в базе ничего не происходит. Если ф переменную записать данные ручками (например: $N_POLL="какойнить бред") то запись запишется в базу как положено. В чем может быть дело???? код прилагаю.
PHP код:

<html>
<body>
<?php

$db 
mysql_connect("localhost""root");
mysql_select_db("golosovalka",$db);
if (
$submit) {
// Если такого нет то добавить если есть то редактировать
if ($K_POLL) {
$sql "UPDATE b_poll SET N_POLL='$N_POLL',TM_BEGIN='$TM_BEGIN',F_LOGGING='$F_LOGGING',TM_END='$TM_END',F_ENG''$F_ENG',F_MULTI''$F_MULTI') WHERE K_POLL=$K_POLL";
} else {
$sql "INSERT INTO b_poll (N_POLL,TM_BEGIN,F_LOGGING,TM_END,F_ENG,F_MULTI) VALUES ('$N_POLL','$TM_BEGIN','$F_LOGGING','$TM_END','$F_ENG','$F_MULTI')";
}
// применить запрос к базе
$result mysql_query($sql);
echo 
"Запись изменена";
} elseif (
$delete) {
// Удаление записи
$sql "DELETE FROM b_poll WHERE K_POLL=$K_POLL";
$result mysql_query($sql);
echo 
"$sql Запись удалена";
} else {
// Если мы не нажимали кнопку
if (!$K_POLL) {
// Вывести список
$result mysql_query("SELECT * FROM b_poll",$db);
?>
<div style="overflow:scroll; height: 200px; border: 1px solid #000000"><table><tr><td>
<?php
while ($myrow mysql_fetch_array($result)) {
printf("<a href=\"%s?K_POLL=%s\">%s %s</a> \n"$PHP_SELF$myrow["K_POLL"], $myrow["N_POLL"], $myrow["TM_BEGIN"]);
?>
</td><td>
<?php
printf
("<a href=\"%s?K_POLL=%s&delete=yes\">(DELETE)</a><br>"$PHP_SELF$myrow["K_POLL"]);
?>
</td></tr><tr><td>
<?php
}
?>
</td></tr></table></div>
<?php
}
?>
<P>
<INPUT TYPE="button" VALUE="Добавить запись" ONCLICK="<?php echo $PHP_SELF?>">
</P>
<form method="post" action="<?php echo $PHP_SELF?>">
<?php
if ($K_POLL)
{
// editing so select a record
$sql "SELECT * FROM b_poll WHERE K_POLL=$K_POLL";
$result mysql_query($sql);
$myrow mysql_fetch_array($result);
$K_POLL $myrow["K_POLL"];
$N_POLL $myrow["N_POLL"];
$F_LOGGING $myrow["F_LOGGING"];
$F_MULTI $myrow["F_MULTI"];
$F_ENG $myrow["F_ENG"];
$TM_BEGIN $myrow["TM_BEGIN"];
$TM_END $myrow["TM_END"];
// Записать данные записи для редактирования
?>
<input type=hidden name="K_POLL" value="<?php echo $K_POLL ?>">
<?php
}
?>
Введите название голосования: <input type="Text" name="N_POLL"><br/>
Логировать? <INPUT TYPE="checkbox" NAME="F_LOGGING"><br/>
Возможно несколько ответов? <INPUT TYPE="checkbox" NAME="F_MULTI"><br/>
Англоязычное голосование? <INPUT TYPE="checkbox" NAME="F_ENG"><br/>
Время начала: <INPUT TYPE="text" NAME="TM_BEGIN" value="" >   Время окончания: <INPUT TYPE="text" NAME="TM_END"><br/>
<br/>
Варианты ответов: <br/>
<INPUT TYPE="text" NAME="ans_1"><br/><br/>
<INPUT TYPE="text" NAME="ans_2"><br/><br/>
<INPUT TYPE="text" NAME="ans_3"><br/><br/>
<INPUT TYPE="text" NAME="ans_4"><br/><br/>
<INPUT TYPE="text" NAME="ans_5"><br/><br/>
<INPUT TYPE="text" NAME="ans_6"><br/><br/>
<INPUT TYPE="text" NAME="ans_7"><br/><br/>
<INPUT TYPE="text" NAME="ans_8"><br/><br/>
<INPUT TYPE="text" NAME="ans_9"><br/><br/>
<INPUT TYPE="text" NAME="ans_10"><br/><br/>
<br/>
<input type="Submit" name="submit" value="Создать голосование"> <INPUT TYPE="reset" value="Сброс">
</form>
<?php
}
?>
</body>
</html>


EGORR_TOO 02-08-2009 12:40 1183529

Используй $_POST
PHP код:

if(isset($_POST['submit']))
{
    
$N_POLL              $_POST['N_POLL'];
    
$F_LOGGING         $_POST['F_LOGGING'];
    
$F_MULTI            $_POST['F_MULTI'];



Guffer 02-08-2009 13:12 1183546

Цитата:

Цитата EGORR_TOO
Используй $_POST »

уже пробовал, не помогает.

Sham 02-08-2009 18:31 1183703

Цитата:

Цитата Guffer
UPDATE b_poll SET N_POLL='$N_POLL',TM_BEGIN='$TM_BEGIN',F_LOGGING='$F_LOGGING',TM_END='$TM_END',F_ENG''$F_ENG',F_MULTI ''$F_MULTI') WHERE K_POLL=$K_POLL »

кое где пропущен знак "="
Цитата:

Цитата Guffer
<INPUT*TYPE="button"*VALUE="Добавить*запись"*ONCLICK="<?php*echo*$PHP_SELF?>"> »

вот это непонятно что такое
Цитата:

Цитата Guffer
if*($submit)*{//*Если*такого*нет*то*добавить*если*есть*то*редактироватьif*($K_POLL)*{ »

непонятно, откуда переменные берутся...

!все строковые переменные перед вставкой в запрос обязательно должны быть обработаны mysql_real_escape_string (кроме редких случаев, нпр полнотекстового поиска)...

Guffer 02-08-2009 20:44 1183802

Sham, можешь пояснить
Цитата:

Цитата Sham
!все строковые переменные перед вставкой в запрос обязательно должны быть обработаны mysql_real_escape_string »

когда я пытался ее вставить получил вот что:
Код:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in Z:\home\localhost\www\index.php on line 6

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in Z:\home\localhost\www\index.php on line 6

а переменные берется из формы (например: name="N_POLL")

EGORR_TOO 02-08-2009 21:02 1183811

Guffer, ты mysql_real_escape_string() не в MySql запрос ли поставил?

Guffer 02-08-2009 21:16 1183822

EGORR_TOO, нет конечно. в самом начале php кода.

Sham 02-08-2009 21:29 1183827

Цитата:

Цитата Guffer
нет конечно. в самом начале php кода. »

эта функция должна использоваться после коннекта с базой (тк юзает его в параметре)... rtm

Guffer 03-08-2009 00:10 1183917

Sham, поставил после коннекта, ошибок не выдает. но данные по прежнему не вносит. на сколько я понял переменную $submit оно тоже не понимает. т.е name="N_POLL" не соответствует $N_POLL. как это можно поправить???

Sham 03-08-2009 00:54 1183938

EGORR_TOO в третьем посте написал... или см. директиву php.ini register_globals

EGORR_TOO 03-08-2009 01:11 1183945

Guffer, я только что скопировал твой код и проверил что передается в $_POST
PHP код:

if(isset($_POST['submit']))
{
    echo 
"<pre>";
    
print_r($_POST);
    echo 
"</pre>";


Получил нормальный ответ:
PHP код:

Array
(
    [
N_POLL] => Введите название голосования
    
[F_LOGGING] => on
    
[F_MULTI] => on
    
[F_ENG] => on
    
[TM_BEGIN] => Время начала
    
[TM_END] => Время окончания
    
[ans_1] => Варианты ответов
    
[ans_2] => Варианты ответов
    
[ans_3] => Варианты ответов
    
[ans_4] => Варианты ответов
    
[ans_5] => Варианты ответов
    
[ans_6] => Варианты ответов
    
[ans_7] => Варианты ответов
    
[ans_8] => Варианты ответов
    
[ans_9] => Варианты ответов
    
[ans_10] => Варианты ответов
    
[submit] => Создать голосование


Постом отправил - из поста и бери. На register_globals плюнь.
А почему у тебя весь код вперемешку? И переменные как константы записаны... Неудобно же...


Время: 07:01.

Время: 07:01.
© OSzone.net 2001-