2010-01-19 4 views
2

Приветствия Я сделал следующий скрипт php, чтобы я мог редактировать текст, и он сохранил бы в db для будущего использования. Однако я немного затрудняюсь при обновлении/вставке запросов. Я не уверен, что я делаю неправильно, но только одна из команд будет выполнена. Я не уверен, что это проблема хостинга, или я делаю что-то неправильно.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'] 
} 
+0

У вас есть некоторые синтаксические ошибки на последних двух строках. – JAL

+0

Я устал видеть эти типы вопросов на SO. Это заставляет сообщество PHP выглядеть плохо.Создайте собственную среду разработки с помощью Wampserver или XAMMP и протестируйте код! – Yada

+1

Какая из команд работает, а какая нет? Кроме того, у вас есть некоторые серьезные недостатки SQL-инъекций. Никогда не вставляйте данные прямо из введенного пользователем ввода (POST, GET, COOKIE и т. Д.), Не используя сначала mysql_real_escape_string или используя подготовленный оператор. – JAL

ответ

6

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

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

РЕДАКТИР editorialism :)

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

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

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

3

Какая ошибка?

В начале скрипта добавьте 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

+1

Функции и настройки отчетов об ошибках PHP не влияют на ошибки базы данных, которые сообщаются через определенные функции в модуле MySQL (et al.). – zombat

0

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

0

(Меня зовут Том Ly)

Я также имел (INSERT INTO) запрос PHP не работает: мой первоначальный запрос был:

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

Вы могли видеть, что проблема с первым утверждением была, если вы посмотрели на mysql_error. В своем втором заявлении вы не пытаетесь добавить что-либо в user_id - я подозреваю, что это проблема. – andrewsi

Смежные вопросы