Переменные сообщения не отправляются - PullRequest
2 голосов
/ 11 декабря 2011

Это действительно беспокоит меня, и я не могу понять это. У меня есть форма с несколькими вариантами отправки по почте:

<form method="POST" action="scripts/submit.php"><strong>
    To User: <input type="text" name="ID" size="21" /><br />
    Short Description: <input type="text" name="Item" size="21" /><br />
    Link: <input type="text" name="Link" size="21" /><br />
    Points: <select name="Points">
    <option value="1" selected="selected">1</option>
    <option value="0">0</option><option value="-1">-1</option>
    </select> (1 = Positive, 0 = Neutral, -1 = Negative)<br />
    Text: <br /><textarea name="Text" rows="5" cols="50"/></textarea></strong><br />
    <input type="submit" value="Send" />
</form>

А вот та часть файла submit.php, которая доставляет мне неприятности:

<?php
include('functions.php');
Connect();

if(!isset($_SESSION)) 
{ 
session_start(); 
} 
$id_from = $_SESSION['SESS_MEMBER_ID'];
$id_to = Sanitize($_POST['ID']);
$item = Sanitize($_POST['Item']);
$link = Sanitize($_POST['Link']);
$points= Sanitize($_POST['points']);
$text = Sanitize($_POST['Text']);

Кто-нибудь видит здесь проблему? Я получаю неопределенные индексы от всех переменных, кроме одной сессии.

Заранее спасибо.

edit: Если у меня просто есть это:

<?php
include('functions.php');
Connect();
if(!isset($_SESSION)) 
{ 
session_start(); 
} 

$id_from = $_SESSION['SESS_MEMBER_ID'];
$id_to = Sanitize($_POST['ID']);
$item = Sanitize($_POST['Item']);
$link = Sanitize($_POST['Link']);
$points = Sanitize($_POST['points']);
$text = Sanitize($_POST['Text']);

?>

Переменные заполняются просто отлично. Если я добавлю:

 $id_query=mysql_query("SELECT ID FROM tbl_users WHERE Username = '$id_to'");

 $count=mysql_num_rows($id_query);

 $id_row=mysql_fetch_array($id_query);
 $id_to=$id_row['ID'];

 if ($points> 1 || $points< -1) {
     echo "Nice try";
     exit();
 } else {

 if(!($id_to == $id_from))
 {
 if($count==1)
 {
 mysql_query("INSERT INTO tbl_data (Item, Link, Points, Text, ID_To, ID_From) VALUES ('$item', '$link', '$points', '$text', '$id_to','$id_from')");
 header('Location:?id=submit');
 }
 else
 {
 echo "Nice try1";
 }
 }
 else
 {
 echo "Nice try2";
 }
 }

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

на основании вашего комментария у вас есть этот код:

$id_query = mysql_query("SELECT ID FROM tbl_users WHERE Username = '$id_to'");
$count = mysql_num_rows($id_query);
$id_row = mysql_fetch_array($id_query);
$id_to = $id_row['ID'];
if ($points > 1 || $points < -1) {

} else {
    if (! ($id_to == $id_from)) {
        if ($count == 1) {
            mysql_query("INSERT INTO tbl_data (Item, Link) VALUES ('$item', '$link')");
            header('Location:?id=submit');
        } else {}
    } else {}
}

Я думаю, что проблема в строке, которая говорит:

header('Location:?id=submit');

Возможно, вы тестируете что-то, что каким-то образом делает $points больше 1 или меньше -1, $count равно 1, а $id_to отличается от $id_from, что затем делает else выполненный блок и (особенно строка) header() выполненный, и пользователь получит редирект немедленно.

Чтобы проверить, правда ли это, попробуйте var_dump($_GET), чтобы увидеть, есть ли у вас что-то вроде:

array (size=1)
  'id' => string 'submit' (length=6)

Если вы это сделаете, и, возможно, база данных не будет обновлена, то это mysql_query, который находится непосредственно перед заголовком, который вам нужно проверить.

Надеюсь, это поможет.

1 голос
/ 11 декабря 2011

Я только что взял ваш код на моем сервере разработки и попытался запустить его. Так как я не знаю, что делает ваш Sanitize (), я не могу быть уверен, что происходит внутри этой функции.

Если вы попытаетесь удалить Sanitize (), я почти уверен, что это сработает, и вам придется заглянуть внутрь, чтобы найти ошибку.

Я предполагаю, что вы можете пропустить что-то вроде ($ var, str) для очистки строки. Не могли бы вы рассказать немного подробнее об этой функции?

edit: некоторые незначительные орфографические ошибки.

Редактировать: Сделал еще один тест и сделал ошибку, и два кода показывают это. Первый работает, а второй дает мне пустую переменную var_dump.

Этот дает мне полный var_dump ();

<?
function Sanitize($String) { 
$output = mysql_real_escape_string(stripslashes($String));
return $output;
}
if(!isset($_SESSION)) 
{ 
session_start(); 
} 
?>
<form method="post" action=""><strong>
To User: <input type="text" name="ID" size="21" /><br />
Short Description: <input type="text" name="Item" size="21" /><br />
Link: <input type="text" name="Link" size="21" /><br />
Points: <select name="Points"><option value="1" selected="selected">1</option><option value="0">0</option><option value="-1">-1</option></select> (1 = Positive, 0 = Neutral, -1 = Negative)<br />
Text: <br /><textarea name="Text" rows="5" cols="50"/></textarea></strong><br />
<input type="submit" value="Send" />
</form>

<?

$id_from = $_SESSION['SESS_MEMBER_ID'];
$id_to = Sanitize($_POST['ID']);
$item = Sanitize($_POST['Item']);
$link = Sanitize($_POST['Link']);
$points= Sanitize($_POST['points']);
$text = Sanitize($_POST['Text']);


var_dump($_POST);

echo $text;

?>

Этот дает мне пустую переменную var_dump

<?
if(!isset($_SESSION)) 
{ 
session_start(); 
} 
?>
<form method="post" action=""><strong>
To User: <input type="text" name="ID" size="21" /><br />
Short Description: <input type="text" name="Item" size="21" /><br />
Link: <input type="text" name="Link" size="21" /><br />
Points: <select name="Points"><option value="1" selected="selected">1</option><option value="0">0</option><option value="-1">-1</option></select> (1 = Positive, 0 = Neutral, -1 = Negative)<br />
Text: <br /><textarea name="Text" rows="5" cols="50"/></textarea></strong><br />
<input type="submit" value="Send" />
</form>

<?

$id_from = $_SESSION['SESS_MEMBER_ID'];
$id_to = Sanitize($_POST['ID']);
$item = Sanitize($_POST['Item']);
$link = Sanitize($_POST['Link']);
$points= Sanitize($_POST['points']);
$text = Sanitize($_POST['Text']);


var_dump($_POST);

echo $text;

?>
...