Перейти до змісту

PHP скрипт (проблема)


ModMov

Рекомендовані повідомлення

Опубліковано

Проблема така:

є готовий скрипт, який нехоче працювати, шукаю допомогу, перепробував усе(на мою думку) але нехоче працювати

суть скрипту:

з файлу вводить дані в бд

видається така помилка

Bezimyanni_8321815_8200884.jpg

сам скрипт


<?php
error_reporting(E_ALL & ~E_NOTICE);
$connect = mysql_connect("localhost", "root", "", "bd1pc") ;
@mysql_select_db("code");
$inputFile=@$_FILES[csv][name];
$ext=end(explode('.',$inputFile));
if($ext=='csv')
{
$tmpFile=@$_FILES[csv][tmp_name];
$f = @fopen($tmpFile, 'r');
$contents = @fread($f, 10000);
fclose($f);
$fileLines = explode("\r\n", $contents); // explode to make sure we are only using the first line.
$fieldList_header = explode(',', $fileLines[0]);
$csv_header=array("ID","Name","Address","Email-Id","Contact-No"); // Excel file heading
$i=0;
//index keys for each column
$ID_key=null;
$Name_key=null;
$Address_key=null;
$Email_ID_key=null;
$Contact_No_key=null;
foreach($csv_header as $csv)
{
//searching index for each value
if(in_array($csv,$fieldList_header))
{
$key=array_search($csv,$fieldList_header);
if($i==0)
$ID_key=$key;
if($i==1)
$Name_key=$key;
if($i==2)
$address_key=$key;
if($i==3)
$Email_ID_key=$key;
if($i==4)
$Contact_No_key=$key;
}
else
{
echo "Failed to search : ".$csv." blank space will be inserted.<br>";
}
$i++;
}
echo "<table border=1px>";
echo "<tr>";
echo "<td>";
echo "Id";
echo "</td>";
echo "<td>";
echo "Name";
echo "</td>";
echo "<td>";
echo "Address";
echo "</td>";
echo "<td>";
echo "Email ID";
echo "</td>";
echo "<td>";
echo "Contact No";
echo "</td>";
echo "</tr>";
$j=1;
for($i=2;$i<count($fileLines)-1;$i++)
{
$fieldList_other = explode(',', $fileLines[$i]);
echo "<tr>";
echo "<td>";
echo $fieldList_other[$ID_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Name_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Address_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Email_ID_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Contact_No_key];
echo "</td>";
echo "</tr>";
$query="insert into Contact (EmployeeName,DateOfJoining,SalaryPerDay,Address,Designation,BalanceLeaves,ContactNumber) values('$fieldList_other[$ID_key]','$fieldList_other[$Name_key]','$fieldList_other[$Address_key]','$fieldList_other[$Email_ID_key]','$fieldList_other[$Contact_No_key]')";
$result=mysql_query($query);
if(!$result)
echo "Record $j failed.<br>";
else
echo "Record $j inserted in database.";
$j++;
}
echo "</table>";
}
?>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Import a CSV File with PHP & MySQL</title>
<script>
<!--
function noempty()
{
var y=document.forms["form1"]["csv"].value;
if (y==null || y=="" )
{
alert("Please enter the required field");
return false;
}
}
-->
</script>
</head>
<body>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
<center>
</br></br>
Choose your file: <br />
<input name="csv" type="file" id="csv" />
<input type="submit" name="Submit" value="Submit" onclick="return noempty()"/>
</center>
</form>
</body>
</html>

код повністю з "ісходного коду" взятий добавлено тільки назву бд

в чому може бути проблема навіть незнаю, пробував різні варіанти як у файлі дані розміщуються і вертикально і горизонтально але поки нічого, хто знайомий з РНР, допоможіть буду вдячний за допомогу (якщо вирішу проблему відпишусь)

-відповіді з посиланням на книги прошу змістовно аргументувати, що саме мені там шукати

p.s. Скрипт розібрав, я можна сказати взегалі незнаю РНР, скрипт розібраний по команді але він не паше ось проблема

Опубліковано

exit()-ом подебаж, побачиш що де і куди падає, а то якось копіпастити чийсь г*внокод і не розібратися в ньому не кошерно)

Опубліковано

, розділювачі можуть бути якими завгодно, крапка з комою теж підходить.

І спробуйте використати функцію fgetcsv замість explode

Опубліковано

Дечого не вистачає - а саме вхідного файлу.

P.S. Я надіюсь ви туди не xls пихаєте, а csv, в правильному форматі - з комами розділювачами, а не крапка з комою. Крім того, не забудьте про заголовки в першому рядку

ображаєте) звісно csv розділення йде крапка з комою він так автоматично зберігає з екселя , пробував перший рядок писати і горизонтально і вертикально

-так ця реалізація може дійсно бути з підписом "гавно код" , як би це висловитись спитати когось навіть щоб сказав "да це ліпше" або "да оцей працює бери його" нема можливості тому ось і лажу по форумах, але мені потрібен саме РНР скрипт

спробував розбивку комами замість крапки з комою, зчитує але проблема у записі у бд, тепер, я думаю ось помилка

Bezimyanni_5711008_8204749.jpg

бд має такий вигляд

Bezimyanni_7566145_8204769.jpg

