only last row is inserting in table when having "instead of insert" trigger on that table I have this trigger 

CREATE TRIGGER [dbo].[intrigger] ON [dbo].[test]
 instead of insert
AS
begin
declare @name nvarchar (50),@city nvarchar (11),
@tdate datetime , @fid int,@fopd datetime;
select @name =i.name from inserted i;
select @city =i.city from inserted i;
select @tdate =i.date from inserted i;
select @fid =i.fid from inserted i;
select @fopd = Faculty.fopd from Faculty 
    where fid= @fid;
if (@fopd &gt; @tdate )
begin
    RAISERROR('Cannot insert ',16,1);
    ROLLBACK TRANSACTION
    RETURN;
    -- stop on error
end
insert into test
values (@name,@city,@tdate,@fid); 
end


and the insert :

insert into test
values('a','h','2014-10-13',1),
('s','h','2014-10-14',2),
('y','d','2014-10-15',2),
('s','h','2014-10-18',1),
('m','a','2014-10-20',1),
('a','h','2014-10-28',2)


then I select * from test .. only the last values are inserted ('a','h','2014-10-28',2)

I have to do one insert at a time ! 

I used for trigger .. all lines were inserted BUT in another test it accepted the wrong values :

insert into test
values('a','h','2014-10-13',1),
('s','h','2014-10-14',2),
('y','d','2014-10-15',2),
('s','h','1990-10-18',1), -- this is wrong must not be inserted or stop all 
('m','a','2014-10-20',1),
('a','h','2014-10-28',2)


what went wrong !?
The issue is your comparison is working against a single record but the INSERTED pseudo table contains multiple rows (all of the rows being inserted in the transaction). You can get around this using something like the following:

CREATE TRIGGER inTrigger ON Data
INSTEAD OF INSERT
AS
BEGIN

  IF EXISTS(
    SELECT * 
    FROM INSERTED i 
    INNER JOIN Faculty f ON f.Id = i.Fid
    WHERE f.fopd &gt; i.Date
  )
  BEGIN
    RAISERROR('Cannot insert ',16,1);
  END

  INSERT INTO test (id, fid, date)
  SELECT i.* 
  FROM INSERTED i
  INNER JOIN Faculty f ON f.Id = i.Fid
  WHERE f.fopd &lt;= i.Date

END


This trigger identifies any records in the INSERTED table that match the failing criteria and if encountered it raises an error. It then proceeds with the insertion of the records that do not violate the condition. You could easily amend this to rollback the whole transaction if that is preferred.