PDA

View Full Version : سوال: علت نشناختن متغيرها



csharpdoost
شنبه 29 آبان 1389, 23:13 عصر
دوستان سلام
يكي لطف ميكنه بگه علت اين خطا چيه؟:متفکر:منظورم اينكه كه چرا متغير هارو نميشناسه؟
60608
فايلch10-1.php:


<?php
$isbn=$_POST['isbn'];
$author=$_POST['author'];
$title=$_POST['title'];
$price=$_POST['price'];
if(strlen($isbn)==0 or strlen($author)==0)
{
echo("Go back avd fill all fildes");
exit;
}
$db=mysql_connect("localhost","root","123")or die(mysql_error());
if(!$db){
echo "Error :cannot open thhe connection";
exit;
}
mysql_select_db('publisher');
$query="insert into books
(isbn, author,title,price) values
('".$isbn."','".$author."','".$title."','".$price."')";
$result=mysql_query($query);
if($result)
echo mysql_affected_rows().'<b>book inserted into databes.</b>';
mysql_close($db);
?>
و فايل ch10-1.html :



<html>
<body>
<form metod="post" action="ch10-1.php">
<table border ="1">
<tr>
<td><b>ISBN</b></td>
<td><input type="text" name="isbn" size="20"></td>
</tr>
<tr>
<td><b>Author</b></td>
<td><input type="text" name="author" size="20"></td>
</tr>
<tr>
<td><b>Title</b></td>
<td><input type="text" name="title" size="20"></td>
</tr>
<tr>
<td><b>Price</b></td>
<td><input type="text" name="price" size="5"></td>
</tr>
<tr>
<td width="20"></td>
<td><b><input type="submit" name="submit" value="Submit"></b></td>
</tr>
</table>
</body>
</html>

با تشكر

funpatogh
شنبه 29 آبان 1389, 23:20 عصر
اول فایل php اینو بنویس


error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);

csharpdoost
شنبه 29 آبان 1389, 23:35 عصر
اول فایل php اینو بنویس


error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);

دوست عزيز با تشكر
1- ميشه در مورد اين كد توضيح بديد؟
2- با نوشتن اين كد خطاي قبلي را نميده اما يه خطاي غيرمعقول ديگري رخ ميده و اون اينكه (اگه دو فيلد اول خالي بود پيغام go back رو نشون بده) اما با اينكه تمامي فيلد ها رو پر ميكنم باز اون خطا رو ميده .

funpatogh
یک شنبه 30 آبان 1389, 00:11 صبح
این خط هم میگه که


error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);

تمام خطاها به جز warning ها و Notice ها رو نمایش بدهد
عزیز من فقط توش 100 تا غلط املایی پیدا کردم:لبخند:
چه توی html چه توی php
این فایل html شما


<html> <body> <form metod="post" action="ch10-1.php"> <table border ="1"> <tr> <td><b>ISBN</b></td> <td><input type="text" name="isbn" size="20"></td> </tr> <tr> <td><b>Author</b></td> <td><input type="text" name="author" size="20"></td> </tr> <tr> <td><b>Title</b></td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td><b>Price</b></td> <td><input type="text" name="price" size="5"></td> </tr> <tr> <td width="20"></td> <td><b><input type="submit" name="submit" value="Submit"></b></td> </tr> </table> </body> </html>
metod نوشتید که میشه method
آخرش هم تگ فرم رو نبستید


</form>
و اما توی فایل php یعنی این


<?php $isbn=$_POST['isbn']; $author=$_POST['author']; $title=$_POST['title']; $price=$_POST['price']; if(strlen($isbn)==0 or strlen($author)==0) { echo("Go back avd fill all fildes"); exit; } $db=mysql_connect("localhost","root","123")or die(mysql_error()); if(!$db){ echo "Error :cannot open thhe connection"; exit; } mysql_select_db('publisher'); $query="insert into books (isbn, author,title,price) values ('".$isbn."','".$author."','".$title."','".$price."')"; $result=mysql_query($query); if($result) echo mysql_affected_rows().'<b>book inserted into databes.</b>'; mysql_close($db); ?>
اول اینکه همیشه ارسال شدن یک دکمه مثل submit رو چک کنید بعد عملیات انجام بشه تا خطا ندهد
دوما وقتی از strlen استفاده میکنید حتی یک space هم به عنوان 1 در نظر میگیرد پس بهتره که اول trim کنید بعد strlen کنید
این هم کد های صحیح برنامه شما

html


