Вкарване на масив в база данни

amgcompany

Registered
Здравейте,

Напоследък имам затруднения с вкарването на масив в БД. На страницата имам няколко чекбокса и това което искам да направя е като избера няколко от тях да ги вкара всички в БД, а не само един. Пробвах с imlode проблемът е че ми изкарва грешка, а и ако не се лъжа imlode вкарва информацията като низ, а аз после искам да търся по един от параметрите вкарани в БД.

Ето вижте какво съм написал до сега:

PHP:
$type_object = implode(',', $_POST['type_of_object']);

HTML форма

PHP:
<?php 
							$q_type = mysql_query("SELECT obj_id, obj_name FROM type_objects") or die(mysql_error());
							while($row_qtype = mysql_fetch_array($q_type)){ 
						  ?>
							<label><input name="type_of_object[]" type="checkbox" value="<?php echo $row_qtype['obj_id']; ?>"> <?php echo $row_qtype['obj_name']; ?></label> <br>
						  <?php
							}
						  ?>

Този код работи и добавя информацията в БД, но ако не сам избрал нищо и натисна бутона ми изкарва ето тези грешки :


Notice: Undefined index: type_of_object in C:/add_object.php on line 21

Warning: implode() [function.implode]: Invalid arguments passed in C:\add_object.php on line 21

Ако имате някакви предложения за решение, ще съм благодарен :)
 
Notice: Undefined index: type_of_object in C:/add_object.php on line 21
идва че не си подал стойност на параметъра , от това идва можеби и грешката с implode(); Трябва ти проверка с isSet - дали е сетната променлива:
Замени
PHP:
$type_object = implode(',', $_POST['type_of_object']);
със
PHP:
$promenliva = $_POST['type_of_object'];
if(isSet($promenliva))
{
$type_object = implode(',',$promenliva );
}

Не е лошо примерно да си филтрираш и данните :

$promenliva = addslashes(htmlspecialchars($_POST['type_of_object']));
if(isSet($promenliva))
{
$type_object = implode(',',$promenliva );
}

Провери си някъде дали подаваш на полето $_POST['type_of_object'];
стойността му правилно ! :)
 
dakata__92 каза:
Notice: Undefined index: type_of_object in C:/add_object.php on line 21
идва че не си подал стойност на параметъра , от това идва можеби и грешката с implode(); Трябва ти проверка с isSet - дали е сетната променлива:
Замени
PHP:
$type_object = implode(',', $_POST['type_of_object']);
със
PHP:
$promenliva = $_POST['type_of_object'];
if(isSet($promenliva))
{
$type_object = implode(',',$promenliva );
}

Не е лошо примерно да си филтрираш и данните :

$promenliva = addslashes(htmlspecialchars($_POST['type_of_object']));
if(isSet($promenliva))
{
$type_object = implode(',',$promenliva );
}

Провери си някъде дали подаваш на полето $_POST['type_of_object'];
стойността му правилно ! :)

Абсолютно никаква промяна, все същото си стои
 
Eто ти пример :

PHP:
if(isset($_POST['team']))
{	
foreach($_POST['team'] as $value)
{	
$insert=mysql_query("INSERT INTO team('team') VALUES ('$value')");	
}
}
<html>
<body>
<form method="post" action="chk123.php">
<input type="checkbox" name="team[]" value="AG"> Argentina 
<input type="checkbox" name="team[]" value="GE"> Germany
<input type="checkbox" name="team[]" value="BR"> Brazil 
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
 
HTML:
  <td width="50%" valign="top">
						  <div class="step_prav">2. Моля изберете тип на обекта:</div>
						  <br>
						  <?php 
							$q_type = mysql_query("SELECT obj_id, obj_name FROM type_objects") or die(mysql_error());
							while($row_qtype = mysql_fetch_array($q_type)){ 
						  ?>
							<label><input name="type_of_object[]" type="checkbox" value="<?php echo $row_qtype['obj_id']; ?>"> <?php echo $row_qtype['obj_name']; ?></label> <br>
						  <?php
							}
						  ?>
						  
					  </td>

