Запрос PHP / MySQL игнорируется, если 'action' установлен в форме - PullRequest
0 голосов
/ 12 февраля 2011

У меня в основном есть:

<form action="index.php" method="post">
    <input name="text" type="text" value="Insert text here" size="20"/>
    <input name="submit" type="submit" value="Submit" />
</form>

Мой PHP-код затем проверяет, нажата ли кнопка submit:

if(isset($_POST['submit'])) {
    $newDbValue = $_POST['text'];
    $sql = ("
        UPDATE `pseudo_tableName` 
        SET TEXT = '".$newDbValue."' 
        WHERE name = 'pseudo_fieldName' LIMIT 1
    ");
    //SQL-query run by php function in separate class.
}

И, насколько я понимаю, если данные формы отправляются, он отправляетпользователь вернулся к index.php ?

Но что я могу сделать, так это то, что не может обновиться с новыми значениями и отправляет меня обратно в index.php, как будто ничего не былонеправильно!

Если я оставляю action="<?php $PHP_SELF; ?>" или action="" в форме, обновляется, когда я перезагружаю страницу (не F5 - щелкните в адресной строке и нажмите ввод).

То, что я хочу, чтобы это было: Я нажимаю Отправить, и он обновляет БД, отправляет меня на index.php.

Как это можнобыть достигнутым?

Ответы [ 3 ]

3 голосов
/ 12 февраля 2011

Удалите action="" (чтобы вы перезагрузили страницу и использовали тот же файл, который у вас есть if в) в вашей форме и измените if на следующее:

if(isset($_POST['submit'])) {
    $newDbValue = $_POST['text'];
    $sql = ("
            UPDATE `pseudo_tableName` 
            SET TEXT = '".$newDbValue."' 
            WHERE name = 'pseudo_fieldName' LIMIT 1
    ");
    header("Location: index.php");
    exit;
}
1 голос
/ 12 февраля 2011

Все элементы <form> требуют атрибута action. То, что вы описываете, вероятно, означает, что ваш PHP-скрипт не обнаруживает данные формы и, следовательно, не вносит необходимые изменения в базу данных MySQL. Причины этого могут зависеть от используемого вами браузера; Насколько я понимаю, если вы нажмете Enter (клавиатура), кнопка отправки value не будет включена в форму (говорят, что она позволяет нескольким кнопкам отправки с различным значением и выполнять правильную функцию).

На вашем месте я бы проверил фактический ввод текста в форме, а не кнопку.

<?php
// check 'text' exists and make sure it isn't blank.
if(isset($_POST['text']) && $_POST['text']!='') {
  // do MySQL updating here.
  header("Location: index.php"); // send back to index.php after updating.
}
?>

Поскольку наиболее эффективный метод для перенаправления - это использование header();, вам необходимо написать свой скрипт проверки формы PHP до формы HTML (поскольку заголовки нельзя отправить на полпути через фактический документ), поэтому, возможно, в верхней части страницы перед отправкой HTML, кроме того, таким образом вы можете контролировать, какой HTML отправляется на основе обработанных данных.

0 голосов
/ 12 февраля 2011

Вы пробовали установить:

<?php
    if (isset($_POST['text']) AND !empty($_POST['text'])) {
        // ...
    }
?>

Вместо другого входа?

action = 'index.php' отправит вас обратно в index.php, поэтому убедитесь, чтоваш PHP выше формы (и ваш HTML, в этом отношении).Я также догадываюсь, что вы настроили mysql_connect и ваши функции mysql_query.

У вас есть сообщение об ошибке в php.ini?Что говорит набор результатов запроса MySQL, когда вы используете var_dump () переменную?

<?php
    $sql = mysql_query($newDbValue));
    var_dump($sql);
?>

, которая действительно может вам помочь.поскольку у вас есть символы, отправленные в браузер до функции redirect () - ничто не может быть отправлено в браузер (даже пробел!), если вы собираетесь использовать это, поэтому убедитесь, что первым в документе является ваш тег?>и ваша кодировка файла - UTF-8, а не UTF-16 BOM или что-то в этом роде.

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