LINUX.ORG.RU

Никогда не работала с Ajax. Изменение базы данных запросом со страницы.

 , , ,


0

2

Ни разу не работала, не сталкивалась с ajax, поэтому очень надеюсь на вашу помощь. Суть такая: Есть таблица в базе данных, в ней только три поля: id, Name, Rent. Поле Rent принимает только два значения: Yes/No. Это таблица выводится на странице. Поле Rent выводится как cheсkbox: если в бд значение «yes», то checked='checked', если в бд «No» - галочка не ставится. Не могу реализовать следующее: когда в таблице, которая выводится на странице, я снимаю галочку с чекбокса, если она там стоит, то в базе данных в при соответствующем id менялось значение поля Rent на No. И, естаственно, если в пустом чекбоксе (раз пусто, значит в бд rent=No) ставлю галочку, то Rent принимает значение Yes.

Код: <!DOCTYPE HTML><html><head><meta http-equiv=«Content-type» content = «text/html; charset=utf-8»><title>Spisok</title> </head><body>

<?php

$dbhost = «localhost»;$dbuser = «a»;$dbpassword = «q»;$dbname = «is»;

$link = mysql_connect($dbhost, $dbuser, $dbpassword);

mysql_select_db($dbname, $link);

$query = mysql_query(«SELECT * FROM `ps_map`»);

if($query == false) { die(«error»);}

echo «<table border='1' align='center' width=300><tr> <th>id</th><th>Name</th><th>Rent</th></tr>»;

while($row = mysql_fetch_array($query))

