自動タグ作成(4)


phpをインライン入力値として使用するのは問題があることに気づいた.
さらに,for文のphp変数$iは,for文の繰返しに伴って一緒に変化するのではなく,php中の文を最初に実行し,決定した値を出力することが分かった.
したがって,DBから完全な値を取得するコードをphpで記述し,jsonを用いて配列とし,そこから値を取得しvar markerに入れることが望ましい.
phpとjsは別々に使うべきだ.
<script>
			var positions = [1,2,4];
		<?php
			$dsn = "mysql:host = localhost; dbname = tasty; charset = UTF8";
			$pdo = new PDO($dsn, "root", "");
			if($pdo){
				echo "console.log('연결 성공');";
			};
			
			$statement = $pdo->prepare("select R.* from restaurants R LIMIT :kkk");
			$statement -> bindValue('kkk',$row,PDO::PARAM_INT);
			
			$statement->execute();
			$rows = $statement->fetchAll();
			echo 'var postitions = ' . json_encode($rows) . ';';
			?>
			positions.forEach(pos => console.log(pos));
		</script>

配列に含まれている値はよく出力できますが、入力した値は出力できません.
Jsonを使うのは初めてなので、どこが間違っているのかまだ分かりません.
echo "console.log(".json_encode($rows).");";
コンソールに空の配列が表示され、インポート中にエラーが発生する可能性があります.
<script>
			//마커를 담을 배열
			var positions = [];

			//num_rows()의 수만큼 각 행의 정보를 가져와서 마커에 정보를 담기
				<?php
					$query = "select R.* from restaurants R";
					
					$result = mysqli_query($dbcon,$query);
					while($row = mysqli_fetch_assoc($result)){

						$test[] = $row; 
						echo 'var positions = ' . json_encode($test) . ';';
					};
					

			?>
			
		</script>

やっと並んで、見事に持ってきました.
配列を元のルールに合致するフォーマットに変換して、配列を再生成できます.
var markers = [];
for(i = 0; i < positions.length; i++){
  var loc = positions[i].location;
  var [lat, lng] = loc.split(',');
  lat = Number(lat);
  lng = Number(lng);
  
  var marker = {
    index : positions[i].idx,
    title : positions[i].restaurantName,
    latlng : new kakao.maps.LatLng(lat, lng),
  content : '<div class="overlaybox">' +
  '    <div class="boxtitle">'+positions[i].restaurantName+'</div>' +
  '    <div class="first">' +
  '        <div class="triangle"></div>' +
  '        <div class="categori">'+positions[i].categori+'</div>' +
  '    </div>' +
  '    <div class="instaId">'+positions[i].instaId+'</div>' +
  '    <ul class="information">' +
  '        <li class="address">' +
  '            <div class="addr">주소</div>' +
  '            <div class="addr1">'+positions[i].addr1+'</div>' +
  '            <div class="addr2">'+positions[i].addr2+'</div>' +
  '        </li>' +
  '        <li class="review">' +
  '            <div class="review1">한줄평</div>' +
  '            <div class="review2">'+positions[i].review+'</div>' +
  '        </li>' +
  '    </ul>' +
  '</div>'
};
  markers.push(marker);
}
console.log(markers);

データベース内の情報の取得とタグの作成に成功しました