Аз изкарвам информацията за чекбоксовете от БД и заради това съм използвал PHP за формата. А ако ще свърши работа, так изглежда в изходния код:


HTML:
						  							<label><input name="type_of_object[]" type="checkbox" value="1"> телевизор</label> <br>

						  							<label><input name="type_of_object[]" type="checkbox" value="2"> лаптоп </label> <br>

						  							<label><input name="type_of_object[]" type="checkbox" value="3"> слушалки</label> <br>

						  							<label><input name="type_of_object[]" type="checkbox" value="4"> мишка</label> <br>

						  							<label><input name="type_of_object[]" type="checkbox" value="5"> клавиатура</label> <br>
 
dakata__92 каза:
Eто ти пример :

PHP:
if(isset($_POST['team']))
{	
foreach($_POST['team'] as $value)
{	
$insert=mysql_query("INSERT INTO team('team') VALUES ('$value')");	
}
}
<html>
<body>
<form method="post" action="chk123.php">
<input type="checkbox" name="team[]" value="AG"> Argentina 
<input type="checkbox" name="team[]" value="GE"> Germany
<input type="checkbox" name="team[]" value="BR"> Brazil 
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>

Това също сам го мислил, но ако не се лъжа добавя всяко на нов ред, а аз не добавям само това във БД, примерно имам "име,фамилия, егн, адрес и масива". Понеже нямам кой знае какъв опит с PHP как би било добре да се структурира в БД всичко това, как да вкарам информацията без да има проблеми. Защото според мен не би било много оптимизирано ако добавя примерно 5 реда със заявки в които е различна само една колона. Не знам дали съм успял да обясня правилно :)
 
Ъпдейтваш при ид-то където искаш като запазваш инфото :)

PHP:
if(isset($_POST['team'])){    
//Тук първо инсъртваш    
foreach($_POST['team'] as $value){       
$insert=mysql_query("UPDATE team kolona=CONCAT(`kolona`,'$value') WHERE id='$id' ");      
}
}
<html><body><form method="post" action="chk123.php"><input type="checkbox" name="team[]" value="AG"> Argentina <input type="checkbox" name="team[]" value="GE"> Germany<input type="checkbox" name="team[]" value="BR"> Brazil <input type="submit" name="submit" value="submit"></form></body></html>
 
Цаката е да инсъртнеш без да добавяуш чекбоксовете след което веднага да извадиш ид-то на последния запис и да ъпдейтваш :
Eто така вадиш ид то последното и се получава -
PHP:
$our = mysql_query("SELECT id FROM table ORDER BY id DESC LIMIT 1");

PHP:
if(isset($_POST['team'])){    
$insert=mysql_query("INSERT INTO team('ip') VALUES ('$ip')");
$select= mysql_query("SELECT id FROM table ORDER BY id DESC LIMIT 1");
while($r=mysql_fetch_array($select))
{ 
$id = $r['id'];
} 
 foreach($_POST['team'] as $value){     
 $update=mysql_query("UPDATE team kolona=CONCAT(`kolona`,'$value') WHERE id='$id' ");      
}
}
<html><body><form method="post" action="chk123.php"><input type="checkbox" name="team[]" value="AG"> Argentina <input type="checkbox" name="team[]" value="GE"> Germany<input type="checkbox" name="team[]" value="BR"> Brazil <input type="submit" name="submit" value="submit"></form></body></html>
 
amgcompany каза:
Така нищо не добавя.
Първо инсъртваш другата информация, след като стане вадиш последното ID тоест записа който си въвел преди малко и го ъпдейтваш с информацията от чекбоксовете ! Незнам как си подаваш стойностите и какво правиш, но трябва да се получи по линейната структора ! Прати какво правиш малко по-подредено като го въвеждаш във формата тук за да се разчита :)
 
Това е погрешен подход с implode. Когато вкарваш в база данни, то по-добре мини масива със serialize() и го вкарай сериализиран. При изкарване от базата данни просто използвай unserialize() и си го вадиш в чистия му вид.
 

Back
Горе