<html>
<body>
<form method="post" action="">
<table border ="1">
<tr>
<td><b>ISBN</b></td>
<td><input type="text" name="isbn" size="20"></td>
</tr>
<tr>
<td><b>Author</b></td>
<td><input type="text" name="author" size="20"></td>
</tr>
<tr>
<td><b>Title</b></td>
<td><input type="text" name="title" size="20"></td>
</tr>
<tr>
<td><b>Price</b></td>
<td><input type="text" name="price" size="5"></td>
</tr>
<tr>
<td width="20"></td>
<td><b><input type="submit" name="submit" value="Submit"></b></td>
</tr>
</table>
</form>
</body>
</html>
php


<?php
$isbn=trim($_POST['isbn']);
$author=trim($_POST['author']);
$title=$_POST['title'];
$price=$_POST['price'];
if(isset($_POST['submit'])){
if(strlen($isbn)==0 || strlen($author)==0)
{
echo("Go back avd fill all fildes");
exit;
}
$db=mysql_connect("localhost","root","123")or die(mysql_error());
if(!$db){
echo "Error :cannot open thhe connection";
exit;
}
mysql_select_db('publisher');
$query="insert into books
(isbn, author,title,price) values
('".$isbn."','".$author."','".$title."','".$price."')";
$result=mysql_query($query);
if($result)
echo mysql_affected_rows().'<b>book inserted into databes.</b>';
mysql_close($db);


}

?>

csharpdoost
یک شنبه 30 آبان 1389, 19:38 عصر
دوست عزيز با تشكر


اول اینکه همیشه ارسال شدن یک دکمه مثل submit رو چک کنید بعد عملیات انجام بشه تا خطا ندهد

1-اتفاقا يكي از ابهامات من همينه كه دكمه submit كجا و چطوري داره اجرا ميشه ؟ تو كدهاي html كه فقط مشخصات اون نوشته شده . پس از كجا معلوم ميشود كه دكمه زده شده است ؟ و پس از اون كدهاي ديگه اجرا بشه.
2- چرا اطلاعات توي ديتابيس ريخته نميشه؟

funpatogh
یک شنبه 30 آبان 1389, 20:41 عصر
<input type="submit" name="submit" value="Submit">
شما وقتی این کلید submit رو میزاری و method فرم رو post میگزارید وقتی دکمه رو فشار دهید اطلاعات فرم از جمله تمام input ها که حتی دکمه submit هست ارسال میشه
که ما وقتی با


if(isset($_POST['submit']))
چک میکنیم که کلید submit هم ارسال شده یعنی کاربر 100% روی دکمه کلیک کرده که این مقدارش ارسال شده و اگر هم if شرطش برقرار نشه یعنی روی دکمه کلیک نشده و کاری هم انجام نمیشود

این مثال زیر رو اجرا کنید تا موجه شوید


<?php
if(isset($_POST['send'])){
echo $_POST['user'];
}

?>
<form method="post">
name <iput type="text" name="user"><br>
<input type="submit" name="send" value="Click"><be>
</form>
تا وقتی که دکمه رو کلیک نکنیم اطلاعات ارسال نمی شوند وقتی کلیک کردیم با if چک میکنیم که اگر کلید send ارسال شده پس مقدار user رو نشان بده



$result=mysql_query($query);
خط بالا رو به این شکل تغییر بدهید تا ببینید چه خطایی میدهد که insert نمیکنه


$result=mysql_query($query) or die(mysql_error());

csharpdoost
دوشنبه 01 آذر 1389, 15:52 عصر
$result=mysql_query($query);
خط بالا رو به این شکل تغییر بدهید تا ببینید چه خطایی میدهد که insert نمیکنه


$result=mysql_query($query) or die(mysql_error());


دوست عزيز
هيچ پيغامي نشون نميده و كاري هم انجام نميشه؟ واقعا نميدنم چيكارش كنم.

funpatogh
دوشنبه 01 آذر 1389, 23:35 عصر
اگه امکان داره جدول (sql) در ارتباط با این قسمت رو هم Attach کنید بررسی کنم

UnnamE
سه شنبه 02 آذر 1389, 01:40 صبح
بهتره همون خط كدي رو كه دوستمون funpatogh فرمود رو اعمال نكني
و بهتر هست نمايش خطا ها رو در فايل php.ini روي E_ALL | E_STRICT
اما چرا؟

(Show all errors, warnings and notices including coding standards.)
those related to E_NOTICE and E_STRICT, which together cover best practices and
; recommended coding standards in PHP. For performance reasons, this is the
; recommend error reporting setting. Your production server shouldn't be wasting
; resources complaining about best practices and coding standards. That's what
; development servers and development settings are for.
; Note: The php.ini-development file has this setting as E_ALL | E_STRICT. This
; means it pretty much reports everything which is exactly what you want during
; development and early testing.
كه باعث ميشه كدنويسي استاندارد رو رعايت فرماييد!
كه تهش به مشكلات عجيب نخوري
همچنين در نسخه هاي آينده php استاندارد نويسي الزامي هست
مثلا ديگه نميشه يه متغير رو پاپتي آورد وسط و ازش استفاده كرد
يا همينجوري شانسي فرم ها رو پردازش كرد و نتيجه رو ريخت توي متغير و false , true قرار داد
البته من اين پست رو دادم كه بعدا مجبور نشي ديگه تاپيك اينجوري بزني و خودت راحت باشي:بوس:

