PDA

View Full Version : مشکل در دریافت و پردازش آرایه با متد POST



diba.kheirkhah
یک شنبه 12 خرداد 1392, 13:26 عصر
سلام

من این فرم رو ایجاد کردم که چارت دروس دانشجو هست و موقع انتخاب واحد دانشجو باید تعداد واحدهای انتخاب شده بررسی و دروس انتخاب شده وارد بانک بشن

اما به متغیرهام و طرز به کار گیری شون ایراد میگیره

میشه کمکم کنید؟ :لبخند:


<!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" />
<title>انتخاب واحد</title>
</head>

<body>

<?php
// Create connection
$con=mysqli_connect("localhost","root","");

// Check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

/*
// Create database

$sql="CREATE DATABASE my_db";
if (mysqli_query($con,$sql))
{
echo "Database my_db created successfully";
}
else
{
echo "Error creating database: " . mysqli_error($con);
}
$con=mysqli_connect("localhost");

$test=mysqli_select_db($con,"my_db") or die(mysqli_error($con));
//$link = mysqli_connect('blah','blah','blah');
//$db = mysqli_select_db($link,$db_name);

// Create table
$sql="CREATE TABLE lesson (
id INT AUTO_INCREMENT,
PRIMARY KEY(id),
lesson VARCHAR(40),
unit int(30),
teacher VARCHAR(30)
);";

// Execute query
if (mysqli_query($con,$sql))
{
echo "Table persons created successfully";
}
else
{
echo "Error creating table: " . mysqli_error($con);
}
*/
if (!isset($_POST["submit"]))
{
foreach($_POST["unit"] as $unit[]=>$count)
{
echo "$count";
}
}
/*
foreach ($_POST["check"] as $check)
{
$count=$_POST["unit"].value;
$sum=$sum+$count;
}
echo " <br /> sum is $sum";
*/
?>

<form name="" id="myform" action="#" method="post" >
<br clear="all"/>
<table border="2" align="center" cellpadding="5" dir="rtl" >
<tr align="right" >
<td width="3"><input type="checkbox" name="check[]" /></td>
<td >ریاضی کاربردي</td>
<td ><input type="text" name="unit[]" disabled="disabled" value="2" /></td>
</tr>
<tr align="right">
<td>آمار و احتمالات<input type="checkbox" name="check[]" value="" /></td>
<td ><input type="text" name="unit[]" disabled="disabled" value="2" /></td>
</tr>
<tr align="right">
<td>شیوه ارائه نوشتاري و گفتاري<input type="checkbox" name="check[]" value="" /></td>
<td ><input type="text" name="unit[]" disabled="disabled" value="2" /></td>
</tr>
<tr align="right">
<td>سخت افزار کامپیوتر2<input type="checkbox" name="check[]" value="" /></td>
<td ><input type="text" name="unit[]" disabled="disabled" value="2" /></td>
</tr>
</table>

<center>
<input name="submit" value="Submit" type="submit" />
</center>
</form>
</body>
</html>




ارورهاش:
Notice: Undefined index: unit in C:\xampp\htdocs\sama\test-unit.php on line 67

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\sama\test-unit.php on line 67

Notice: Undefined variable: sum in C:\xampp\htdocs\sama\test-unit.php on line 71

diba.kheirkhah
یک شنبه 12 خرداد 1392, 13:50 عصر
الان اینو پیدا کردم که اگر اول کدهام بزارم نوتیس ها رو گزارش نمیده


<?php error_reporting (E_ALL ^ E_NOTICE); ?>



غیرفعال کردن ریپورتها باعث پیدایش جوابهای غلط نمیشه؟

diba.kheirkhah
یک شنبه 12 خرداد 1392, 13:57 عصر
برای ارور

Invalid argument supplied for foreach() in

هم این دلیل رو پیدا کردم

When you feed a foreach with data that are not an array, you get a warning

اما من تو foreach از آرایه ای استفاده کردم که تو فرم ایجاد کردم!

qartalonline
یک شنبه 12 خرداد 1392, 14:03 عصر
شما foreach رو برای چه کاری استفاده کردید؟

diba.kheirkhah
یک شنبه 12 خرداد 1392, 14:06 عصر
برای اینکه به تعداد چک باکس هام بچرخه و تعداد واحدهای اونهایی که checked هست رو با هم جمع کنه و اگر بالای 20 واحد شد به کاربر ارور بده

