Uzman Cevap beta aşamasından çıkmaya hazırlanıyor! Yenilikleri takipte kalın.
Çözüldü! Bu soru aradığı cevabı buldu :) Teşekkürler iyi niyetli insanlar!

PHP | MySQL Kayıt İşleminde Otomatik Artırma

Merhaba arkadaşlar. Bir sorum var.
Kayıt işlemlerinde ID'leri otomatik artırıyoruz ya bende veri kaydederken herhangi bir kısmın numarasını otomatik artarak kayıt olmasını istiyorum. Bunu nasıl yapabiliriz?

Örneğin Öğrenci No'sunun öğrenci kayıt işleminde otomatik olarak artmasını istiyorum.
Tablo Yapısı
id | ogrenci_no | ogrenci_adi | ogrenci_sinifi


$ogrenci_no = $_POST["ogrenci_no"];
$ogrenci_adi = $_POST["ogrenci_adi"];
$ogrenci_sinifi = $_POST["ogrenci_sinifi"];

$ekle = mysql_query("INSERT INTO ogrenciler (ogrenci_no, ogrenci_adi, ogrenci_sinifi) values ('$ogrenci_no', '$ogrenci_adi', '$ogrenci_sinifi')");
Cevaplar (17)
1
Son kaydın no'sunu bulursun ve ve bir arttırıp bir değişkene atar daha sonra kayıt yaptırırsın en hantalından.
0
Hantalsızı nasıl oluyor :)
1
şöyle kullanabilirsin.
$sonsira = ("SELECT ogrenci_no FROM ogrenciler ORDER BY ogrenci_no DESC LIMIT 1")+1;
0
İskender hocam burada tam olarak ne yapmış oluyoruz. Select ile seciyoruz ama son kısmı ve +1 kısmını anlayamadım. Bu listelemede mi artarak gösteriyor? Eğer öyleyse ben kayıt ederken artsın istiyorum.
1
Şimdi şöyle birşey yapıyoruz bakarsan en son öğrenci numarası ne misal 15 yeni eklediğimz otomatik artacakya)+1 de yani son sayının bir fazlasını alıyorsun. her güncellemede bunu yaparsan tmmdır. Onuda bir değişkene atayıp kullanacaksın . :) bukadar basit. yani Özetle

Son sayının bir fazlasını almış oluyoruz.
0
İskender hocam aşağıdaki gibi yaptım ama numara artmıyor hep 1 yazıyor.

<?php
include("ayar.php");

$id					= $_POST["id"];
$ogrenci_no 		= $_POST["ogrenci_no"];
$ogrenci_adi 		= $_POST["ogrenci_adi"];
$ogrenci_sinifi 	= $_POST["ogrenci_sinifi"];

$sonsira = ("SELECT ogrenci_no FROM ogrenciler ORDER BY ogrenci_no DESC LIMIT 1")+1;
$ekle = mysql_query("INSERT INTO ogrenciler (ogrenci_no, ogrenci_adi, ogrenci_sinifi) values ('$sonsira', '$ogrenci_adi', '$ogrenci_sinifi')");

if($ekle){
	echo "Veriler Başarıyla Eklendi.";
	header("Refresh:2; url=index.php");
}else{
	echo "Ekleme Başarısız!";
	header("Refresh:2; url=index.php");
}
?>
1
@#Abdullah,
php kısmı ile uğraşmadan doğrudan MySQL veritabanı üzerinde trigger (Tetikleyici) ile bu işlemi yapman sanırım mümkün.
şöyleki,
yazacağınız trigger tabloya bir kayıt eklendiğinde eklenen kaydın ID değerini alıp aynı tablodaki başka bir alana güncelleme yapacak şekilde olmalı
0
Mustafa hocam pek anlayamadım.
1
Tetikleyiciler (TRIGGER) Nedir,Nasil Kullanilir..
Bir tetikleyici bir tabloya bağlı olarak bir takım işlemler yapan özel bir saklı yordamdır. Bu yazımızda sadece Ardı Sıra Tetikleyici (After Trigger) ve Yerine Tetikleyici (Instead Of Triggers) adı verilen tetikleyicileri anlatacağız.