{ echo «<tr>

<td>{$row['0']}</td>

<td>{$row['1']}</td>

<td>

<input id='ch' name='box' type='checkbox'

value='Oplata'»;

if($row[2] == 'Yes'){

echo"checked='checked' onclick ='";

$sql=«UPDATE ps_map SET Rent = 'No' WHERE id='».$_POST['id'].«', Name='».$_POST['Name'].«' LIMIT 1 ;»;

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

echo «'>»;}

if($row[2] == 'No') {

echo «onclick ='»;

$sql=«UPDATE ps_map SET Rent = 'Yes' WHERE id='».$_POST['id'].«', Name='».$_POST['Name'].«' LIMIT 1 ;»;

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

echo «'>»;}

echo"{$row['2']}</td>

</tr>";

} ?> </body> </html>


У меня стойкое ощущение, что какая-то борда накрылась.

По теме: научись оформлять код, убери кавычки в условии, ну и да - настолько толсто, что уже тонко. Где ты проверяешь ... Блин оно вообще что по-твоему делает?

ziemin ★★
()
Ответ на: комментарий от ziemin

По коду только таблица выводится. Больше ничего.

Asol
() автор топика

Никогда так

WHERE id='».$_POST['id'].«'
не делайте.

Посмотрите в сторону jQuery.

hidden_4003
()

Хотел по делу отписаться. Увидел код. Открыл рот, закрыл. Сказать аж нечего.

В коде нет ajax'а. Либо я совсем ослеп. Предлагаю сначала узнать что это и зачем: http://ruseller.com/lessons.php?rub=32&id=1389 (ссылка взята из гугла)

coderage
()
Ответ на: комментарий от hidden_4003

Я школу закончил в 99. Мож чего изменилось с тех пор? Вроде в это ничего такого не было.

А может всё-таки ОН?!

ziemin ★★
()
Ответ на: комментарий от coderage

Даже если это лаба в универе. Откуда тогда студент узнает, как нужно писать, если преподаватель будет принимать такое?

Galaxy
()

На onclik(событие) нужно навесить обработчик на JS, который будет отсылать данные вашему php-скрипту. Отсылать данные лучше при помощи jQuery.ajax(), вам будет гораздо легче работать с jQuery, чем писать все на чистом JS. Если ваш код не лабораторная работа, а для production - фильтруйте данные, получаемые от пользователей, и ни в коем случае не вставляйте их в неизменном виде в запрос к базе данных.

lucentcode ★★★★★
()
Ответ на: комментарий от Galaxy

Если студенту надо, может и книги почитать, кроме того, что дают в университете.

Я больше скажу - когда я учился, меня начало со временем напрягать нечитаемость моего кода, я выработал для себя некоторые правила. А потом узнал, что есть уже «готовые» постулаты о том, как писать код. Профит.

А если студенту не надо - то и не надо.

coderage
()
Ответ на: комментарий от Galaxy

То, что я написал выше - это скорее про C/C++. А вот в PHP... Вам вопрос. Есть код:

echo «<tr>»; echo «<td>{$row['0']}</td>»; echo «<td>{$row['1']}</td>»; echo «</tr>»;

Если в этой записи всё плохо, то как написать это «правильно»? Вопрос шаблонизатора пропустим, предположим, что здесь пхп сам по себе шаблонизатор.

coderage
()

файл index.php

<?php

require_once 'db.php';

$link = mysql_connect($dbhost, $dbuser, $dbpassword);

mysql_select_db($dbname, $link);

$query = mysql_query("SELECT * FROM `some_table`");

if($query == false) 
{
    die("something goes wrong" . mysql_error());
}
?>
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-type" content = "text/html; charset=utf-8">
        <title>LIST</title>
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script type='text/javascript'>
            function on_change(id)
            {
                var state = $("#input" + id).is(':checked')
                $.ajax({
                    url: 'ajax.php',
                    data: 'id=' + id + "&state=" + (state ? 1 : 0),
                    type: "POST",
                    success: function (data) { console.log(data) }
                })
            }
        </script>
    </head>
<body>
    <table border='1' align='center' width=300>
        <tr>
            <th>id</th>
            <th>Name</th>
            <th>Rent</th>
        </tr>
        <?php while($row = mysql_fetch_assoc($query)):?>
        <tr>
            <td><?=$row['id']?></td>
            <td><?=$row['name']?></td>
            <td>
                <input id='input<?=$row['id']?>'
                       name='box' type='checkbox'
                       value ='<?=$row["rent"]?>'
                       onchange="on_change(<?=$row['id']?>)"
                       <?php if($row['rent'] == '1') {echo 'checked="checked"';} else { echo "";} ?>
                       />
            </td>
        </tr>
        <?php endwhile;?>
    </table>
</body>
</html>
<?php mysql_close() ?>

файл db.php

<?php

$dbhost = "localhost";
$dbuser = "root";
$dbpassword = "root";
$dbname = "some_db";

файл ajax.php

<?php
require_once 'db.php';

$link = mysql_connect($dbhost, $dbuser, $dbpassword);

mysql_select_db($dbname, $link);

$id = $_POST['id'];
$state = $_POST['state'];

$query = "UPDATE `some_table` SET `rent` = $state WHERE `id` = $id";

$result = NULL;

$result = mysql_query($query) ? array('result' => TRUE): array('result' => FALSE);

mysql_close();
echo json_encode($result);

база данных и таблица

create database `some_db` default charset utf8;

use `some_db`;

create table `some_table`( `id` int(5) not null auto_increment primary key, `name` varchar(255) not null, `rent` int(1) not null);

insert into `some_table` values(NULL, 'john', 0),(NULL, 'peter', 0),(NULL, 'eddie', 0);

rikardoac
()
Ответ на: комментарий от coderage

Хотя бы так

echo "<tr><td>{$row['field1']}</td><td>{$row['field2']}</td></tr>»;

Но лучше все же шаблон.

hidden_4003
()
Ответ на: комментарий от rikardoac
$id = $_POST['id'];
$state = $_POST['state'];

$query = "UPDATE `some_table` SET `rent` = $state WHERE `id` = $id";

Это же sql injection в чистом виде. И не надо говорить что это не production. Это просто печально.

hidden_4003
()
Ответ на: комментарий от coderage

Я искренне надеюсь, что тот «код», который Вы написали является шуткой ... ну или не более, чем примером. Править не вижу смысла.

А насчёт того, что «если студенту надо»... Преподавать должен требовать соблюдения хотя бы элементарных норм. Вы же не думаете, что после получения диплома такой специалист вдруг начнёт писать нормально?

Galaxy
()
Ответ на: комментарий от hidden_4003

Книжки бывают разные. Трудно чтоли всякую ерунду издать.

Galaxy
()
Ответ на: комментарий от Galaxy

Спасибо. Это был не праздный вопрос.

Кстати, я сталкивался с ситуацией, когда хостинг не поддерживает короткую запись тегов (<?) и запрещает изменение установок PHP в .htaccess. И ничего не работает :) Рекомендую всегда писать полностью - <?php

coderage
()
Ответ на: комментарий от Galaxy

А если я не знаю, на какой хостинг будет установлен сайт? Вроде бы лучше, чтобы «везде работало», чем «могло не заработать».

coderage
()
Ответ на: комментарий от coderage

Поправьте меня, если я не прав, но разве не должен хостинг подбираться под требования кода сайта? Системные требования есть у любого программного обеспечения.

Galaxy
()
Ответ на: комментарий от Galaxy

Вы, наверное, не занимаетесь фрилансом. Там и так бывает, что параноики не дают доступ на хостинг, заливают сами, ругаются, что ничего не работает. А потом оказывается, что поддержки PHP вообще нет, а про базы данных они и не слышали.

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

А «везде» всё равно не заработает.

<?php ?> работает везде. <? ?> не везде. Я только про открывающие-закрывающие теги говорю. Или я не прав?

coderage
()
12 октября 2014 г.
Ответ на: комментарий от rikardoac

нужна помощь))

а что нужно добавить к вашему коду если в таблице есть еще rent2 и rent3 чекбоксы??

anonymous
()
Ответ на: комментарий от coderage

Хотя бы так

Не, вопрос «coderage» был как правильно без шаблонизатора, так вот никаких «длинных» echo быть не должно, кароч вот так правильно и читаемо:

<tr>
    <td><?=$row['field1']?></td>
    <td><?=$row['field2']?></td>
</tr>

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.