Одна страница сохранения PHP - PullRequest
0 голосов
/ 26 апреля 2011

Надеюсь, кто-нибудь может посоветовать?

У меня 3 .PHP-страницы пронумерованы

page1.php page2.php page3.php

На данный момент мне приходитсякод три сохраните страницы .PHP, как они называются:

save1.php save2.php save3.php

Мой текущий код, который сохраняется в базе данных MySQL:

$q1 = $_POST["q1"];
$q2 = $_POST["q2"];
$q3 = $_POST["q3"];
$q4 = $_POST["q4"];
$q5 = $_POST["q5"];
$q6 = $_POST["q6"];
$q7 = $_POST["q7"];
$q8 = $_POST["q8"];


$proc = mysqli_prepare($link, "INSERT INTO tresults_bh_main (respondent_id, ip, browser, q1, q2, q3, q4, q5, q6, q7, q8) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
mysqli_stmt_bind_param($proc, "issiiiiiiii", $respondent_id, $ip, $browser, $q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8);

Iвручную нужно изменить q1, q2, q3 и т. д., чтобы они соответствовали q на страницах 1, 2 и 3. Я хотел бы иметь одну страницу сохранения .PHP, которая может использоваться для всех моих страниц (имеет смысл?).

Что я не могу понять, так это как закодировать страницу сохранения .PHP, чтобы она вместо меня использовала переменные для жесткого кодирования.

У меня есть массив, в котором хранится следующая информация: $ qs ['questions'] - хранит, например, q1, q2, q3, q4 и т. Д.

Если кто-то может помочь, высоко ценится.

Гомер.

Ответы [ 4 ]

1 голос
/ 26 апреля 2011

Это не очень красиво, но следует делать то, что вы хотите, возможно, это то, что вы можете получить идеи.

$list_variable = '';
$list_values = '';
$str = 'iss';
$array_data = array();

if (isset($_POST)) {
    $array_data[] = &$respondent_id;
    $array_data[] = &$ip;
    $array_data[] = &$browser;

    foreach ($_POST as $k => $v) {
        if (!preg_match('/^q\d+$/', $k))
            continue;

        $str .= 'i';
        $list_variable .= ", $k";
        $list_values .= ", ?";
        $array_data[] = &$_POST[$k];
    }

    if ($list_variable != '') {
        array_unshift($array_data, $str);

        $proc = mysqli_prepare($link, "INSERT INTO tresults_bh_main (respondent_id, ip, browser $list_variable) VALUES (?, ?, ? $list_values);");
        call_user_func_array(array($proc, 'bind_param'), $array_data);
        //$proc->execute();
    }
}
0 голосов
/ 26 апреля 2011

Вместо того, чтобы взламывать ваши индексные ключи POST, вы можете использовать многомерные массивы в качестве переменных поста.

Так .....

<input type="text" name="question[page1][q1]" />

Читается через

$_POST['page1']['q1']

Это было бы проще, чем пытаться разделить ключи.

Если вам нужно знать, с какой страницы вы можете рисовать, вы можете проверить:

if (empty($_POST['page1']) {

0 голосов
/ 26 апреля 2011

Я не уверен, что понимаю ваш вопрос, но почему бы не начать с создания цикла?

function DoSomething($respondent_id, $ip, $browser, $count)
{
    settype($count, 'integer');
    if ($count < 1)
    {
        throw new Exception('The $count argument cannot be less than one.');
    }

    $queryVariables = '';
    $queryParams = array('issiiiiiiii', $respondent_id, $ip, $browser);

    $q = array();

    for ($i = 1; $i <= $count; $i++)
    {
        $q[$i] = $_POST['q' . $i];
        $queryVariables .= ', q' . $i;
        $queryParams[] = $q[$i];
    }

    $query = 'insert into tresults_bh_main (respondent_id, ip, browser' . $queryVariables . ') values (' . str_repeat('?, ', $count - 1) . '?);';

    $proc = mysqli_prepare($link, $query);
    execSQL($proc, $queryParams);
}

DoSomething($respondent_id, $ip, $browser, 8);

Где execSQL - это метод, взятый из примечания, внесенного пользователем документации PHP.

0 голосов
/ 26 апреля 2011

Я бы посоветовал вам сделать 'q' как часть формы как скрытую, чтобы вы могли собрать его на странице действий mysql и просто вставить.

подробный ответ:

используйте другой элемент, такой как

<input type='text' name='pageNumber' value='1'>  here value will be 1/2/3 depending on your page number. then create a single save.php page and there collect the variable using 

$ _ POST ['pageNumber'] ... надеюсь, теперь все ясно.Это как я понял твой вопрос.

...