Tetikleyiciler ne zaman kullanılırlar ?
Tetikleyicileri kullanmanın bir çok nedeni vardır. Bir tabloda bir değişiklik yapıldığında ayni anda bir çok değişik işlemin de yapılması gerekli olabilir. Belki de bu tabloda yapılan değişikliklerin veritabanı sorumlusuna bir e-mail atması istenebilir. Bu işlemler için tetikleyiciler kullanmak çoğu kez çok zarif çözümler üretmenizi sağlayabilir.

Ardı Sıra Tetikleyiciler (After Triggers)
Bir tabloya UPDATE, INSERT veya DELETE işlemi yapıldıktan sonra bir takım işlemlerin yapılması için kullanılan tetikleyicilere Ardı Sıra Tetikleyici denir. Bu tür tetikleyiciler pek çok değişik iş yapabilirler. Bir başka tabloya veri girişi yapmak veya tabloyu güncellemek, tablolar arasında uyumu sağlamak için bu tür tetikleyiciler çok uygundur.

Örnek
1. Bu örnekte öncelikler üç tablo oluşturalım. Müşteriler, Kitaplar ve Satışlar



CREATE TABLE Musteriler (
MusteriNo int IDENTITY (1, 1) NOT NULL ,
AD nvarchar (20),
SOYAD nvarchar(20) )
GO
CREATE TABLE Urunler (
UrunNo int IDENTITY (1, 1) NOT NULL ,
UrunAD nvarchar (255),
Stok int )
GO
CREATE TABLE Satislar(
FisNo int IDENTITY (1, 1) NOT NULL ,
MusteriNo int,
UrunNo int ,
Adet int,
Tarih smalldatetime )
GO
INSERT INTO Musteriler VALUES ('Yusuf','Ünlü')
INSERT INTO Musteriler VALUES ('Orhan','Sönmez')
INSERT INTO Musteriler VALUES ('Naime','Ekici')
INSERT INTO Urunler VALUES ('Modern Cebir, Herstein, Academic Press',5)
INSERT INTO Urunler VALUES ('Analiz, Rudin, Van Nostrand',4)
INSERT INTO Urunler VALUES ('Geometri, Coxeter, North Holland',2)
INSERT INTO Urunler VALUES ('Şu Çılgın Türkler, Özakman',450)
CREATE TRIGGER SatisGir_StokGuncelle ON Satislar
FOR INSERT
AS
DECLARE @Say int
SELECT @SAY = COUNT(i.UrunNo)
FROM Urunler u INNER JOIN inserted i ON u.UrunNo= i.UrunNo
WHERE (i.Adet > u.Stok)
IF @Say >0
BEGIN
ROLLBACK TRANSACTION
RAISERROR ('Girilen ürünlerden biri stokdan fazla',16,1)
END
ELSE
UPDATE Urunler SET Stok = u.Stok - i.Adet
FROM Urunleru INNER JOIN inserted i ON u.UrunNo= i.UrunNo
Burada inserted olarak adlandırılan tablo yeni bir kayıt girilmekte olan Satışlar tablosunda yeni kayıtın girildiği satırdan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. Tetikleyicinin ne yaptığı son derece açıktır. Eğer yeterli stok varsa
satış yapıldıktan sonra satış adedini stoktan düşmektedir.

2. Bir DELETE tetikleyici yazalım

CREATE TRIGGER SatisSil_StokGuncelle ON Satislar
FOR DELETE
AS
UPDATE Urunler SET Stok = p.Stok + i.Adet
FROM Urunler p JOIN deleted i ON p.UrunNo = i.UrunNo

Bu tetikleyiciyi deneyelim
SELECT * FROM Satislar

DELETE FROM Satislar WHERE FisNo = 2
Burada deleted olarak adlandırılan tablo kayıt silinmekte olan Satışlar tablosunda silinen kayıttan oluşan tablonun tetikleyicide kullanılan mantıksal adıdır. Tetikleyici iptal edilen satış adedini stoka eklemektedir.

