PHP Вставка в базу данных не работает - PullRequest
3 голосов
/ 20 января 2010

Привет Я сделал следующий скрипт php, чтобы я мог редактировать текст, и он сохранится в БД для дальнейшего использованияТем не менее, я слегка затрудняюсь с запросами на обновление / вставку.Я не уверен, что я делаю неправильно, но только одна из команд будет выполнена.Я не уверен, является ли это проблемой хостинга, или я делаю что-то не так.

Есть идеи?

if (isset($_SESSION["logged"]) && $_SESSION["logged"]==1){  
    if ($_POST['action']=="edit"){
        $query=mysql_query("select * from page where active=1 AND heading='".$_POST['selectedpage']."'");
        $row = mysql_fetch_array($query, MYSQL_ASSOC);

        echo "<h1>HTML Editor </h1><br>";
        echo "<form name='saveform' action='./action.php'  method='post'>";
        echo "<textarea rows='100' cols='100' name='updateBox'>".$row['content']."</textarea>";
        echo "<br><input name='action' type='submit' value='save edit'>";
        echo "<input name='heading' type='hidden' value='".$row['heading']."'>";
        echo "</form>";
    } else if($_POST['action']=="save edit"){
        $query=mysql_query("UPDATE page SET active='0' where heading='".$_POST['heading']."'");
        $query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."','1')");
        echo "<p>Changes saved succesfully!</p>";
        echo "$_POST['updateBox']";
    }
}

Ответы [ 4 ]

6 голосов
/ 20 января 2010

Если вы будете звонить echo mysql_error($query) после каждого запускаемого запроса, вы сможете увидеть, есть ли ошибка в этом запросе. Может быть проблема с содержимым вашего запроса.

Вы не выполняете никакой дезинфекции для SQL-инъекций, поэтому, если в вашем контенте есть кавычка, ваш запрос будет нарушен. Это довольно опасно (ваши запросы уязвимы для SQL-инъекций из пользовательского ввода), и вам следует рассмотреть возможность использования mysql_real_escape_string для всех переменных вашего запроса или переключение на PDO или Драйверы MySQLi . Эти драйверы поддерживают привязку запросов, что является отличным способом предотвращения внедрения SQL.

Редактировать для редакции:)

Кроме того, как правило, довольно просто придумать быструю оболочку базы данных или обработчик функций, чтобы автоматически обрабатывать подобные ошибки. Я использую обертку на основе классов, но если вы не хотите заходить так далеко сейчас, вы можете сделать что-то вроде этого:

//very quick-and-dirty
function queryOrDie($query)
{
    $query = mysql_query($query);
    if (! $query) exit(mysql_error());
    return $query;
}

Вы можете просто пропустить все ваши запросы и вам будет проще отладить их. Существует также множество классов-оболочек для баз данных, и я настоятельно рекомендую вам поболтать. Они делают жизнь намного проще. :)

3 голосов
/ 20 января 2010

В чем ошибка?

В начале скрипта добавьте этот PHP:

ini_set('display_errors', 'On');
error_reporting(E_ALL);

Также попробуйте это:

$query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."',1)");

Также :) использование данных из POST непосредственно в запросе вставки представляет собой угрозу безопасности: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

0 голосов
/ 14 сентября 2013

У меня также не работал запрос PHP (INSERT INTO): мой исходный запрос был:

mysql_query("INSERT INTO `videousers` (`user_id`,`user_name`,`user_password`,`contact_person`,`organisation`,`contact_tel`,`email`) VALUES ('','{$user}','{$pass}','{$cperson}','{$organ}','{$cphone}','{$email}'");

он не работал, поэтому я перешел на следующий запрос:

mysql_query("INSERT videousers SET user_name='$user',user_password='$pass', contact_person='$cperson', organisation='$organ', contact_tel='cphone', email='$email'");

и это сработало.Я не знаю почему, но так как это работает, я использую это, чтобы закончить свою работу.

0 голосов
/ 20 января 2010

Убедитесь, что heading не определен как ключ или уникален. Это может вызвать проблемы в вашем контексте.

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