Переход с Mysql на MySQL для файла импорта CSV, который работал

Мой хостер просто обесценил подключения MySQL в пользу MySQL

этот конкретный скрипт является примером, но отлично работал, прежде чем я попытался перейти на Mysqli. К сожалению, я 4 года занимаюсь программированием php с другого места работы и не смотрю на это в течение достаточно долгого времени. Поэтому, пожалуйста, будьте нежны 🙂

Я могу подключиться к БД, но вывод выглядит так:
Ошибка: INSERT INTO статьи (имя, ссылка) VALUES (», »)

Должно быть, я что-то не так делаю с переменной $ data, но понятия не имею, так как она работала с предыдущей версией.

Я ценю любую помощь

<?php

ini_set('auto_detect_line_endings',TRUE);

function clean($str, $default = '') {
if (!isset($str)) $str = $default;
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}

$host_name  = "some host";
$database   = "some database";
$user_name  = "someusername";
$password   = "some password";

$connect = mysqli_connect($host_name, $user_name, $password, $database);
if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } else {echo 'connected to DB<br />';}

$lines = $value1 = $value2 = $data = 0;

if ($_FILES["csv"]["size"] > 0) {

//get the csv file
$file = $_FILES["csv"]["tmp_name"];
$handle = fopen($file,"r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($data[0]) {
$sql = "INSERT INTO articles (name, reference) VALUES ('".clean($data[0])."','".clean($data[1])."')";
if (mysqli_query($conn, $sql)) { } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); }
$lines++;
}
}
header('Location: <?php echo $_SERVER["PHP_SELF"]; ?>?success=1&lines='.$lines.''); die;
}
if ( isset($_GET['success']) )
{
$success = $_GET['success'];
$lines = $_GET['lines'];
} else {
$success = 0;
}
mysqli_close($conn);
if ($success != 0 ) {
echo "<b>Your file has been imported.</b><br>";
echo "Found a total of ".$lines." records in this csv file.<br />";
}

?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
Choose your file: <br />
<input name="csv" type="file" id="csv" />
<input type="submit" name="Submit" value="Submit" />
</form>

1

Решение

Проблема в вашем clean функция, последняя строка:

function clean($str, $default = '') {
if (!isset($str)) $str = $default;
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}

Поскольку у вас нет mysql_* соединение, mysql_real_escape_string вернусь false что переводится как пустые строки. Вы должны использовать правильную функцию для mysqli, но подготовленное выражение будет еще лучше, тогда вам не нужно ничего очищать. Помимо регулярной проверки, конечно.

Обратите внимание, что если вы решите использовать экранирующую функцию, вам нужно будет отправить соединение с базой данных в качестве параметра вашей функции так, как вам нужно:

function clean($db, $str, $default = '') {
...
return mysqli_real_escape_string($db, $str);
}
0

Другие решения

сейчас работает отлично … спасибо за помощь

<?php

ini_set('auto_detect_line_endings',TRUE);

function clean($link, $str, $default ='') {
if (!isset($str)) $str = $default;
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysqli_real_escape_string($link, $str);
}

$host_name  = "somehost";
$database   = "somedb";
$user_name  = "someusername";
$password   = "somepassword";

$connect = mysqli_connect($host_name, $user_name, $password, $database);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
} else {}if (isset($_GET['success'])) {
$success = $_GET['success'];
$lines = $_GET['lines'];
} else {
$success = 0;
}
if ($success != 0 ) {
echo "<b>Your file has been imported.</b><br>";
echo "Found a total of ".$lines." records in this csv file.<br />";
}

$lines = $value1 = $value2 = $data = 0;

if ($_FILES["csv"]["size"] > 0) {

//get the csv file
$file = $_FILES["csv"]["tmp_name"];
$handle = fopen($file,"r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
//print_r($data).'<br />';
if ($data[0]) {
$sql = "INSERT INTO `articles` (`name`, `reference`) VALUES ('".clean($connect, $data[0])."','".clean($connect, $data[1])."')";
//echo $sql.'<br />';
if (mysqli_query($connect, $sql)) { } else { echo "Error: " . $sql . "<br>" . mysqli_error($connect); }
$lines++;
}
}
header('Location: index.php?success=1&lines='.$lines.'');die;
}

?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
Choose your file: <br />
<input name="csv" type="file" id="csv" />
<input type="submit" name="Submit" value="Submit" />
</form>
0

По вопросам рекламы [email protected]