PDA

View Full Version : دخیره گروهی اطلاعات در دیتابیس



هانیه دره باغی
سه شنبه 24 تیر 1393, 09:17 صبح
سلام
من یه جدول دارم داخل اون نمره وارد می کنم همراه با ش دانشجویی می خوام وقتی دکمه ارسال کلیک شد همه ازلاعات درون دیتا بیسم ذخیره بشه اما نمی شه
اگه می شه راهنمایی کنید این کدهای فرمم هست

if(isset($_GET['insertgrade']))
{
?>
<div class="row">
<form class="form-horizontal" method="post" action="" enctype="multipart/form-data">
<fieldset>
<legend class="section">درج نمرات دانشجویان</legend>
<div class="control-group">
<label class="control-label" for="normal-field">نام درس </label>
<div class="controls form-group">
<select class="form-control" style="width:23%" name="namecourse" id="select">
<?php
$result=doquery("SELECT DISTINCT namecourse FROM course where userid='".$_SESSION['userid']."'");

if($result->num_rows)
{
while($row=mysqli_fetch_array($result))
{
?>
<option><?php echo $row['namecourse'];?></option>

<?php
}
}
?> </select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="normal-field">نام دانشگاه</label>
<div class="controls form-group">
<select class="form-control" style="width:23%" name="nameuni" id="select">
<?php
$result=doquery("SELECT DISTINCT nameuni FROM course where userid='".$_SESSION['userid']."'");

if($result->num_rows)
{
while($row=mysqli_fetch_array($result))
{
?>
<option><?php echo $row['nameuni'];?></option>

<?php
}
}
?> </select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="normal-field">تاریخ درج </label>
<div class="controls form-group">
<input type="text" class="form-control" name="date" id="normal-field" placeholder="date " />
</div>
</div>

<table class="table table-striped table-bordered" style="margin-right:60px; width:800px">
<thead>
<tr>
<th width="20%;"> ردیف</th>
<th width="50%;">
<select class="form-control" style="width:100%;" name="title" id="degree">
<option>نام ونام خانوادگی</option>
<option>شماره دانشجویی</option>
</select>
</th>
<th width="50%;"> نمره</th>
</tr>
</thead>
<tbody>
<tr>
<td >
<input style="color:#FFF" type="text" id="normal-field" class="form-control" style="width:100%;"/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="title" class="form-control" style="width:100%; "/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="grade" class="form-control" style="width:100%;" />
</td>
</tr>
<tr>
<td >
<input style="color:#FFF" type="text" id="normal-field" class="form-control" style="width:100%;"/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="title" class="form-control" style="width:100%; "/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="grade" class="form-control" style="width:100%;" />
</td>
</tr>
<tr>
<td >
<input style="color:#FFF" type="text" id="normal-field" class="form-control" style="width:100%;"/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="title" class="form-control" style="width:100%; "/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="grade" class="form-control" style="width:100%;" />
</td>
</tr>
<tr>
<td >
<input style="color:#FFF" type="text" id="normal-field" class="form-control" style="width:100%;"/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="title" class="form-control" style="width:100%; "/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="grade" class="form-control" style="width:100%;" />
</td>
</tr>
<tr>
<td >
<input style="color:#FFF" type="text" id="normal-field" class="form-control" style="width:100%;"/>
</tbody>
</table>
</fieldset>
<div align="center" style=" height:92px; margin-left:20px; margin-right:-5px" class="form-actions">
<input style="margin-right:390px ; margin-top:20px"class="btn btn-warning" type="submit" name="sendgrade" value="ارسال"/>
<input style="margin-right:40px; margin-top:20px " class="btn btn-warning" type="reset" name="clear" value="پاک کردن"/>
</div>
</form>
</div>

<?php
}

?>
</div>
</div> </td>


این هم کدهای پشت دکمه ام

