Veri tabanı yapınızın şemasını örneklendiri
query
ile yaparsan SQL Injection a açık olursun, kullanıcıdan gelen veriye güvenme hiçbir zaman, prepare
ile yap.
if ($_POST) {
$_POST = array_map('trim', $_POST);
extract($_POST);
$hata = "";
if (isset($_FILES['foto'])) {
if ($_FILES['foto']['error'] != 0) {
$hata .= 'Dosya yüklenirken hata gerçekleşti lütfen daha sonra tekrar deneyiniz.';
} else {
$dosya_adi = strtolower($_FILES['foto']['name']);
if (file_exists('images/' . $dosya_adi)) {
$hata .= " $dosya_adi diye bir dosya var";
} else {
$boyut = $_FILES['foto']['size'];
if ($boyut > (1000 * 1000 * 5)) {
$hata .= ' Dosya boyutu 2MB den büyük olamaz.';
} else {
$dosya_tipi = $_FILES['foto']['type'];
$dosya_uzanti = explode('.', $dosya_adi);
$dosya_uzanti = $dosya_uzanti[count($dosya_uzanti) - 1];
if (!in_array($dosya_tipi, ['image/png', 'image/jpeg', 'image/gif']) || !in_array($dosya_uzanti, ['png', 'jpg', 'gif'])) {
//if (($dosya_tipi != 'image/png' || $dosya_uzanti != 'png' )&&( $dosya_tipi != 'image/jpeg' || $dosya_uzanti != 'jpg')) {
$hata .= ' Hata, dosya türü JPEG veya PNG olmalı.';
} else {
$check = $baglanti->prepare("SELECT ad FROM uyeler WHERE ad = ?");
$check->execute([$ad]);
if ($check->rowCount()) {
$hata = 'Bu ad kullanılıyor!';
}
else {
$foto = $_FILES['foto']['tmp_name'];
copy($foto, 'uyeler/' . $dosya_adi);
//Eklencek veriler diziye ekleniyor
$satir = [
'foto' => $dosya_adi,
'ad' => $ad,
'whatsapp' => $whatsapp,
'uzmanlik' => $uzmanlik,
'ozgecmis' => $ozgecmis,
];
// Veri ekleme sorgumuzu yazıyoruz.
$durumx = $baglanti->prepare("INSERT INTO uyeler SET foto=:foto, ad=:ad,whatsapp=:whatsapp,uzmanlik=:uzmanlik,ozgecmis=:ozgecmis")->execute($satir);
if ($durumx)
echo '<script>Swal.fire("Başarılı","Kayıt Başarılı","success").then((value)=>{ window.location.href = "index.php"});</script>';
}
}
}
}
}
}
if($hata!=""){
echo '<script>Swal.fire("Hata","'.$hata.'","error");</script>';
}
}
$text = 'Türkçe karakter içeren metin';
$invalid = 'Türk';
if (preg_match('/^[\w ]{15,155}$/u', $text)) {
echo 'Geçerli';
}
Bu işinizi büyük oranda görecektir fakat aşmanız gereken başka sorunlar da var. Kullanıcı sadece boşluk girerek de bu kontrolü geçebilir. Bunun için öncesinde trim()
fonksiyonunda geçirmeniz iyi olacaktır. Bir de hard space problemi var. Bu videoyu izleyerek istenmeyen boşluklardan nasıl kurtulabileceğinizi görebilirsiniz.
Kısa yazmak için arrow function kullanmak istedim ve sizin de söylediğiniz gibi PHP 7.4 sürümünde eklenen bir özellik olduğu için eski sürümlerde hata verir.
https://www.php.net/manual/en/functions.arrow.php
Normal function şekliyle de kullanabilirsiniz.
uasort($dizi1, function($a, $b) {
return $a['item_id'] - $b['item_id']
});
uasort($dizi1, fn($a, $b) => $a['item_id'] - $b['item_id']);
uasort($dizi2, fn($a, $b) => $a['item_id'] - $b['item_id']);
$new = array_map(function ($item1, $item2) {
if ($item1['item_content'] != $item2['item_content'])
return [
'item_id' => $item1['item_id'],
'item_content' => [
'old' => $item1['item_content'],
'new' => $item2['item_content']
]
];
return false;
}, $dizi1, $dizi2);
print_r(array_values(array_filter($new)));
veya
uasort($dizi1, fn($a, $b) => $a['item_id'] - $b['item_id']);
uasort($dizi2, fn($a, $b) => $a['item_id'] - $b['item_id']);
$dizi1 = array_values($dizi1);
$dizi2 = array_values($dizi2);
$sonuc = [];
foreach ($dizi1 as $i => $value) {
if ($value['item_content'] != $dizi2[$i]['item_content'])
$sonuc[] = [
'item_id' => $value['item_id'],
'item_content' => [
'old' => $value['item_content'],
'new' => $dizi2[$i]['item_content']
]
];
}
print_r($sonuc);
Bakılıp geçilmeyecek sorular olduğu sürece elimden geldiğince yardımcı olmaya çalışırım :)
Tetikleme butonunu form un içine koymanızı tavsiye ederim. Button üzerinden değil de inputlara daha kolay ulaşabilmek için form üzerinden gitmeyi tercih ediyorum.
<form id="form" enctype="multipart/form-data">
<div class="card">
<div class="card-body">
<div class="row mt-2" style="justify-content: center;">
<div class="col-12 col-md-1">
<label class="form-label mt-1">Site Logo</label>
</div>
<div class="col-12 col-md-1">
<img src="../<?= $settingrow['setting_logo'] ?>" class="img-fluid mt-1 setting_uploaded_logo">
</div>
<div class="col-6 col-md-1">
<input type="text" class="form-control" name="setting_logo_width" value="<?= $settingrow['setting_logo_width'] ?>">
</div>
<div class="col-6 col-md-3">
<input type="file" class="form-control" name="setting_logo">
</div>
<div class="col-12 col-md-1">
<button class="btn btn-success">Gönder</button>
</div>
</div>
</div>
</div>
</form>
$("#form").on("submit", function (event) {
event.preventDefault()
let fd = new FormData()
$(this).find("input").each(function () {
let type = $(this).attr("type"),
name = $(this).attr("name")
if (type === 'file') {
if (this.files[0] !== undefined)
fd.append(name, this.files[0])
}
else
fd.append(name, $(this).val())
})
$.ajax('inc/inc.php', {
method: 'POST',
data: fd,
contentType: false,
processData: false
})
})
php tarafında $_FILES[] ve $_POST[] şeklinde inputların name değerleri ile yakalayacaksınız.
Peki son bir veri daha isteyeyim sizden, yükleme işlemini nasıl tetikliyorsunuz, bir submit butonu göremedim. Submit butonu ekleyerek mi yapayım yoksa file inputu change olunca otomatik yükleme yapsın mı