2012-03-27 5 views
1

Я немного новичок в работе с JS и PHP и наткнулся на небольшую проблему. Я пытаюсь передать идентификатор текстового поля, который я нажал на PHP, и затем запросить базу данных с этим идентификатором. Я попытался следующий код, чтобы проверить, если переменная получает передается, но ничего не насторожило:Передача переменной на PHP через javascript

<script type="text/javascript"> 
function Like(ID) 
{ 
<?php 

$id = ID; 
print "alert('$id');"; 

?> 
} 
</script> 

<input type="text" id="1" onclick="Like(this.id)" > 

То, что я пытаюсь выполнить:

У меня есть база данных видео с уникальным идентификатором , У меня есть 2 кнопки рядом с каждым видео для симпатии или неприязни. 2 кнопки будут иметь идентификатор на основе идентификатора видео. Например, видео номер 2 имеет 2 кнопки: например (id = L2) и не нравится (id = D2). Когда пользователь нажимает одну из этих кнопок, я хочу обновить столбец «понравится» таблицы без перезагрузки страницы. Это возможно?

+2

http://tinsology.net/2009/06/client-side-vs-server-side-code/ – Paulpro

+0

http://www.tizag.com/ajaxTutorial/ajax-mysql-database.php – Paulpro

+2

Я не собираюсь пытаться ответить на это сам, и, несомненно, кто-то сможет указать вам на хорошие ресурсы, которые показывают вам, как добиться того, чего вы хотите (ajax и получить запросы), но я бы посоветовал вам прочитать основную теорию php (серверный язык, который «подготавливает» ваш код) и javascript (который работает в браузере). –

ответ

2

Вы не сможете сделать это так, как вы его написали. PHP работает один раз на странице груз. Таким образом, при нажатии кнопки ввода, ваша функция уже будет оцениваться по PHP, как это:

<script type="text/javascript"> 
function Like(ID) 
{ 
alert('ID'); 
} 
</script> 

ID является bareword на PHP, поэтому он рассматривает его как константу, если определено, или строка (и может сгенерировать предупреждение). Предполагая, что у вас нет участника ID, он печатает строку alert со строкой "ID" в переменной $id.

К тому времени, когда ваш javascript называется, все, что вы когда-либо получите, это alert('ID').

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

+0

+1 Несмотря на то, что он сначала обрабатывает идентификатор как константу, если нет константы, он будет рассматривать его как строку и может также выводить предупреждение. – Paulpro

+0

Ну, у меня есть база данных видео с уникальным идентификатором. У меня есть 2 кнопки рядом с каждым видео для симпатии или неприязни. 2 кнопки будут иметь идентификатор на основе идентификатора видео. Например, видео номер 2 имеет 2 кнопки: например (id = L2) и не нравится (id = D2). Когда пользователь нажимает одну из этих кнопок, я хочу обновить столбец «понравится» таблицы без перезагрузки страницы. Это возможно? – Glenn

+0

Спасибо, Пол. Я больше знаком с тем, как Perl обрабатывает простые слова, и это зависит от настроек скрипта. Я не был уверен, что php был схожим в этом отношении. Хорошо знать. –

1

Поскольку вы спрашивали об этом в комментарии:

Ну, у меня есть база данных видео с уникальным идентификатором. У меня есть 2 кнопки рядом с каждым видео для симпатии или неприязни. 2 кнопки будут иметь идентификатор на основе идентификатора видео. Например, видео номер 2 имеет 2 кнопки: например (id = L2) и не нравится (id = D2). Когда пользователь нажимает одну из этих кнопок, я хочу обновить столбец «понравится» таблицы без перезагрузки страницы. Это возможно?

Я расскажу вам, как достичь этого, и даже не требует Javascript! :) (по крайней мере сначала).

Это старомодный элемент HTML-формы. Поскольку вы будете размещать данные, вы должны использовать сообщение о действии. Код может выглядеть следующим образом:

<form method="post" action="/requests/like-video/" class="like-video"> 
    <div> 
     <input type="hidden" name="video_id" value="<?php echo $video->id ?>"> 
     <input type="submit" value="Like"> 
    </div> 
</form> 

<form method="post" action="/requests/dislike-video/" class="dislike-video"> 
    <div> 
     <input type="hidden" name="video_id" value="<?php echo $video->id ?>"> 
     <input type="submit" value="Dislike"> 
    </div> 
</form> 

После того как вы, что на месте (и работает), это только вопрос hijaxing этих форм. Супер легкий способ сделать это состоит в использовании формы плагин JQuery и просто запустите:

$('form.like-video').ajaxForm(OPTIONS_GO_HERE); 
$('form.dislike-video').ajaxForm(OPTIONS_GO_HERE); 

Делая это таким образом обеспечивает пользователям без JS также получить полностью функциональный сайт.

Это называется прогрессивным улучшением.

+0

Так это остановит страницу от перезагрузки? – Glenn

+0

Без JS (и ajax) невозможно отправить данные на сервер без обновления страницы, вот для чего нужны последние две строки кода jQuery. Приятная вещь в том, чтобы сделать это таким образом, что он работает независимо от того, имеет ли пользователь JS или нет, и вам не нужно изобретать свой собственный метод для представления данных, а вместо этого использовать то, что работало годами (простой HTML

) – powerbuoy

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