2017-12-13 10 views
-1

줄 바꿈으로 구분하여 원하는만큼 항목을 입력 할 수있는 텍스트 영역이 있습니다.preg_split을 사용하여 데이터베이스에 배열 저장

그런 다음, PHP 파일에서 나는 값을 얻을이 있습니다

$colors = $_POST["colors"]; 

foreach (preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value) 
{ 

    echo $value.'<br>'; 

} 

항목은 내가 모든 항목을 볼 수있는 코드로하지만, 한 줄에 올바르게 전달됩니다. 데이터베이스에 저장하려고했지만 한 행에서만 수행합니다.

예를 들어, 내가 텍스트 영역이 입력하면 :

Red 
    Black 
    Dark Black 
Blue  

그것은 다음과 같이 인쇄 :

입니다
Red Black Dark Black Blue 

, 그것은 시작과 끝에서 모든 공백을 제거, 중간에있는 것 (정확하게 내가 원하는 것)이 아닙니다.

내 문제는 내가 배열을 다루는 방식에 있습니다. 한 줄에 요소를 인쇄하고 따라서 행 당 하나의 색을 데이터베이스에 저장할 수 있습니다.

아무도 도와 줄 수 있습니까?

고마워요!

+0

배열을 언급했지만 질문에 배열이 없습니다. 질문을 명확히 해 주시겠습니까? –

+0

_ "처음부터 끝까지 모든 공백을 제거합니다."_ - 아니요, 실제로 제거되지 않았습니다. 공백을 보존하지 않고 컨텍스트에서 이것을 보았을뿐입니다. 단일 공백 ​​문자가 표시되면 나타납니다 (일반 HTML 동작이라고도 함). – CBroe

+1

그 외에도 실제로 여기에서 묻고 자하는 것이 명확하지 않습니다. 당신은 이미 반복문을 가지고 있으며, 내부에서 그러한 각각의 "줄"에 접근 할 수 있습니다. 그래서 당신이 그것을 데이터베이스에 쓰고 싶다면 실제로해야합니다. 당신이 가지고있는 _problem_은 무엇입니까? – CBroe

답변

1

예에서 $value은 문자열입니다.

$myarray[]=$value; 

당신이 그것을 첫 번째 장소를 echo 수 있다는 사실은 그 배열이 아닌 의미 : 당신이 배열에 데이터를 삽입하려면 다음을 수행해야합니다. 그래서 foreach에 위에서 제공 한 코드 줄을 추가하십시오. 그런 다음 print_r($myarray)을 foreach 외부에 사용하고 배열의 구조를 볼 수 있습니다.

코드에 따라 foreach 내부에서 쿼리를 실행하고 값을 데이터베이스에 저장할 수 있습니다. 그럴 필요가 없습니다.

첫번째 방법 :

그래서 당신이 뭔가를 할 수 있습니다

<?php 
$colors = $_POST["colors"]; 

//declare your array 
$myArray=array(); 

foreach (preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value) 
{ 
    //insert data inside your array 
    $myArray[]=$value; 

} 

//output of your new array 
print_r($myArray); 

또는 제 2 방법으로 간단 :

<?php 
$colors = $_POST["colors"]; 

$servername = "my_server_name"; 
$username = "username"; 
$password = "password"; 
$dbname = "my_db_name"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

foreach (preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value) 
{ 

    //$value variable holds all the info you need so you just do the INSERT QUERY inside the foreach 

    $stmt = $conn->prepare("INSERT INTO my_table (my_column) VALUES (?)"); 
    $stmt->bind_param("s", $value); 
    $stmt->execute(); 



} 

당신은 단지 foreach 내부 쿼리를 수행. 준비된 문장을 사용해야합니다.

+2

좋은 답변입니다. 좀 더 강력하게 만들 것을 권합니다.예를 들어, PHP 알림을 피하기 위해 먼저 배열 변수를 선언해야합니다. OP에서 _where_ 코드가 _their_ 코드로 들어가는 것을 보는 것이 유용 할 것입니다. –

+0

귀하의 조언을 따랐습니다. 나는 가능한 한 분석적으로 노력했다. – pr1nc3