qartalonline
یک شنبه 12 خرداد 1392, 14:09 عصر
کد شما اشکال زیادی داره .
action فرم اشتباهه.
checkbox ها تکراری هستند و منحصر به درس خاصی نیستند.
ورودی text ها کاربردشون چه وقتی غیرفعال هستند.

شرط برسی مشکل داره.
و....

diba.kheirkhah
یک شنبه 12 خرداد 1392, 14:12 عصر
علامت # رو از action بردارم؟

checkbox ها رو میخواستم به حالت آرایه معرفی کنم چون 30 تا درس هست. خواستم ایندکسی باشه. باید جور دیگه ای معرفیشون کنم؟

text هم فقط میخوام تعداد واحد رو نشون بده و قابل ادیت نباشه. فقط برای جمع زدن میخوام ازش استفاده کنم

qartalonline
یک شنبه 12 خرداد 1392, 14:17 عصر
کد زیر رو امتحان کنید


<!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" />
<title>انتخاب واحد</title>
</head>

<body>

<?php
// Create connection
$con=mysqli_connect("localhost","root","");

// Check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

/*
// Create database

$sql="CREATE DATABASE my_db";
if (mysqli_query($con,$sql))
{
echo "Database my_db created successfully";
}
else
{
echo "Error creating database: " . mysqli_error($con);
}
$con=mysqli_connect("localhost");

$test=mysqli_select_db($con,"my_db") or die(mysqli_error($con));
//$link = mysqli_connect('blah','blah','blah');
//$db = mysqli_select_db($link,$db_name);

// Create table
$sql="CREATE TABLE lesson (
id INT AUTO_INCREMENT,
PRIMARY KEY(id),
lesson VARCHAR(40),
unit int(30),
teacher VARCHAR(30)
);";

// Execute query
if (mysqli_query($con,$sql))
{
echo "Table persons created successfully";
}
else
{
echo "Error creating table: " . mysqli_error($con);
}
*/
if (isset($_POST["submit"]))
{
$count=0;
foreach($_POST['check'] as $count)
{
$count+=$count;
}
echo $count;
}
/*
foreach ($_POST["check"] as $check)
{
$count=$_POST["unit"].value;
$sum=$sum+$count;
}
echo " sum is $sum";
*/
?>

<form name="" id="myform" action="" method="post" >
<br clear="all"/>
<table border="2" align="center" cellpadding="5" dir="rtl" >
<tr align="right" >
<td><label for="check[1]">ریاضی کاربردي</label><input type="checkbox" name="check[1]" id="check[1]" value="2"/></td>
</tr>
<tr align="right">
<td><label for="check[2]">آمار و احتمالات</label><input type="checkbox" name="check[2]" id="check[2]" value="3"/></td>
</tr>
<tr align="right">
<td><label for="check[3]">شیوه ارائه نوشتاري و گفتاري</label><input type="checkbox" name="check[3]" id="check[3]" value="2"/></td>
</tr>
<tr align="right">
<td><label for="check[4]">سخت افزار کامپیوتر</label><input type="checkbox" name="check[4]" id="check[4]" value="1"/></td>
</tr>
</table>

<center>
<input name="submit" value="Submit" type="submit" />
</center>
</form>
</body>
</html>

qartalonline
یک شنبه 12 خرداد 1392, 14:30 عصر
کد زیر رو امتحان کنید:

<!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" />
<title>انتخاب واحد</title>
</head>

<body>

<?php
/*
// Create connection
$con=mysqli_connect("localhost","root","");

// Check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
*/
/*
// Create database

$sql="CREATE DATABASE my_db";
if (mysqli_query($con,$sql))
{
echo "Database my_db created successfully";
}
else
{
echo "Error creating database: " . mysqli_error($con);
}
$con=mysqli_connect("localhost");

$test=mysqli_select_db($con,"my_db") or die(mysqli_error($con));
//$link = mysqli_connect('blah','blah','blah');
//$db = mysqli_select_db($link,$db_name);

// Create table
$sql="CREATE TABLE lesson (
id INT AUTO_INCREMENT,
PRIMARY KEY(id),
lesson VARCHAR(40),
unit int(30),
teacher VARCHAR(30)
);";

// Execute query
if (mysqli_query($con,$sql))
{
echo "Table persons created successfully";
}
else
{
echo "Error creating table: " . mysqli_error($con);
}
*/
if (isset($_POST["submit"]))
{
$u=0;
foreach($_POST['check'] as $count)
{
$u=$u+$count;
}
echo $u;
}
/*
foreach ($_POST["check"] as $check)
{
$count=$_POST["unit"].value;
$sum=$sum+$count;
}
echo " sum is $sum";
*/
?>