Опубліковано

ModMov, ну тоді в explode теж зміни на крапку з комою.

Але все одно тобі потрібен fgetcsv, бо якщо якесь поле містить крапку з комою, або ще якийсь спеціальний символ, то воно буде взяте в лапки, і explode буде неправильно нарізати поля

Опубліковано

Tarzanych, дякую за допомогу, у вирішенні цієї нелегкої для мене задачі!

ось рішення проблеми (помилки були у деяких функціях, не там було внесено назву бд, а також були пунктуаційні помилки великих\малих букв у бд та у коді)



<?php
error_reporting(E_ALL & ~E_NOTICE);
$connect = mysql_connect("localhost", "root","") ;
@mysql_select_db("bd1pc");
$inputFile=$_FILES['csv']['name'];
$ext=end(explode('.',$inputFile));
if($ext=='csv')
{
$tmpFile=@$_FILES['csv']['tmp_name'];
$f = @fopen($tmpFile, 'r');
$contents = @fread($f, 10000);
fclose($f);
$fileLines = explode("\n", $contents); //Замінив \r\n на просто \n

// $fieldList_header = explode(';', $fileLines[0]); цей рядок прибрано замысть нього знизу правильне рішення
$fieldList_header = str_getcsv($fileLines[0],';', '"');
$csv_header=array("ID","Number","Name","Info","Price"); // Excel file heading
$i=0;
//index keys for each column
$ID_key=null;
$Number_key=null;
$Name_key=null;
$Info_key=null;
$Price_key=null;
foreach($csv_header as $csv)
{
//searching index for each value
if(in_array($csv,$fieldList_header))
{
$key=array_search($csv,$fieldList_header);
if($i==0)
$ID_key=$key;
if($i==1)
$Number_key=$key;
if($i==2)
$Name_key=$key;
if($i==3)
$Info_key=$key;
if($i==4)
$Price_key=$key;
}
else
{
echo "Failed to search : ".$csv." blank space will be inserted.<br>";
}
$i++;
}
echo "<table border=1px>";
echo "<tr>";
echo "<td>";
echo "ID";
echo "</td>";
echo "<td>";
echo "Number";
echo "</td>";
echo "<td>";
echo "Name";
echo "</td>";
echo "<td>";
echo "Info";
echo "</td>";
echo "<td>";
echo "Price";
echo "</td>";
echo "</tr>";
$j=1;
for($i=1;$i<=count($fileLines)-1;$i++) // Помилка, коли використовуємо count($fileLines)-1, то ставимо знак "<=", якщо просто "<", то -1 забираємо
{
// $fieldList_other = explode(';', $fileLines[$i]); цей рядок прибрано замысть нього знизу правильне рішення
$fieldList_other = str_getcsv($fileLines[$i],';', '"');

echo "<tr>";
echo "<td>";
echo $fieldList_other[$ID_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Number_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Name_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Info_key];
echo "</td>";
echo "<td>";
echo $fieldList_other[$Price_key];
echo "</td>";
echo "</tr>";
$query="insert into `code` (`ID`,`Number`,`Name`,`Info`,`Price`) values('".$fieldList_other[$ID_key]."','".$fieldList_other[$Number_key]."','".$fieldList_other[$Name_key]."','".$fieldList_other[$Info_key]."','".$fieldList_other[$Price_key]."')";

$result=mysql_query($query);
if(!$result)
echo "Record $j failed.<br>";
else
echo "Record $j inserted in database.";
$j++;
}
echo "</table>";
}
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Import a CSV File with PHP & MySQL</title>
<script>
<!--
function noempty()
{
var y=document.forms["form1"]["csv"].value;
if (y==null || y=="" )
{
alert("Please enter the required field");
return false;
}
}
-->
</script>
</head>
<body>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
<center>
</br></br>
Choose your file: <br />
<input name="csv" type="file" id="csv" />
<input type="submit" name="Submit" value="Submit" onclick="return noempty()"/>
</center>
</form>
</body>
</html>

, вибачте що потурбував

p.s. стоїть блок не більше 2 повідомлень на день до тих пір поки 5 моїх повідомлень не будуть "підтримані" тому писав в л.с. ще раз вибачаюсь перед що потурбував

проблема вирішена, тему можна закривати.

Опубліковано

По-вашому, це щось міняє??? Запитання скоріше до Tarzanych, як автора

Коментар писав не я :)

CSV - це все таки трошки більше, ніж просто текст, розділений комами. Якщо зустрічається у вмісті поля таблиці знак ";" - то explode наробить проблем.

В CSV вона вирішується за допомогою лапок. Щоб не морочитись із заміною символів на коди чи ще щось, на мою думку, краще користуватись функціями, призначеними спеціально для цього формату даних

Взагалі, головні помилки були наступні:

1. Вибір бази даних на початку

2. Помилка при розділенні файлу на окремі рядки. "\r\n" не підходив для даного випадку

3. Помилка з регістрами літер як в запитах, так і коді.

Решта - косметика і неточності

Опубліковано

, тому що в більшості серверів маркер нового рядка просто "\n". В результаті весь текст сприймався як один рядок

Заархівовано

Ця тема знаходиться в архіві та закрита для подальших відповідей.



×
×
  • Створити...