Webboard

Pełna wersja: Select bez odświeżania strony
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam,
potrzebuję napisać skrypt który będzie zwracał mi z selecta wartość value bez odśweżania strony i w momencie wyboru danego selecta pobierał odpowiednie dane z bazy. Mam taki kod ale nie działa. Dodam że w jednym pliku mam wiele formularzy i chciałbym żeby to nie miało wpływ
Kod:
<div class="col-sm-12 text-left">
<div class="well">
<form enctype="multipart/form-data" action="" method="POST" id="delete_img">
<div class="form-group">
<label class="text-left">Wybierz kategorie:</label><br></br>
<select name="id" onchange="document.getElementById('delete_img').submit()">
<option value=\"0\">Nie wybrano kategorii</option>
<?php
db_connect();
$inquiry = mysql_query("SELECT * FROM category");

while ($row = mysql_fetch_row($inquiry)) {
 $id = $row[0];
 $name = $row[1];
 $folder_name = $name;
 $folder_name = iconv('utf-8','us-ascii//TRANSLIT//IGNORE', 'ęąśćżźńłó');
 $folder_name = str_replace("'",'', $folder_name);
 echo "<option value=\"$id\">$name</option>";
}
db_close();
?>
</select>
</div>
<div class="row">
<div class="col-sm-12">
<?php
db_connect();
echo "<br>Wartość: ".$_POST['delete_img'];
$inquiry = mysql_query("SELECT * FROM images WHERE category_id='$id'");

while ($row = mysql_fetch_row($inquiry)) {
 $category_name = $row[1];
 $img_link = $row[2];
 echo '<div class="col-sm-3"><a href="'. ($img_link) .'" data-lightbox="'. ($name_box[$i]) .'" data-title="'. ($name_box[$i]) .'"><img style="padding: 5px; width: 100%;" src="'. ($img_link) .'" alt=""/></a></div>';
}
db_close();
?>
</div>
</div>
<div class="text-right">
<input type="submit" name="delete" value="Usuń zdjęcie"/>
</div>
</form></br>
<?php
if ($_POST['delete_clase'])
{
$id = $_POST['id'];

db_connect();

$inquiry3 = mysql_query("SELECT * FROM category WHERE id='$id'");
$row = mysql_fetch_row($inquiry3);
$folder_name = $row[1];

$folder_name= strtolower($folder_name);
$folder_name = str_replace(' ', '-', $folder_name);

$folder_name = strtr($folder_name, 'ęóąśłżźćń', 'eoaslzzcn');
$folder_name = strtr($folder_name, 'ˇ¦¬±¶Ľ','ASZasz');

$folder_name = preg_replace('/[^0-9a-z\-]+/', '', $folder_name);
$folder_name = preg_replace('/[\-]+/', '-', $folder_name);
$folder_name= trim($folder_name,'-');

$folder_name = strtr($folder_name, ' ','-');

$inquiry = mysql_query("SELECT * FROM images WHERE category_id='$id'");

while ($row = mysql_fetch_row($inquiry)) {
 $id_images = $row[0];
 $link = $row[2];
 unlink("$BASE_DIR/$link");
 mysql_query("DELETE FROM  images  WHERE id='$id_images'");
}

unlink("$BASE_DIR/images/$folder_name/$folder_name.jpg");
mysql_query("DELETE FROM  category  WHERE id='$id'");
rmdir("$BASE_DIR/images/$folder_name");
echo "</br>Usunięto kategorie !";

db_close();
}
?>
</div>
</div>
u na działanie tego.
Jeśli chcesz pobrać dane z bazy bez odświeżania strony wykorzystaj technologię AJAX:
Link jak to zrobić (trochę to jednak skomplikowane): http://kursjs.pl/kurs/ajax/ajax.php

Osobiście polecam skorzystać z biblioteki jQuery (może ją znasz), wtedy forma się mocno upraszcza i wygląda mniej więcej tak (istnieje prostsza wersja, ale ja zazwyczaj wykorzystuję tą):
Kod:
$.ajax({
url: 'url-do-pliku-php.php',
type: 'get/post(jedno z nich)',
data: {dana1: zmiennaa, dana2: zmiennab},
success: function(odp){/*przetwarzanie odpowiedzi z serwera*/}
})

A jak pobrać wartość z pola select? Nadaj mu jakieś id (np. kategoria), a potem weź ją do zmiennej za pomocą:
Kod:
var zmienna = $("#id_selectu").val();

Zamiast (w czystym JS):
Kod:
var zmienna = document.getElementById("id_selectu").value


A jakbyś chciał o coś jeszcze zapytać - pomogę, choć przyznam, że sam się dopiero uczę.
Protip: w jQuery jest funkcja "serialize" zwracajaca obiekt z danymi formularza, via $('#idformularza').serialize();