<form name="" id="myform" action="" method="post" >
<br clear="all"/>
<table border="2" align="center" cellpadding="5" dir="rtl" >
<tr align="right" >
<td><label for="check[1]">ریاضی کاربردي</label><input type="checkbox" name="check[1]" id="check[1]" value="2"/></td>
</tr>
<tr align="right">
<td><label for="check[2]">آمار و احتمالات</label><input type="checkbox" name="check[2]" id="check[2]" value="3"/></td>
</tr>
<tr align="right">
<td><label for="check[3]">شیوه ارائه نوشتاري و گفتاري</label><input type="checkbox" name="check[3]" id="check[3]" value="2"/></td>
</tr>
<tr align="right">
<td><label for="check[4]">سخت افزار کامپیوتر</label><input type="checkbox" name="check[4]" id="check[4]" value="1"/></td>
</tr>
</table>

<center>
<input name="submit" value="Submit" type="submit" />
</center>
</form>
</body>
</html>

diba.kheirkhah
یک شنبه 12 خرداد 1392, 14:32 عصر
ممنون از شما

جواب کامل رو بهم داد

لطف کردید

H:Shojaei
یک شنبه 12 خرداد 1392, 14:47 عصر
سلام
البته اين هم ميشه:
به روش خودتون


<!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" />
<title>انتخاب واحد</title>
</head>

<body>

<?php
// Create connection
$con=mysqli_connect("localhost","root","");

// Check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

/*
// Create database

$sql="CREATE DATABASE my_db";
if (mysqli_query($con,$sql))
{
echo "Database my_db created successfully";
}
else
{
echo "Error creating database: " . mysqli_error($con);
}
$con=mysqli_connect("localhost");

$test=mysqli_select_db($con,"my_db") or die(mysqli_error($con));
//$link = mysqli_connect('blah','blah','blah');
//$db = mysqli_select_db($link,$db_name);

// Create table
$sql="CREATE TABLE lesson (
id INT AUTO_INCREMENT,
PRIMARY KEY(id),
lesson VARCHAR(40),
unit int(30),
teacher VARCHAR(30)
);";

// Execute query
if (mysqli_query($con,$sql))
{
echo "Table persons created successfully";
}
else
{
echo "Error creating table: " . mysqli_error($con);
}
*/

if (isset($_POST["submit"]))
{
$x=0;
//echo $_POST["unit"][0];


for($i=0;$i<count($_POST['check']);$i++)
{
if (isset($_POST['check'][$i]))
$x=$x+$_POST["unit"][$i];
}
echo $x;
}
/*
foreach ($_POST["check"] as $check)
{
$count=$_POST["unit"].value;
$sum=$sum+$count;
}
echo " sum is $sum";
*/
?>

<form name="" id="myform" action="#" method="post" >
<br clear="all"/>
<table border="2" align="center" cellpadding="5" dir="rtl" >
<tr align="right" >
<td width="3"><input type="checkbox" name="check[]" /></td>
<td >ریاضی کاربردي</td>
<td ><input type="hidden" name="unit[]" value="2" />2واحد</td>
</tr>
<tr align="right">
<td>آمار و احتمالات<input type="checkbox" name="check[]" value="" /></td>
<td ><input type="hidden" name="unit[]" value="2" />2واحد</td>
</tr>
<tr align="right">
<td>شیوه ارائه نوشتاري و گفتاري<input type="checkbox" name="check[]" value="" /></td>
<td ><input type="hidden" name="unit[]" value="2" />2واحد</td>
</tr>
<tr align="right">
<td>سخت افزار کامپیوتر2<input type="checkbox" name="check[]" value="" /></td>
<td ><input type="hidden" name="unit[]" value="2" />2واحد</td>
</tr>
</table>

<center>
<input name="submit" value="Submit" type="submit" />
</center>
</form>
</body>
</html>