if(isset($_POST['sendgrade']))
{
for($i=0;$i<21;$i++)
{
$title[]=$_POST['title'];
$grade[]=$_POST['grade'];
}
$namecourse=$_POST['namecourse'];
$nameuni=$_POST['nameuni'];
$date=$_POST['date'];
if(doquery("INSERT INTO `result` SET `title`=' ".$title." ',`grade`=' " .$grade." ',
`namecourse`=' " .$namecourse." ',`nameuni`=' " .$nameuni." ',`date`=' " .$date." ',
`userid`=' " .$_SESSION['userid']." ' "))
{
echo'با تشکر ';

}
else
{
echo'ارسال با مشکل روبه ره شده است ';
}
}

درون دیتابیسم به جای title و grade کلمه array ذخیره می شه
لطفا راهنمایی کنید خیلی فوریه
من دارم پروژه دانشگاهمو می نویسم البته آخراش باید تا آخر تیر تحویل بدم
یه سری سوال دارم اگه کسی می تونه کمکم کنه ممنون می شم اطلاع بده

metal gear solid 4
سه شنبه 24 تیر 1393, 10:20 صبح
for($i=0;$i<21;$i++)
{
$title[]=$_POST['title'];
$grade[]=$_POST['grade'];
}


این تیکه از کد شما مقادیر پست رو داخل آرایه grade و title میریزه. طبیعیه که شما در بانکتون کلمه ی Array رو ببینید. چون grade و title رو آرایه تعریف کردید
نمیدونم هدفتون چیه. اما اگر میخواهید لیست نمرات رو نگه دارید. یک جدول جداگانه بسازید.

هانیه دره باغی
سه شنبه 24 تیر 1393, 10:29 صبح
ببینید یه جدول به نام result دارم که درون نمرات وش دانشجویی یا نام دانشجویان بر حسب انتخاب استاد و نام درس ودانشگاه درون اون ذخیر می شه
درون فرمم یه جدول قرار دادم که در هر سطر آن نمره وش دانشجویی وارد می شه که 20 رکورد تعریف کردن برای اون.
می خوام وقتی ارسال کلیک شد اطلاعات وارد شده درون سطر ها در جدول result درون دیتابیسم ذخیره بشه
اگه آرایه تعریف نکنم فقط سطر آخر ذخیره می شه
به خاطر همین آرایه تعریف کردم تا همه مقادیر تکس باکس ها درون آن قرار بگیره سپس به دیتابیس ارسال بشه
نمی دونم متوجه منظورم شدید یا نه

prans.info
سه شنبه 24 تیر 1393, 10:40 صبح
اینپوت ها رو باید اینطوری نیم گذاری کنید
<input name="title[]"> تا بصورت آرایه ای ذخیره بشه ...
برای ذخیره در دیتابیس :




<?php
if(isset($_POST['sendgrade'])){
$t = $_POST['title'];
$num = 0;
foreach ($t as $t2) {
$namecourse=$_POST['namecourse'][$num];
$grade=$_POST['grade'][$num];
$title=$t2;
$nameuni=$_POST['nameuni'][$num];
$date=$_POST['date'][$num];
if($date!='' and $nameuni!='' and $title!='' and $grade!='' and $namecourse!=''){
if(doquery("INSERT INTO `result` SET `title`=' ".$title." ',`grade`=' " .$grade." ',`namecourse`=' " .$namecourse." ',`nameuni`=' " .$nameuni." ',`date`=' " .$date." ',`userid`=' " .$_SESSION['userid']." ' "))
{
echo'با تشکر ';
}
else
{
echo'ارسال با مشکل روبه ره شده است ';
}
}
$num++;
}
}
?>


در ضمن منطق و امنیت اسکریپتتون کلا مشکل داره ;)

metal gear solid 4
سه شنبه 24 تیر 1393, 10:41 صبح
با اسکریپت فعلیتون کلاً به مشکل میخورید. شما تنها یکبار آیدی کاربر رو ثبت میکنید که اونم آیدی کاربر فعلیه و 20 بار میخواید نمره ثبت کنید!! نمیدونم. من متوجه نمیشم شما قصد چکاری دارید. متاسفم. شاید دوستان بتونن کمک کنن.

هانیه دره باغی
سه شنبه 24 تیر 1393, 10:54 صبح
اینپوت ها رو باید اینطوری نیم گذاری کنید
<input name="title[]"> تا بصورت آرایه ای ذخیره بشه ...
برای ذخیره در دیتابیس :




<?php
if(isset($_POST['sendgrade'])){
$t = $_POST['title'];
$num = 0;
foreach ($t as $t2) {
$namecourse=$_POST['namecourse'][$num];
$grade=$_POST['grade'][$num];
$title=$t2;
$nameuni=$_POST['nameuni'][$num];
$date=$_POST['date'][$num];
if($date!='' and $nameuni!='' and $title!='' and $grade!='' and $namecourse!=''){
if(doquery("INSERT INTO `result` SET `title`=' ".$title." ',`grade`=' " .$grade." ',`namecourse`=' " .$namecourse." ',`nameuni`=' " .$nameuni." ',`date`=' " .$date." ',`userid`=' " .$_SESSION['userid']." ' "))
{
echo'با تشکر ';
}
else
{
echo'ارسال با مشکل روبه ره شده است ';
}
}
$num++;
}
}
?>


در ضمن منطق و امنیت اسکریپتتون کلا مشکل داره ;)

