PDA

View Full Version : سوال: ویرایش و ذخیره فایل با PHP و AJAX



new_programer_79
جمعه 09 مرداد 1394, 18:21 عصر
سلام دوستان
من تازه شروع به یادگیری AJAX کردم و به مشکلی برخودم:::
میخوام یک فایل رو بوسیله PHP ادیت و اون رو ذخیره کنم بدین منظور این کد رو نوشتم:
<script>
function sendata(){
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function (){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById('txt').innerHTML=xmlhttp.r esponseText;
}
}
xmlhttp.open("POST","Edit.php",true);
xmlhttp.send();
}
</script>
<?php
session_start();
$user=$_SESSION['$user'];
$pass=$_SESSION['$pass'];
if (empty($user) OR empty($pass)){
header("location:../login.html");
}
include('../config.php');
$conn=new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8 ;",$username,$password);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPT ION);
$sql=$conn->prepare("SELECT access FROM register WHERE `username`=:user ");
$sql->bindParam(':user',$user);
$sql->execute();
if($rows=$sql->fetch(PDO::FETCH_ASSOC)){
$access=$rows['access'];
if($access==="admin"){
include('Menu.php');
$txt=fopen("sle.txt","r+") or die("Unable to Open file");
?>
<center>
<div class="main">
<form>
<textarea name="txt" id="txt" cols="120" rows="20">
<?php
echo fread($txt,filesize("sle.txt"));
?>
</textarea>
<input type="submit" onClick="sendata ();" name="submit" value="Submit" />
<input type="reset" value="Delete" />
</form>
</div>
</center>
<?php

}else{
die("dastresi shoma mahdud ast.user name feli shoma:".$user);
}
}
?>
و اینم Edit.php:::
<?php
$text=$_POST['txt'];
$txt=fopen("sle.txt","r+") or die("Unable to Open file");
$put=fwrite($txt,$text);
echo fread($txt,filesize("sle.txt"));
?>


میشه راهنمایی کنید چرا این کد کار نمیکنه؟؟؟؟/ارور 404 میده و میره به یک دایرکتوری قبل .
مثلا فایل اینجا قرار داره:localhost/test/edit/Edit_Txt.php
و میره به localhost/test/post?txt=Example&submit=Submit

new_programer_79
جمعه 09 مرداد 1394, 19:56 عصر
Up........

new_programer_79
شنبه 10 مرداد 1394, 02:05 صبح
دوستان لطفا کمک کنید.!!!:ناراحت:

barnamenevis2016
شنبه 10 مرداد 1394, 17:53 عصر
سلام.اول چیزی که به چشم خورد اینه که شما باس، حالی کنید به برنامه که به صورت پیشفرض و طبیعی کارشو پیش نبره.بلکه قراره با آزاکش فرم فرستاده بشه.واس ایتکار توی تابع sendata
دستور زیر رو ابتدا بنویس:

evt.preventDefault();
evt اشاره به رویداد ارسال داره.
و کدا رو اینطور تصحیح کن:

