我在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);
}
?>
答案 0 :(得分:2)
你正在将不同的mysql apis与mysqli_和PDO混合使用,你不能这样做,因为他们没有混合。
连接变量也(理论上)不匹配。
您需要使用PDO连接来进行PDO查询。
手册中的示例连接:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
并在查询中使用相同的变量。您正在使用$db
,因此也与连接匹配。
注意:您在VALUES中也使用了错误的列名name
。由于我不懂西班牙语(似乎是),您需要使用与之对应的西班牙语。您可能打算使用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注入。