این error رو می ده
Notice: Uninitialized string offset: 4 in C:\xampp\htdocs\portal\panel.php on line 38
ولی اطلاعات درون جدول ذخیره می شه
همچنین به تعداد رکوردهای دخیره شده پیغام چاپ می کنه
می شه راهنمایی بفرمایید برای ذخیره نمرات جه کار کنم؟

prans.info
سه شنبه 24 تیر 1393, 11:02 صبح
برای بررسی ارور فایل پنل رو بزارید اینجا ...
برای اینکه هر بار که اطلاعات تویه دیتابیس اینسرت میشه پیام نده اون شرط و else رو حذف کنید و آخر کد یدونه پیام بزارید ...
مگه الان نمرات ذخیره نمیشه ؟

هانیه دره باغی
سه شنبه 24 تیر 1393, 11:07 صبح
چرا دخیره می شه
ولی مثلا مقدار فیلد تاریخ هر عددش درون یک سطر دخیره می شه یا فیلد نام دانشگاه ونام درس هم همین طور هر حرفش درون یه سطر از جدل قرار می گیره

prans.info
سه شنبه 24 تیر 1393, 11:16 صبح
چرا دخیره می شه
ولی مثلا مقدار فیلد تاریخ هر عددش درون یک سطر دخیره می شه یا فیلد نام دانشگاه ونام درس هم همین طور هر حرفش درون یه سطر از جدل قرار می گیره
یه عکس بدید تا متوجه منظورتون بشم

هانیه دره باغی
سه شنبه 24 تیر 1393, 11:24 صبح
یه توضیح هم می شه درمورد کدتون بدین؟

prans.info
سه شنبه 24 تیر 1393, 11:33 صبح
اینپوت های تاریخ و... رو هم بصورت [] کردید ؟

prans.info
سه شنبه 24 تیر 1393, 11:42 صبح
یه توضیح هم می شه درمورد کدتون بدین؟
اطلاعات متغییر $_POST['title'] در متغییر $t ذخیره میشه .
با foreach یکی یکی بصورت چرخه آرایه های $t انتساب داده میشه به $t2 و در نتیجه یکی یکی مقادیر ارسال شده خوانده میشه .
متغییر $num برابر 0 هست و هر بار هم که چرخه foreach میگرده یدونه بهش اضافه میشه .
از متغییر $num هم استفاده می کنیم برای خوندن بقیه موارد (آرایه ها) $_POST ...
در ادامه چک میشه که آیا همه موارد پر شده یا نه و در نتیجه اطلاعات در دیتابیس ذخیره میشه

هانیه دره باغی
سه شنبه 24 تیر 1393, 11:42 صبح
بله بصورت [] کردم ولی فقط سطر اول رو دخیره می کنه

prans.info
سه شنبه 24 تیر 1393, 11:52 صبح
بله بصورت [] کردم ولی فقط سطر اول رو دخیره می کنه
لطف کنید هر تغییری که انجام میدید کد رو قرار بدید و از مشکلات عکس قرار بدید ...

هانیه دره باغی
سه شنبه 24 تیر 1393, 11:57 صبح
if(isset($_POST['sendgrade'])){
$t = $_POST['title'];
$num = 0;
foreach ($t as $t2) {
$namecourse=$_POST['namecourse'][$num];
$grade=$_POST['grade'][$num];
$text=$_POST['text'][$num];
$title=$t2;
$nameuni=$_POST['nameuni'][$num];
$date=$_POST['date'][$num];
if($date!='' and $nameuni!='' and $title!='' and $grade!='' and $namecourse!=''and $text!='')
{
doquery("INSERT INTO `result` SET `title`=' ".$title." ',`grade`=' " .$grade." ',`namecourse`=' " .$namecourse." ',`nameuni`=' " .$nameuni." ',`date`=' " .$date." ',`text`=' " .$text." '`userid`=' " .$_SESSION['userid']." ' ");

}
$num++;
}
}

