PDA

View Full Version : سوال: پیغام خطای Undefined variable:



programregister
یک شنبه 27 مرداد 1398, 23:50 عصر
سلام . تو کد پایین اطاعات وارد دیتا بیس میشه و پیغام "پیام شما با موفقیت ارسال شد" هم میاد. اما وقتی پیغام "پیام شما با موفقیت ارسال شد" رو ok می کنم. پایین صفحه این خطا ظاهر میشه.
لطفا راهنمایی کنید.

Notice: Undefined variable: NumberTicket in C:\xampp\htdocs\t2\user\new-ticket.php on line 94








<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="../style.css" rel="stylesheet" type="text/css" />
<title>سیستم تیکت پشتیبانی - ارسال تیکت جدید</title>
</head>


<body dir="rtl" bgcolor="#FFFFCC">
<div class="content" style="background-color:#FFC; border:none;"><a href="list-ticket.php"><input type="button" style="height:50px; width:200px;" value="لیست تیکت های ارسال شده" /></a></div>
<div class="content">
<form method="post">
<table>
<tr>
لطفا واحد سازمانی خود را به دقت انتخاب نمایید:
<br>
<select name="organ">
<option value="1">اداری</option>
<option value="2">مالی</option>
<option value="3">آموزش</option>

</select>
</tr>
<br>


<tr>
: نوع خدمات مورد درخواست
</tr>
<tr>
<br>
<input type="checkbox" name="request[]" value="internet">Internet
<br>
<input type="checkbox" name="request[]" value="software">Software
<br>
<input type="checkbox" name="request[]" value="hardware">Harware
<br>
<input type="checkbox" name="request[]" value="network">Network
<br>
<input type="checkbox" name="request[]" value="trouble">Troubleshooting
</tr>




<tr>
<td> سایر موارد با توضیحات کامل: </td>
</tr>




<tr>
<td>عنوان</td>
<td><input type="text" name="txt_subject"/></td>
</tr>
<tr>
<td>پیام</td>
<td><textarea name="txt_message"></textarea></td>
</tr>
</table>
<center>
<input class="button" name="submit" type="submit" value="ارسال" />
<input class="button" type="reset" value="پاک کردن" />
</center>
<br />
</form>
</div>


</body>
</html>
<?php
if (isset($_POST['submit'])){
include ('../connection.php');
$subject = $_POST['txt_subject'];
$message = $_POST['txt_message'];
$organ = $_POST['organ'];
$checkbox1 = $_POST['request'];
$chk="";
foreach($checkbox1 as $chk1)
{
$chk.= $chk1.",";
}
session_start();
$email = $_SESSION['email'];
$sql = "select NumberTicket from ticket where email='".$email."' Order By NumberTicket " ;
$q = $connection -> query($sql);
$q -> setFetchMode(PDO::FETCH_ASSOC);
while($r = $q->Fetch()):
$NumberTicket = $r['NumberTicket'];
endwhile;
$NumberTicket++;
$sql = "INSERT INTO ticket(NumberTicket,email,subject,message,organ,re quest) VALUES ('$NumberTicket','$email','$subject','$message','$ organ','$chk') " ;
$connection -> exec($sql);
?>
<script type="text/javascript">alert("پیام شما با موفقیت ارسال شد")</script>
<?php
}
?>

ali_sed
دوشنبه 28 مرداد 1398, 01:19 صبح
سلام


مشکل مربوط به نتیجه کوئری خط ۸۸ می باشد که خالی می باشد در نتیجه دستورات داخل حلقه while اجرا نمی شود در نتیجه دستور خط ۹۲ (جایی که متغییر خود را تعریف کرده اید) نیز اجرا نمی شود. لذا کوئری و کدهای خود را بررسی کنید و مشکل را رفع کنید.

سپس قبل از دستور while متغیر خود را مقداردهی اولیه کنید تا در هر شرایطی دیگر با این خطا مواجه نشوید.


$NumberTicket = 0;

برای یافتن بزرگترین شماره تیکت برای یک ایمیل خاص بهتر است از کوئری زیر استفاده کنید:



select max(NumberTicket) from ticket where email='".$email."';

programregister
دوشنبه 28 مرداد 1398, 21:34 عصر
سلام


مشکل مربوط به نتیجه کوئری خط ۸۸ می باشد که خالی می باشد در نتیجه دستورات داخل حلقه while اجرا نمی شود در نتیجه دستور خط ۹۲ (جایی که متغییر خود را تعریف کرده اید) نیز اجرا نمی شود. لذا کوئری و کدهای خود را بررسی کنید و مشکل را رفع کنید.

سپس قبل از دستور while متغیر خود را مقداردهی اولیه کنید تا در هر شرایطی دیگر با این خطا مواجه نشوید.


$NumberTicket = 0;

برای یافتن بزرگترین شماره تیکت برای یک ایمیل خاص بهتر است از کوئری زیر استفاده کنید:



select max(NumberTicket) from ticket where email='".$email."';

ممنون از پاسخگویی شما. اما مشکل با راه حل هایی که گفتین حل نشد.
یک مشکل بزرگتر دیگه ای که هم هست اینه که از یه جایی (که دقیق نمیدونم کجاست اما به نظرم وقتی کاربر admin1 لوگین میکنه) فرد user1 تیکت رو ثبت میکنه ولی به اسم یوزر admin1 وارد دیتابیس میشه. اینم تصویرش150607

ali_sed
چهارشنبه 30 مرداد 1398, 09:25 صبح
اگر دوباره همان خطای اول را میدهد. لطفا متن خطا به همراه کد اصلاح شده را بصورت کامل قرار دهید.

در مورد مشکل دوم با توجه به اینکه شما ایمیل اپراتور را از سشن دریافت می کنید. مشکلی در بخش لاگین و لاگ اوت دارید. وقتی که کاربر لاگ اوت می کند محتوای سشن را کامل پاک کنید. و زمانی که لاگین می کند مطمئن شوید که ایمیل را به درستی در سشن ذخیره کرده اید.

programregister
چهارشنبه 30 مرداد 1398, 22:33 عصر
اگر دوباره همان خطای اول را میدهد. لطفا متن خطا به همراه کد اصلاح شده را بصورت کامل قرار دهید.

در مورد مشکل دوم با توجه به اینکه شما ایمیل اپراتور را از سشن دریافت می کنید. مشکلی در بخش لاگین و لاگ اوت دارید. وقتی که کاربر لاگ اوت می کند محتوای سشن را کامل پاک کنید. و زمانی که لاگین می کند مطمئن شوید که ایمیل را به درستی در سشن ذخیره کرده اید.

ممنونم از راهنمایی شما با توابع unset و session_destroy مشکل حل شد. اما اگر دو کاربر همزمان بخوان از یک مرورگر توی یه کامپیوتر استفاده کنن. این مشکل وجود داره. برای اون چه راه حلی هست؟

ali_sed
شنبه 02 شهریور 1398, 01:19 صبح
ممنونم از راهنمایی شما با توابع unset و session_destroy مشکل حل شد. اما اگر دو کاربر همزمان بخوان از یک مرورگر توی یه کامپیوتر استفاده کنن. این مشکل وجود داره. برای اون چه راه حلی هست؟

خب مسلما دو کاربر نمی توانند از یک مرورگر لاگین کنند. چون session id در کوکی ذخیره می شود و لاگین نفر دوم منجر به خروج کاربر قبلی می شود.