【解決方法】PHP を使用して Excel データを mysql に挿入しようとするとエラー 500 が発生する

プログラミングQA


ファイル (xlsx) を mysql にアップロードしようとしていますが、送信しようとすると同じエラーが発生し続けます。 「127.0.0.1 は現在、このリクエストを処理できません」。 何かアドバイスはありますか?

私が試したこと:

<?php
	require('Classes/PHPExcel/IOFactory.php');
	
    $servername="localhost";
	$username="omri";
	$password="1234";
	$dbname="omri";
	
	if(isset($_POST['upload'])){
	
	$inputfilename= $_FILES['file']['tmp_name']	;
	$exceldata= array();
	
	$conn= mysqli_connect($servername, $username, $password, $dbname);
	
	if(!$conn){
	die("connection failed: ".mysqli_connect_error());	
	}	
	
	try{
		
	$inputfiletype= PHPExcel_IOFactory::identify($inputfilename);
	$objReader=	PHPExcel_IOFactory::createReader($inputfiletype);
	$objPHPExcel= $objReader ->load($inputfilename);	
		
	}	
		
	catch(Exception $e)
	{
		
	die('error loading file "'.pathinfo($inputfilename, PATHINFO_BASENAME).'": '.$e->getMessage());
		
	}	
	
	$sheet= $objPHPExcel->getSheet(0);	
	$highestrow= $sheet->getHighestRow();	
	$higestcolumn= $sheet->getHighestColumn();
		
	for($row=1; $row<=$highestrow; $row++)
	{
		
	$rowData= $sheet->rangeToArray('A'. $row .':'. $higestcolumn . $row, NULL, TRUE, FALSE );
	$sql= "INSERT INTO restricted (name, id, citizenship, expires) VALUES ('".$rowData[0][0]."','".$rowData[0][1]."','".$rowData[0][2]."','".$rowData[0][3]."')";
	
	if(mysql_query($conn,$sql)){
	$exceldata[]=$rowData[0];
	}
	
	else{
	echo "Error: " . $sql . "<br>" . mysql_error($conn);	
	}	
	}
		
	echo "<table border='1'>";
	foreach($exceldata as $index => $excelraw)
	{
		
	echo "<tr>";
	
	foreach($excelraw as $excelcolumn)
	{
		
	echo "<td>". $excelcolumn . "</td>";
		
	}	
		
	echo "</tr>";
		
	}	
		
	echo "</table>";	
	
	mysql_close($conn);	
	}
	?>
	
<html>
<head>
<meta charset="UTF-8">	
<title>Import Excel</title>
</head>

<body>
	
<form action="" method="post" enctype="multipart/form-data">
	
<input type="file" name="file">
<input type="submit" name="upload" value="upload">	
	
</form>	
	
</body>
</html>

解決策 1

PHP
$sql= "INSERT INTO restricted (name, id, citizenship, expires) VALUES ('".$rowData[0][0]."','".$rowData[0][1]."','".$rowData[0][2]."','".$rowData[0][3]."')";

あなたの質問に対する解決策ではありませんが、別の問題があります。
文字列を連結して SQL クエリを作成しないでください。 遅かれ早かれ、ユーザー入力でそれを行うことになります。これにより、「SQL インジェクション」と呼ばれる脆弱性への扉が開かれます。これは、データベースにとって危険であり、エラーが発生しやすいものです。
名前に一重引用符があると、プログラムがクラッシュします。 ユーザーが「Brian O’Conner」のような名前を入力すると、アプリがクラッシュする可能性があります。これは SQL インジェクションの脆弱性であり、クラッシュは問題の中で最も少なく、悪意のあるユーザー入力であり、すべての資格情報を含む SQL コマンドに昇格されます。
SQL インジェクション – ウィキペディア[^]
SQL インジェクション[^]
例による SQL インジェクション攻撃[^]
PHP: SQL インジェクション – マニュアル[^]
SQL インジェクション防止チート シート – OWASP[^]
専門用語なしで SQL インジェクションを説明するにはどうすればよいですか? – 情報セキュリティ スタック交換[^]

—–
コードを適切にインデントする方法を学びましょう。これにより、その構造が示され、読みやすく、理解するのに役立ちます。 また、構造の間違いを見つけるのにも役立ちます。

PHP
<?php
require('Classes/PHPExcel/IOFactory.php');

$servername="localhost";
$username="omri";
$password="1234";
$dbname="omri";

if(isset($_POST['upload'])){

	$inputfilename= $_FILES['file']['tmp_name']	;
	$exceldata= array();

	$conn= mysqli_connect($servername, $username, $password, $dbname);

	if(!$conn){
		die("connection failed: ".mysqli_connect_error());
	}

	try{

		$inputfiletype= PHPExcel_IOFactory::identify($inputfilename);
		$objReader=	PHPExcel_IOFactory::createReader($inputfiletype);
		$objPHPExcel= $objReader ->load($inputfilename);

	}

	catch(Exception $e)
	{

		die('error loading file "'.pathinfo($inputfilename, PATHINFO_BASENAME).'": '.$e->getMessage());

	}

	$sheet= $objPHPExcel->getSheet(0);
	$highestrow= $sheet->getHighestRow();
	$higestcolumn= $sheet->getHighestColumn();

	for($row=1; $row<=$highestrow; $row++)
	{

		$rowData= $sheet->rangeToArray('A'. $row .':'. $higestcolumn . $row, NULL, TRUE, FALSE );
		$sql= "INSERT INTO restricted (name, id, citizenship, expires) VALUES ('".$rowData[0][0]."','".$rowData[0][1]."','".$rowData[0][2]."','".$rowData[0][3]."')";

		if(mysql_query($conn,$sql)){
			$exceldata[]=$rowData[0];
		}

		else{
			echo "Error: " . $sql . "<br>" . mysql_error($conn);
		}
	}

	echo "<table border='1'>";
	foreach($exceldata as $index => $excelraw)
	{

		echo "<tr>";

		foreach($excelraw as $excelcolumn)
		{

			echo "<td>". $excelcolumn . "</td>";

		}

		echo "</tr>";

	}

	echo "</table>";

	mysql_close($conn);
}
?>

<html>
	<head>
		<meta charset="UTF-8">
		<title>Import Excel</title>
	</head>

	<body>

		<form action="" method="post" enctype="multipart/form-data">
			<input type="file" name="file">
			<input type="submit" name="upload" value="upload">
		</form>

	</body>
</html>

プロのプログラマーのエディターには、この機能と、括弧の一致や構文の強調表示などの他の機能があります。
メモ帳++ホーム[^]
超編集[^]

解決策 2

2023-04-05 08:41:12 (CEST) 例外 ‘PHPExcel_Calculation_Exception’ とメッセージ ‘Sheet1!B2 -> internal error’ が phpExcel\PHPExcel\Cell.php:291 で発生 スタック トレース: #0 companyImport.php(113): PHPExcel_Worksheet->rangeToArray(‘A2:B2’, NULL, true, false) #2 {main}

同じコードでこのエラーが発生しています。 誰でも解決策を教えてもらえますか?

コメント

タイトルとURLをコピーしました