PHP-AJAX-PHP form/submit
Szervusztok!
Egy profil adatmódosító lapot csinálok az oldalamhoz. A lapon beolvasom a felhasználó képeit, ezeket radioButton-ként használom. Amikor a júzer ráklikkel az egyik képre meghívódik egy ajax függvény (továbbküldve a kép id-ját és a nevét), ami meghívja a keres.php fájlt. A keres.php fájlban van egy form, amiben inputokba olvasom be a kép adatait adatbázisból, van egy mentés és egy törlés gomb.
Jelenleg még csak ott tartok, hogy minden adat szépen megjelenik, ahogy a képekre kattintgatok, de a törlés gombra kattintva a törlés nem fut le. Mintha semmi nem történne csak az AJAX kérés megszűnik
Egy kicsit számomra is furának tűnik a dolog, de amennyiben megoldható a dolog, nem tudom hol lehet a hiba? Valaki esetleg tudna segíteni?
Előre is köszönöm szépen!
profiladatmodosit.phpkeres.php
■ Egy profil adatmódosító lapot csinálok az oldalamhoz. A lapon beolvasom a felhasználó képeit, ezeket radioButton-ként használom. Amikor a júzer ráklikkel az egyik képre meghívódik egy ajax függvény (továbbküldve a kép id-ját és a nevét), ami meghívja a keres.php fájlt. A keres.php fájlban van egy form, amiben inputokba olvasom be a kép adatait adatbázisból, van egy mentés és egy törlés gomb.
Jelenleg még csak ott tartok, hogy minden adat szépen megjelenik, ahogy a képekre kattintgatok, de a törlés gombra kattintva a törlés nem fut le. Mintha semmi nem történne csak az AJAX kérés megszűnik
Egy kicsit számomra is furának tűnik a dolog, de amennyiben megoldható a dolog, nem tudom hol lehet a hiba? Valaki esetleg tudna segíteni?
Előre is köszönöm szépen!
profiladatmodosit.php
<?php
header("Content-Type:text/html; charset=utf-8");
include('pages/DB_Connect.php');
?>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.0.js"></script>
<script type="text/javascript">
//<![CDATA[
function adat_olvas(akt_id, picName)
{
$.ajax({method: 'POST', url: "keres_adat.php?id="+akt_id+"&pic="+picName, success: function(result)
{
$("#a_data").html( result );
}
});
}
//]]>
</script>
<style>
label > input{ /* HIDE RADIO */
visibility: hidden; /* Makes input not-clickable */
position: absolute; /* Remove input from document flow */
}
label > input + img{ /* IMAGE STYLES */
cursor:pointer;
border:2px solid transparent;
}
label > input:checked + img{ /* (RADIO CHECKED) IMAGE STYLES */
border:2px solid #f00;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RadioButtonsWithImages</title>
</head>
<body>
<?php
$kvtnev = "pages/profiles/Admin";
if (is_dir($kvtnev))
{
$kvt = opendir ($kvtnev);
while (gettype($fajl = readdir($kvt)) != boolean)
{
if (is_file($kvtnev."/".$fajl))
{
$lista[] = $fajl;
}
}
closedir($kvt);
}
$usId=2;
$sqlK = mysql_query("SELECT * FROM images WHERE user_id = '$usId'");
while($row = mysql_fetch_array($sqlK))
{
echo "<label>";
echo "<input type='radio' name='fb' value='$row[6]' />";
?>
<img width='100px' height='100px' onclick="adat_olvas(<?php echo $row[0].",'".$row[1]."'";?>)" src='pages/profiles/Admin/temp/<?php echo $row[1]; ?>'>
<?php
echo "</label>";
}
?>
<div id="a_data"></div>
<br><br><a href="http://jsbin.com/image-instead-of-radio-button/5/edit?html,css,output" >Link to RadioButtonsWithImages for examples</a>
</body>
</html>
<?php
header('Content-Type:text/html; charset=utf-8');
include("pages/DB_Connect.php");
$Id = $_GET['id'];
$picName = $_GET['pic'];
if(isset($_POST['deletPicture']))
{
$file = "pages/profiles/Admin/";
if(is_file($file.$picName))
{
if (!unlink($file.$picName))
{
echo ("Error deleting $file.$picName");
}
else
{
echo ("Deleted $file.$picName");
}
}
else
echo "Nem létezik a fájl!";
}
else
{
echo "nincs";
}
$qry_1=mysql_query("SELECT * FROM images WHERE id='$Id'");
while($row1 = mysql_fetch_array($qry_1))
{
?>
<form method="post">
<textarea name="leiras"><? echo $row1[3]; ?></textarea><br>
<input type="hidden" name="hidden_id" value="<?echo $row1[0]?>"/>
<input type="radio" name="pubpriv" value="1"<? if($row1[4]=='1') {echo "checked='checked'";} ?> />privát
<input type="radio" name="pubpriv" value="0"<? if($row1[4]=='0') {echo "checked='checked'";} ?> />publikus
<input type="checkbox" name="profile" value="1"<? if($row1[2]=="1"){ echo "checked"; } ?> />Profilkép
<input type="submit" name="saveDatas" value="Változások mentése"/>
<input type="submit" name="deletPicture" value="Törlés"/>
</form>
<?php
}
?>
Hibakeresés
Hibák
Sajnos ez is csak arra mutat, hogy az internet decentralizáltsága bár részben előny, de elég nagy hátrány is, így nehéz olyan információforrást találni, ahol leírják, hogyan célszerű programozni, mire kell figyelni.
Javaslatok
Köszönöm, megfogadom a javaslatokat
Igaz közbe sikerül egy kis példán keresztül megoldanom. Elég jól működik is. (Persze nem a javaslatai alapján csináltam, de most már figyelembe veszem, és átalakítom az összes kódom úgy! Köszönöm!)
Illetve mit jelent az, hogy a PHP kód, ami az adatok feldolgozásáért felel, legyen a fejlécben?
(Annyi gondom lenne, ha esetleg ebben tudna segíteni valaki, hogy ha sikeres a törlés frissítem az oldalt. Egy atw-s ingyenes tárhelyen szoktam tesztelni, és bármilyen frissítést alkalmazok, frissítéskor a frame(oldal tetején lévő reklám) a frame-ben jelenik meg. Ahányszor frissitem az oldalt annyiszor ágyazza egymásba az oldalt. Az érdekelne, hogy ez csak itt az atw-n egy átok, vagy valamit rosszul csinálok? Köszönöm, az esetleges segítséget!)
TesztModul
Fejléc
include('szukseges.php');
$hibauzenet = null;
//bejövő adatok ellenőrzése, feldolgozása
if (isset($_POST['akármi']) and $_POST['akármi'] == 'valami') {
//1. ellenőrzünk
//2. elmentjük az adatokat
//3. ha volt bármilyen hiba, $hibauzenet = 'hiba volt';
}
//adatok összegyűjtése
$menu = menu_beolvasasa();
$tartalom = tartalom_osszeallitasa();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...
<html>
<body>
<?php
menu_kirajzolása($menu);
if ($hibauzenet !== null) {
hibauzenet_kiirasa($hibauzenet);
}
tartalom_kirajzolasa($tartalom);
?>
</body>
</html>
jujj
if ($hibauzenet !== null)
feltétel helyettif (isset($hibauzenet))
és kb 5x gyorsabb a futás, mert kimarad belőle az error_handler (ez ugye akkor is lefut, ha el van nyomva a hiba).Egyébiránt ez a megoldás arra jó, hogy szét legyen darabolva a spagetti kód több, rövidebb részre, de önmagában az átláthatóságot nem növeli.
Kezdő lépésnek "elmegy" az újrahasznosíthatóság felé, de nagyon be lehet menni így az erdőbe.
Alapvetően nem egy jó irány (funkcionális, include ide - include onnan, ...).
Fuss neki még egyszer
Nem kívántam teljes megoldást adni, csak egy vázat, majd a kérdező kifőzi magának a saját levesét.
A kódban semmilyen funkcionális nincs, az include-okkal pedig nincs semmilyen gond, te is használod őket.