function sendata(evt ){
evt.preventDefault();
ادامه...

و هم چنین دکمه submit رو اینطور:

<input type="submit" onClick="sendata (event);" name="submit" value="Submit" />

Mohammadsgh
شنبه 10 مرداد 1394, 18:41 عصر
این یک نمونه ای جکس با jquery هست.از این الگو بگیرید



<div id="mycart"></div> <script type="text/javascript"> $(document).ready(function (){ var url = $('#insertBasket').attr('href'); $('#form-cart').click(function(event) { if($(this).attr('name')=='quantity') alert('aa'); event.preventDefault(); $.ajax({ type: 'POST', url: url, data: $(this).serialize(), dataType: 'html', beforeSend:function () { $("#mycart").html('<img src="<?php echo URL?>1.gif" />'); }, success: function (data) { $('#mycart2').html(data); $('#mycart').hide(); } }); }); }); </script>
کدش نامرتب شد.اگه تو ویرایشگرتون بزارید درست میشه

new_programer_79
شنبه 10 مرداد 1394, 19:03 عصر
این یک نمونه ای جکس با jquery هست.از این الگو بگیرید
خیلی ممنون از پاسخ اما ترجیح میدم از JQuery استفاده نکنم.خیلی ممنون:قلب:

سلام.اول چیزی که به چشم خورد اینه که شما باس، حالی کنید به برنامه که به صورت پیشفرض و طبیعی کارشو پیش نبره.بلکه قراره با آزاکش فرم فرستاده بشه.واس ایتکار توی تابع sendata
دستور زیر رو ابتدا بنویس:


1
evt.preventDefault();







evt اشاره به رویداد ارسال داره.
و کدا رو اینطور تصحیح کن:


1
2
3
function sendata(evt ){
evt.preventDefault();
ادامه...






و هم چنین دکمه submit رو اینطور:


1
<input type="submit" onClick="sendata (event);" name="submit" value="Submit" />




باز هم نشد!!:ناراحت:

barnamenevis2016
شنبه 10 مرداد 1394, 20:13 عصر
یک راه ساده اینه که type اون اینپوت رو از حالت submit به حالت button تغییر بدید...
یا اینکه از کد زیر استفاده کنی.اگر نام id اون اینپوتت (از نوع submit ) باشه submit_A..از کد زیر استفاده کن:


<script>document.getElementById("submit_A").addEventListener("click", function(e){e.preventDefault();

بقیه تابع sendata
})</script>


که کدای بالا رو باید پس از نوشتن کدهای فرم قرار بدید.یعنی در انتها
البته الان در کدی که شما نوشتی..هیچ داده ای ارسال نمی شه.یعنی با آژاکس شما هیچی رو به فایل Edit.php ارسال نمی کنید.یک روش اینه که دادتو که از نوع فرم هست رو در تایع زیر جا بدی:

xmlhttp.send( data );
تا اون داده ارسال بشه

new_programer_79
شنبه 10 مرداد 1394, 22:11 عصر
خیلی ممنون از پاسخ گویی،من واقعا گیج شدم.اینطور که فهمیدم مثلا باید اینطوری باشه:
xmlhttp.send(txt=Example);
خب حالا اگه بخوام مقدار Example رو از textarea بگیرم اینطوری میشه؟؟
var text=document.getElementById('txt').text;
xmlhttp.send(txt=text);
بعد با این وجود فکر میکنم بای این خط رو از کد بردارم؟؟؟
$text=$_POST['txt'];
=============
در ضمن دیگه اون ارور 404 رو نمیده:)

barnamenevis2016
شنبه 10 مرداد 1394, 23:03 عصر
مثلا اگر خواهید مقداری رو از textarea بگیری و بفرستی:

var data = new FormData();
vartext=document.getElementById('txt').text;
data.append('txt', text);
.
.
.

data.append('txt', text);
حالا این data رو بزار توی

xmlhttp.send(data);


می تونی اون data رو با متد append پربارترش کنی.که توی کد بالا می بینی...
البته شاید این روش بالا توی بعضی مروگرا کار نکنه.روش دیگری هم هست.و استفاده از جی کوئری هم یک مزیتش اینه که معمولا دیگه نگران این نیستیم که در مروگری کار نکنه...
بعد که اطلاعات فرستاده شد.توی صفحه مورد نظر.با

$_POST['txt'

اطلاعات رو می خونی.

new_programer_79
شنبه 10 مرداد 1394, 23:54 عصر
خب اینطور که به نظر میاد الان اطلاعات رو ارسال میکنه اما وقتی میرم تو فایل sle.txt به جای اون متنی که وارد کردم می نویسه undefined:افسرده:

barnamenevis2016
یک شنبه 11 مرداد 1394, 01:35 صبح
ببخشید.من حواسم نبود.همون کد شما رو که نوشته بودید:

var text=document.getElementById('txt').text;


در حالی که درستش اینه که به جای text از value استفاده کنیم.یعنی به شکل زیر.مشکل فکر کنم همین باشه:

document.getElementById('txt').value

new_programer_79
یک شنبه 11 مرداد 1394, 02:33 صبح
خیلی ممنون درست شد
حالا اگه بخوام که به طور خودکار مثلا هر یک دقیقه این کد اجرا بشه چی؟؟؟

barnamenevis2016
یک شنبه 11 مرداد 1394, 03:00 صبح
از تابع setIntervalاستفاده می کنیم.هر 1000 واحد، برابر یک ثانیه، کد زیر، هر ثانبه یکبار کد رو اجرا می کنه و هر بار اطلاعات فرستاده می شه و پردازش صورت می گیره.:

<script>setInterval( function(){sendata()}, 1000)</script>