این هم کدهای فرمم

if(isset($_GET['insertgrade']))
{
?>
<div class="row">
<form class="form-horizontal" method="post" action="" enctype="multipart/form-data">
<fieldset>
<legend class="section">درج نمرات دانشجویان</legend>
<div class="control-group">
<label class="control-label" for="normal-field">نام درس </label>
<div class="controls form-group">
<select class="form-control" style="width:23%" name="namecourse[]" id="select">
<?php
$result=doquery("SELECT DISTINCT namecourse FROM course where userid='".$_SESSION['userid']."'");

if($result->num_rows)
{
while($row=mysqli_fetch_array($result))
{
?>
<option><?php echo $row['namecourse'];?></option>

<?php
}
}
?> </select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="normal-field">نام دانشگاه</label>
<div class="controls form-group">
<select class="form-control" style="width:23%" name="nameuni[]" id="select">
<?php
$result=doquery("SELECT DISTINCT nameuni FROM course where userid='".$_SESSION['userid']."'");

if($result->num_rows)
{
while($row=mysqli_fetch_array($result))
{
?>
<option><?php echo $row['nameuni'];?></option>

<?php
}
}
?> </select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="normal-field">تاریخ درج </label>
<div class="controls form-group">
<input type="text" class="form-control" name="date[]" id="normal-field" placeholder="date " />
</div>
</div>

<table class="table table-striped table-bordered" style="margin-right:60px; width:800px">
<thead>
<tr>
<th width="50%;">
<select class="form-control" style="width:100%;" name="text[]" id="degree">
<option>نام ونام خانوادگی</option>
<option>شماره دانشجویی</option>
</select>
</th>
<th width="50%;"> نمره</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="title[]" class="form-control" style="width:100%; "/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="grade[]" class="form-control" style="width:100%;" />
</td>
</tr>
</tbody>
</table>
</fieldset>
<div align="center" style=" height:92px; margin-left:20px; margin-right:-5px" class="form-actions">
<input style="margin-right:390px ; margin-top:20px"class="btn btn-warning" type="submit" name="sendgrade" value="ارسال"/>
<input style="margin-right:40px; margin-top:20px " class="btn btn-warning" type="reset" name="clear" value="پاک کردن"/>
</div>
</form>
</div>

<?php
}

?>
</div>
</div>

prans.info
سه شنبه 24 تیر 1393, 12:26 عصر
اینا رو تست کنید :


if(isset($_POST['sendgrade'])){
$t = $_POST['title'];
$num = 0;
$nameuni=$_POST['nameuni'];
$namecourse=$_POST['namecourse'];
$text=$_POST['text'];
$date=$_POST['date'];
foreach ($t as $t2) {
$grade=$_POST['grade'][$num];
$title=$t2;
if($date!='' and $nameuni!='' and $title!='' and $grade!='' and $namecourse!=''and $text!='')
{
doquery("INSERT INTO `result` SET `title`=' ".$title." ',`grade`=' " .$grade." ',`namecourse`=' " .$namecourse." ',`nameuni`=' " .$nameuni." ',`date`=' " .$date." ',`text`=' " .$text." '`userid`=' " .$_SESSION['userid']." ' ");
}
$num++;
}
}




if(isset($_GET['insertgrade']))
{
?>
<div class="row">
<form class="form-horizontal" method="post" action="" enctype="multipart/form-data">
<fieldset>
<legend class="section">درج نمرات دانشجویان</legend>
<div class="control-group">
<label class="control-label" for="normal-field">نام درس </label>
<div class="controls form-group">
<select class="form-control" style="width:23%" name="namecourse" id="select">
<?php
$result=doquery("SELECT DISTINCT namecourse FROM course where userid='".$_SESSION['userid']."'");


if($result->num_rows)
{
while($row=mysqli_fetch_array($result))
{
?>
<option><?php echo $row['namecourse'];?></option>

<?php
}
}
?> </select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="normal-field">نام دانشگاه</label> <div class="controls form-group"> <select class="form-control" style="width:23%" name="nameuni" id="select">
<?php
$result=doquery("SELECT DISTINCT nameuni FROM course where userid='".$_SESSION['userid']."'");

if($result->num_rows)
{
while($row=mysqli_fetch_array($result))
{
?>

<option><?php echo $row['nameuni'];?></option>

<?php
}
}
?> </select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="normal-field">تاریخ درج </label>
<div class="controls form-group">
<input type="text" class="form-control" name="date" id="normal-field" placeholder="date " />
</div>
</div>


<table class="table table-striped table-bordered" style="margin-right:60px; width:800px">
<thead>
<tr>
<th width="50%;">
<select class="form-control" style="width:100%;" name="text" id="degree">
<option>نام ونام خانوادگی</option>
<option>شماره دانشجویی</option>
</select>
</th>
<th width="50%;"> نمره</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="title[]" class="form-control" style="width:100%; "/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="grade[]" class="form-control" style="width:100%;" />

</td>
</tr>
</tbody>
</table>
</fieldset>

<div align="center" style=" height:92px; margin-left:20px; margin-right:-5px" class="form-actions">
<input style="margin-right:390px ; margin-top:20px"class="btn btn-warning" type="submit" name="sendgrade" value="ارسال"/>
<input style="margin-right:40px; margin-top:20px " class="btn btn-warning" type="reset" name="clear" value="پاک کردن"/>
</div>
</form>
</div>

<?php
}

