У меня есть код в Php для загрузки изображений, дело в том, что когда я вставляю картинку, она будет правильно сохранена в папке prueba/, но она не будет загружена на мою db_table.
if(isset($_POST['btn-add']))
{
$name=$_POST['user_name'];
$images=$_FILES['profile']['name'];
$tmp_dir=$_FILES['profile']['tmp_name'];
$imageSize=$_FILES['profile']['size'];
$upload_dir='prueba/';
$imgExt=strtolower(pathinfo($images,PATHINFO_EXTENSION));
$valid_extensions=array('jpeg', 'jpg', 'png', 'gif', 'pdf');
$picProfile=rand(1000, 1000000).".".$imgExt;
move_uploaded_file($tmp_dir, $upload_dir.$picProfile);
$stmt=$db_conn->prepare('INSERT INTO restaurantes_resutlado (name, fotos) VALUES (:uname, :upic)');
$stmt->bindParam(':uname', $name);
$stmt->bindParam(':upic', $picProfile);
if($stmt->execute())
{
?>
<script>
alert("new record successul");
window.location.href=('index.php');
</script>
<?php
}else
{
?>
<script>
alert("Error");
window.location.href=('index.php');
</script>
<?php
}
}
дБ:
Name Type Collation Attributes Null Default Comments Extra 1 id int(11) No None 2 nombre varchar(150) latin1_swedish_ci No None 3 zona varchar(150) latin1_swedish_ci No None 4 precio float No None 5 valoracion float No None 6 comentarios varchar(100) latin1_swedish_ci No None 7 ranking int(1) No None 8 tipo_cocina varchar(100) latin1_swedish_ci No None 9 horario time No None 10 fotos varchar(200) latin1_swedish_ci No None
HTML
<div class="container">
<div class="add-form">
<h1 class="text-center">Please Insert new Item image</h1>
<form method="post" enctype="multipart/form-data">
<label>User Name</label>
<input type="text" name="user_name" class="form-control" required="">
<label>Picture Profile</label>
<input type="file" name="profile" class="form-control" required="" accept="*/image">
<button type="submit" name="btn-add">Add New </button>
</form>
</div>
<hr style="border-top: 2px red solid;">
</div>
<!-- end form insert -->
<!-- view form -->
<div class="container">
<div class="view-form">
<div class="row">
<?php
$stmt=$db_conn->prepare('SELECT * FROM tbl_user ORDER BY id DESC');
$stmt->execute();
if($stmt->rowCount()>0)
{
while($row=$stmt->fetch(PDO::FETCH_ASSOC))
{
extract($row);
?>
<div class="col-sm-3">
<p><?php echo $username ?></p>
<img src="uploads/<?php echo $row['picProfile']?>"><br><br>
<a class="btn btn-info" href="edit_form.php?edit_id=<?php echo $row['id']?>" title="click for edit" onlick="return confirm('Sure to edit this record')"><span class="glyphicon glyphicone-edit"></span>Edit</a>
<a class="btn btn-danger" href="?delete_id=<?php echo $row['id']?>" title="click for delete" onclick="return confirm('Sure to delete this record?')">Delete</a>
</div>
<?php
}
}
?>
</div>
</div>
</div>
Подключение:
<?php
// Database configuration
$dbHost = "localhost";
$dbUsername = "root";
$dbPassword = "root";
$dbName = "restaurantes";
// Create database connection
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
// Check connection
if ($db->connect_error) {
die("Connection failed: " . $db->connect_error);
}
?>
Вы смешиваете разные mysql apis с mysqli_ и PDO, вы не можете этого сделать, поскольку они не смешиваются.
Переменная соединения также (теоретически) не совпадает.
Вам необходимо использовать соединение PDO, чтобы выполнить запрос PDO.
Пример подключения из руководства:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
и использовать для него ту же переменную в запросе. Вы используете $db
так, чтобы это соответствовало соединению.
Примечание: Вы также используете неправильное имя столбца, name
в ЦЕННОСТЯХ. Так как я не знаю испанский (кажется,), вам нужно будет использовать тот, который ему соответствует. Возможно, вы nombre
использовать nombre
.
Используйте (правильную) обработку ошибок:
Пример обработки ошибок PDO из руководства:
try {
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Вы также используете методы GET, поэтому убедитесь, что они отключены.
Также используйте подготовленное выражение. Это поможет защитить от потенциальной инъекции SQL.