csharpdoost
سه شنبه 02 آذر 1389, 15:22 عصر
اگه امکان داره جدول (sql) در ارتباط با این قسمت رو هم Attach کنید بررسی کنم
60752
البته بايد بگم اون تا موردي كه توش ثبت شده از طريق خود mysql وارد كردم .

csharpdoost
سه شنبه 02 آذر 1389, 15:25 عصر
بهتره همون خط كدي رو كه دوستمون funpatogh فرمود رو اعمال نكني
و بهتر هست نمايش خطا ها رو در فايل php.ini روي E_ALL | E_STRICT

دوست خوب متشكر
از راهنماييتون اما من تازه كارم . لطفا دقيقا توضيح بديد چطوري از php.ini براي چك كردن خطاهام استفاده كنم .

UnnamE
سه شنبه 02 آذر 1389, 21:34 عصر
اين رو يه نگاه كن
http://www.php.net/manual/en/function.error-reporting.php
خود فايل php.ini رو باز كني همه چيز معلوم ميشه
به خط مربوط به error_reporting برو همه مقدار ها رو توضيح داده!

funpatogh
سه شنبه 02 آذر 1389, 22:20 عصر
بک اپ دیتابیستون چرا به این شکل بود من نفهمیدم این چیه؟

csharpdoost
چهارشنبه 03 آذر 1389, 15:42 عصر
بک اپ دیتابیستون چرا به این شکل بود من نفهمیدم این چیه؟
ببخشيد چطوري بود ؟
طبق اين آدرس فايلهاي بك آپ رو كپي كردم:
C:\wamp\bin\mysql\mysql5.1.36\data\publisher
يعني خود فايل كپي شده مشكل داره ؟ يا ساختار جدول ديتابيس ؟ ميشه دقيقا بگيد مشكل چيه؟

UnnamE
چهارشنبه 03 آذر 1389, 19:17 عصر
واسه بك آپ ديتابيس از منوي Export استفاد كن

funpatogh
چهارشنبه 03 آذر 1389, 19:39 عصر
نوع فایل مشکل داشت من گفتم که sql استخراج کنید
یعنی یک فایل با پسوند .sql
از phpmyadmin اکسپورت کنید

csharpdoost
پنج شنبه 04 آذر 1389, 15:35 عصر
سلام
متشكرم
شيوه جالبي براي بدست اوردن ديتابيسه!
اميدوارم درست انجام داده باشم .
60834

funpatogh
یک شنبه 07 آذر 1389, 02:50 صبح
کد هات رو به این شکل بنویس


<?php
if(isset($_POST['submit'])){
$isbn=trim($_POST['isbn']);
$author=trim($_POST['author']);
$title=trim($_POST['title']);
$price=trim($_POST['price']);

if(strlen($isbn)==0 || strlen($author)==0)
{
echo("Go back avd fill all fildes");
exit;
}
$db=mysql_connect("localhost","root","")or die(mysql_error());
if(!$db){
echo "Error :cannot open thhe connection";
exit;
}
mysql_select_db('publisher');
$query="insert into `books` (id,isbn, author,title,price) values (null,'".$isbn."','".$author."','".$title."','".$price."')";
$result=mysql_query($query);
if($result)
echo mysql_affected_rows().' <b>book inserted into databes.</b>';
mysql_close($db);


}
?>
<html>
<body>
<form method="post" action="">
<table border ="1">
<tr>
<td><b>ISBN</b></td>
<td><input type="text" name="isbn" size="20"></td>
</tr>
<tr>
<td><b>Author</b></td>
<td><input type="text" name="author" size="20"></td>
</tr>
<tr>
<td><b>Title</b></td>
<td><input type="text" name="title" size="20"></td>
</tr>
<tr>
<td><b>Price</b></td>
<td><input type="text" name="price" size="5"></td>
</tr>
<tr>
<td width="20"></td>
<td><b><input type="submit" name="submit" value="Send"></b></td>
</tr>
</table>
</form>
</body>
</html>
بعد یک دیتابیس به اسم publisher بساز و توش این فایل sql رو import کن و برنامت رو دوباره اجرا کن من که 2 تا رکورد هم به عنوان نمونه ایجاد کردم توی بک اپ

csharpdoost
چهارشنبه 17 آذر 1389, 19:46 عصر
دوست عزیز اقای funpatogh
واقعا متشکرم . به راحتی اجرا شد .