Yerine Tetikleyiciler( INSTEAD OF TRIGGER)
Bir INSERT, UPDATE veya DELETE işlemi bir tabloya uygulandığında bu tablo üzerinde , sırasıyla bir Instead Of INSERT, Instead Of UPDATE veya Instead Of DELETE tetikleyici varsa bu işlem tablo üzerinde gerçekleşmez. Onun yerine tetikleyici içinde yazılı kodlar
yapılır.
http://www.caglarozenc.com/ms-sql-server/tetikleyiciler-trigger-nedirnasil-kullanilir.html
0
hocam şimdilik buradan bakın eğer anlamaz iseniz ben tekrardan yazarım inşallah
1
Tabi çalışmaz orada mysql_query ile çalıştıracaksın aşağıdaki gibi kullan. yapamazsan faceden filan yaz uzaktan bağlanırız
<?
include("ayar.php");

$id					= $_POST["id"];
$ogrenci_no 		= $_POST["ogrenci_no"];
$ogrenci_adi 		= $_POST["ogrenci_adi"];
$ogrenci_sinifi 	= $_POST["ogrenci_sinifi"];

$sql = ("SELECT ogrenci_no FROM ogrenciler ORDER BY ogrenci_no DESC LIMIT 1")+1;
$sonsira = mysql_query($sql); // mysql_query ile sql çalıştırman lazım onu yapmamışsın.
$ekle = mysql_query("INSERT INTO ogrenciler (ogrenci_no, ogrenci_adi, ogrenci_sinifi) values ('$sonsira', '$ogrenci_adi', '$ogrenci_sinifi')");

if($ekle){
	echo "Veriler Başarıyla Eklendi.";
	header("Refresh:2; url=index.php");
}else{
	echo "Ekleme Başarısız!";
	header("Refresh:2; url=index.php");
}
?>
1
İd nin hangi sayıdan başlayacağını seçebiliyorsun.
ALTER TABLE tbl AUTO_INCREMENT = 1000;

Edit: Soruyu yanlış okumuşum, pardon.
0
@İskender Halisoğlu hocam facebook'a bakar mısınız?
0
Sorunun çözümü @İskender Halisoğlu sayesinde aşağıdaki şekilde çözülmüştür. Kendisine teşekkür ederim.

<?php
include("ayar.php");

function SingleResult($sql){
	$result = mysql_query($sql);
	$row = mysql_fetch_array($result);
	$re_id=$row[0];
	if ($row[0]) {
	mysql_free_result ($result);
	}
return ($re_id);
}

$ogrenci_adi 		= $_POST["ogrenci_adi"];
$ogrenci_sinifi 	= $_POST["ogrenci_sinifi"];

$sonsira = SingleResult("SELECT ogrenci_no FROM ogrenciler ORDER BY ogrenci_no DESC LIMIT 1")+1; // şimdi ister idden isterde öğrenci numarasını arttırarak gideriz.
$sql= "INSERT INTO ogrenciler SET
	   ogrenci_no = '".$sonsira."',	   
	   ogrenci_adi = '".$ogrenci_adi."',	   
	   ogrenci_sinifi = '".$ogrenci_sinifi."'";
	   
	  $ekle =mysql_query($sql);
	  
if($ekle){
	echo "Veriler Başarıyla Eklendi.";
	header("Refresh:2; url=index.php");
}else{
	echo "Ekleme Başarısız!";
	header("Refresh:2; url=index.php");
}

?>
1
J.Doe
BACKEND
1 yıl önce
MYSQL'un kendinde zaten id değerini otomatik artırma var. Zaten istesenizde iki tane aynı id 'li bir kayıt yapamazsınız.
1
Merhaba,Suanda yaptiğınız işlem doğru fakat bunu tek query ile yapmakta mümkün.
mysql_query("
             UPDATE member_profile 
             SET points = points + 1
             WHERE user_id = '".$userid."'
          ");

Bu sizi ekstra queryden kurtaracak ve daha az satırda amacınıza ulaşacaksınız.
0
@İskender Halisoğlu Allah Razı Olsun #Abdullah senden de böyle bir soruyu sorduğun için Allah Razı Olsun çok işimi gördü.
Cevap Yazın..

[code=css,php,sql,asp..]..kod..[/code] , [url=http:...com] , [img=resim linki]
[color=renk kodu]..yazı..[/color]

yabancı dizi izle tv ünitesi