Мой хостер просто обесценил подключения 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>
Проблема в вашем 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);
}
сейчас работает отлично … спасибо за помощь
<?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>