2016-07-30 5 views
0

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

$prevUrl; 
$newUrl; 

if ((isset($_POST["url"])) 
{ 
    $newUrl = $_POST["url"]; 

if ($prevUrl == "") 
{ 
    $db->query("INSERT INTO Articles (`url`) VALUES ('$newUrl')"); 
    $prevUrl = $newUrl; 
} 

else 
{ 
    $db->query("UPDATE Articles SET url = '$newUrl' WHERE url = '$prevUrl'"); 
    $prevUrl = $newUrl; 
} 
} 

Как я могу сделать это так, что, когда запись обновляется, он обновляется на основе того, что было в предыдущем URL?

Что не так: когда я вернусь, чтобы обновить URL-адрес, URL-адрес не обновляется с новым. Предложение WHERE не выполняется успешно. Как будто переменная $ prevUrl пуста. Я полагаю, что, поскольку PHP является серверной, любые переменные отображаются при обновлении страницы, это переменные, и они не могут измениться. Поскольку $ prevUrl сначала пуст, оператор WHERE, вероятно, делает что-то вроде этого WHERE url = "". Я не уверен, что все. Не было ошибки исключения или какой-либо фатальной ошибки.

+0

Можете ли вы рассказать о том, как ваш код «не работает»? Что вы ожидали, и что на самом деле произошло? Если вы получили исключение/ошибку, опубликуйте строку, в которой она произошла, и сведения об исключении/ошибке. Пожалуйста, отредактируйте эти данные или мы не сможем помочь. – FrankerZ

+0

@FrankerZ Я только что обновил вопрос с этими деталями – user2896120

+0

Я вижу тонны опечаток: 'es (\' url) '(Missing a \'). '$ db-query (" UPDATE Articles' (Отсутствует '' 'перед запросом.Как этот код работает вообще? См. [this] (http://stackoverflow.com/questions/845021/how-to-get- полезный-error-messages-in-php), а также включить «error_reporting» и отправить обратно с фактическими ошибками. – FrankerZ

ответ

0

Я не знаю, если бы я дал вам полное право, но то, что я думаю, что вы пытаетесь сделать, невозможно. Запрос Ajax - это не что иное, как выполнение некоторого кода на сервере и отправка результата обратно без перезагрузки. После отправки результатов на сервере не осталось доступных переменных, кроме $ _SESSION.

Ваша переменная $ prevurl не может быть чем-то еще, кроме «null», потому что в начале вашего кода вы объявляете это так.

В вашем случае есть две возможности, чтобы решить это. Либо вы пишете URL в переменной $ _SESSION:

session_start(); 
$_SESSION['url']= $newurl; 

и Асесс его, как это снова.

Или вы изменяете таблицу «Статьи», чтобы вы могли лучше проверить, есть ли уже «url'-entry», и поэтому вам нужно ОБНОВИТЬ, а не INSERT.

EDIT:

указать мое первое предложение:

переменная $ _SESSION может быть очень много изменилось с помощью AJAX. Если вы хотите использовать только ajax для передачи данных с пользователей, это возможно, но вы просто не можете работать с <form> -элементами. Вы должны работать с JavaScript:

<!-- HTML --> 
<input id='newurl' /> 
<input type='button' value='next' onclick='submitURL(document.getElementById("newurl").value)' /> 

// JAVASCRPT 
function submitURL(newurl){ 
    var xhttp; 
    if (window.XMLHttpRequest) { 
     xhttp = new XMLHttpRequest(); 
     } else { 
     // code for IE6, IE5 
     xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xhttp.open("GET", /*include url_submit.php?data=newurl*/, true); 
    xhttp.send(); 

    xhttp.onreadystatechange = function(){ 
     if(xhttp.readyState==4&&xhttp.status == 200){ 
      //change Pagecontent to next page 
     } 
    }; 
} 

# PHP (url_sumbit.php) 
<?php 
if(!isset($_SESSION['url']){ 
    session_start(); 
} 
$_SESSION['url']=$_GET['data']; 
?> 

Когда все пользовательские данные передаются, .php-файл включается, что создает записи в базе данных.

указать второе предложение:

в .php-файл, вместо сохранения пользовательских данных в $ _SESSION, оно немедленно записывается в DataTable. Промлем - это то, что вы не знаете, нужно ли обновлять или вставлять (если URL был отправлен до или без). Поэтому вам нужно проверить вручную, если есть запись, если да, обновите ее, если нет вставки нового.

Должен сказать, что оба пути очень уродливые. Было бы намного проще, когда все данные будут представлены сразу после завершения. Например, если вы настаиваете на перезагрузке, напишите некоторый javascript, который не отправляется при нажатии кнопки «Далее», но заменяет старый файл и сохраняет «представленные» данные в скрытом <input>. В конце все отправлено правильно и добавлено в базу данных.

+0

Ну сначала не будет записи URL-адреса, потому что пользователь сделает это самостоятельно. Они перейдут на страницу без обновления и введите URL-адрес, который они хотят, и нажмите «Отправить», при первой отправке он создаст новую запись. Они переходят к следующей странице (имейте в виду, что это одна страница, но она никогда не обновляется). Предположим, они решили изменить свой URL, чтобы они вернулись. Они меняют URL-адрес, и их URL-адрес должен меняться в зависимости от их предыдущего предыдущего URL-адреса. SESSION PHP-переменные являются статическими и не меняются, если страница не обновляется. – user2896120