?>
</div>
</div>

هانیه دره باغی
سه شنبه 24 تیر 1393, 12:46 عصر
کتاسفانه حالا اصلا دیگه ثبت نمی کنه:گریه:
من تست کردم اصلا اطلاعاتی از فرم پست نمی شه که بخواد درون متغیییرها دخیره بشه

if(isset($_POST['sendgrade']))
{
echo $_POST['title'];
/*$num = 0;
$nameuni=$_POST['nameuni'];
$namecourse=$_POST['namecourse'];
$text=$_POST['text'];
$date=$_POST['date'];
foreach ($t as $t2) {
$grade=$_POST['grade'][$num];
$title=$t2;
if($date!='' and $nameuni!='' and $title!='' and $grade!='' and $namecourse!=''and $text!='')
{
doquery("INSERT INTO `result` SET `title`=' ".$title." ',`grade`=' " .$grade." ',`namecourse`=' " .$namecourse." ',`nameuni`=' " .$nameuni." ',`date`=' " .$date." ',`text`=' " .$text." '`userid`=' " .$_SESSION['userid']." ' ");
}
$num++;
}*/
}

در این صورت کلمه array چاپ می شه وقتی می گم title ,grade چاپ بشه

prans.info
سه شنبه 24 تیر 1393, 13:03 عصر
if(isset($_POST['sendgrade'])){

$t = $_POST['title'];
$num = 0;
$nameuni=$_POST['nameuni'];
$namecourse=$_POST['namecourse'];
$text=$_POST['text'];
$date=$_POST['date'];
foreach ($t as $t2) {
$grade=$_POST['grade'][$num];
$title=$t2;
if($date!='' and $nameuni!='' and $title!='' and $grade!='' and $namecourse!=''and $text!='') {
doquery("INSERT INTO `result` SET `title`=' ".$title." ',`grade`=' " .$grade." ',`namecourse`=' " .$namecourse." ',`nameuni`=' " .$nameuni." ',`date`=' " .$date." ',`text`=' " .$text." ',`userid`=' " .$_SESSION['userid']." ' ");
}
$num++;
}
}

هانیه دره باغی
سه شنبه 24 تیر 1393, 13:13 عصر
جناب درست شد
برداشتم به جای اینکه 20 سطر رو کپی کنم یه حلقهfor گذاشتم


<?php
for($i=1;$i<=20;$i++)
{
?>
<tr>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="title[]" class="form-control" style="width:100%; "/>
</td>
<td>
<input style="color:#FFF" type="text" id="normal-field" name="grade[]" class="form-control" style="width:100%;" />

</td>
</tr>
<?php
}
?>
البته اصلش به خاطر کدهای شما بود
ولی من نفهمیدم این $num چیکار می کرد؟

prans.info
سه شنبه 24 تیر 1393, 13:25 عصر
خدا رو شکر
منطقی نیست هر بار که صفحه اجرا میشه چرخه اجرا بشه شما یه بار ارجا بکن بعد از سورس اون 20 تا رو بردار بصورت استاتیک بزار اونجا (نظر شخصی ...) .
$num هم ساده هست بالا هم توضیح دادم
اول مقدارش 0 هست بعد که هر بار چرخه foreach میچرخه یه مقدار (+1) بهش اضافه میشه .
برای خوندن اطلاعات $_POST['grade'] بصورت به ترتیب و منظم ازش استفاده شده ...