php many-to-many yardım

memurvadisi1

Kayıtlı Üye
Katılım
12 Nisan 2014
Mesajlar
3.024
Tepkime puanı
0
Puan
0
merhabalar, aşağıda kodunu gördüğünüz kodda hata almaktayım. Yapmak istediğim filmler, yönetmenler tablolarımı birleştirmek istiyorum. many-to-many denilen olayı kullanıyorum ekstra film_yonetmenler diye tabloyu oluşturup film id ve yonetmen id ekledim. select sorgusundan yonetmenleri çekiyorum ekrana.

echo $yonetmenler; yazınca ekrana yonetmen1, yonetmen2, yonetmen3 çıkıyor fakat foreach satırında hata alıyorum çözemedim mantık olarak doğru olduğunu düşünüyorum ama çalıştıramadım bir türlü. yardımcı olabilecek varsa büyük bir dertten kurtaracak saatlerdir uğraşıyorum :)

PHP:
 $eklendi = 0;
		if(isset($_POST["ad"])){
		$resim = $_FILES["resim"]["name"];
		$folder = "../upload/";
		$path = $folder.$resim; // New variable
		move_uploaded_file($_FILES["resim"]["tmp_name"], $path);
$sql = "insert into filmler (film_ad,f_resim,vizyon_tarihi,film_ulke,film_ozet)"
        . "values ('".$_POST["ad"]
		."','".$resim  
		."','".$_POST["tarih"]
		."','".$_POST["ulke"]
		."','".$_POST["ozet"]."')";      

		$film_id = mysql_insert_id();
		
		
		$yonetmenler = implode("," ,$_POST["yonetmen"]);
		
		foreach($yonetmenler as $yonet) {
			// check if the tag already exists
			$res = mysql_query("SELECT * FROM `yonetmenler` WHERE `isim` = ".$yonet." LIMIT 1");
			if(mysql_num_rows($res) == 0) {
				// if it doesn't exist, we add it
				mysql_query("INSERT INTO `yonetmenler` (isim) VALUES (".$yonet.")");
				// get the last id inserted
				$yonetmen_id = mysql_insert_id();
				
			} else {
				 // if found, get it's id
				 $yonet = mysql_fetch_assoc($res);
				 $yonetmen_id = $yonet[0]['id'];
			}
			// linkage
			mysql_query("INSERT INTO `film_yonetmenler` VALUES ('".$film_id."', '".$yonetmen_id."')");
		}


		
            $conn->query($sql);  
            //mysqli_query($conn,$sql);
            $eklendi = 1;
			
        }


select ile listelemem
PHP:
<?php
                                    $sql = "select * from yonetmenler order by id";
                                    $resultKat = $conn->query($sql);
                                    if($resultKat->num_rows>0){
                                        echo "<select name='yonetmen[]' multiple>";
                                        echo "<option disabled>Oyuncu Seçiniz</option>";
                                        while($rsKat = $resultKat->fetch_object()){
                                            echo '<option value="'.$rsKat->isim.'">'.$rsKat->isim.'</option>';
                                        }
                                        echo "</select>";
                                    }
                                            
                                ?>
 
PHP:
$yonetmenler = implode("," ,$_POST["yonetmen"]);

Bu kısımda sanırım explode diyecektiniz? implode geriye dizi döndürmediği için foreach hata verir.
 
PHP:
$yonetmenler = implode("," ,$_POST["yonetmen"]);

Bu kısımda sanırım explode diyecektiniz? implode geriye dizi döndürmediği için foreach hata verir.

öncelikle cevap için teşekkürler. fakat 1. problemim ben mysqli yapısını kullanıyormuşum cümlem mysql yapısına göre olduğu için hata veriyormuş. dediğiniz explode ekledim fakat yine hata alıyorum bu sefer aşağıdaki hatayı veriyor ve echo $yonetmenler; yazınca çıkmıyor ekrana yonetmenler sorun bundan olabilir mi?

PHP:
Warning: explode() expects parameter 2 to be string, array given in C:\xampp\htdocs\film\panel\filmEkle.php on line 44




kodu getirdiğim son hal bu mysqli hatasıda olabilir explodede tam emin değilim ama çözemedim :)


PHP:
 $eklendi = 0;
		if(isset($_POST["ad"])){
		$resim = $_FILES["resim"]["name"];
		$folder = "../upload/";
		$path = $folder.$resim; // New variable
		move_uploaded_file($_FILES["resim"]["tmp_name"], $path);
$sql = "insert into filmler (film_ad,f_resim,vizyon_tarihi,film_ulke,film_ozet)"
        . "values ('".$_POST["ad"]
		."','".$resim  
		."','".$_POST["tarih"]
		."','".$_POST["ulke"]
		."','".$_POST["ozet"]."')";      

		$film_id = mysqli_insert_id($conn);
		
		
		$yonetmenler = explode("," , $_POST['yonetmen']);
		
		
		if (is_array($yonetmenler)) {
		foreach($yonetmenler as $yonet) {
			// check if the tag already exists
			$res =  "SELECT * FROM `yonetmenler` WHERE `isim` = ".$yonet." LIMIT 1";
			mysqli_query($conn, $res);
			if(mysqli_num_rows($res) == 0) {
				// if it doesn't exist, we add it
				$res = "INSERT INTO `yonetmenler` (isim) VALUES (".$yonet.")";
				mysqli_query($conn, $res);
				// get the last id inserted
				$yonetmen_id = mysqli_insert_id($conn);
				
			} else {
				 // if found, get it's id
				 $yonet = mysqli_fetch_assoc($res);
				 $yonetmen_id = $yonet[0]['id'];
			}
			// linkage
			$sql = "INSERT INTO `film_yonetmenler` VALUES ('".$film_id."', '".$yonetmen_id."')";
		}

		}
		
            $conn->query($sql);  
            //mysqli_query($conn,$sql);
            $eklendi = 1;
			
			echo $yonetmenler;
			
        }
 
öncelikle cevap için teşekkürler. fakat 1. problemim ben mysqli yapısını kullanıyormuşum cümlem mysql yapısına göre olduğu için hata veriyormuş. dediğiniz explode ekledim fakat yine hata alıyorum bu sefer aşağıdaki hatayı veriyor ve echo $yonetmenler; yazınca çıkmıyor ekrana yonetmenler sorun bundan olabilir mi?

PHP:
Warning: explode() expects parameter 2 to be string, array given in C:\xampp\htdocs\film\panel\filmEkle.php on line 44




kodu getirdiğim son hal bu mysqli hatasıda olabilir explodede tam emin değilim ama çözemedim :)


PHP:
 $eklendi = 0;
		if(isset($_POST["ad"])){
		$resim = $_FILES["resim"]["name"];
		$folder = "../upload/";
		$path = $folder.$resim; // New variable
		move_uploaded_file($_FILES["resim"]["tmp_name"], $path);
$sql = "insert into filmler (film_ad,f_resim,vizyon_tarihi,film_ulke,film_ozet)"
        . "values ('".$_POST["ad"]
		."','".$resim  
		."','".$_POST["tarih"]
		."','".$_POST["ulke"]
		."','".$_POST["ozet"]."')";      

		$film_id = mysqli_insert_id($conn);
		
		
		$yonetmenler = explode("," , $_POST['yonetmen']);
		
		
		if (is_array($yonetmenler)) {
		foreach($yonetmenler as $yonet) {
			// check if the tag already exists
			$res =  "SELECT * FROM `yonetmenler` WHERE `isim` = ".$yonet." LIMIT 1";
			mysqli_query($conn, $res);
			if(mysqli_num_rows($res) == 0) {
				// if it doesn't exist, we add it
				$res = "INSERT INTO `yonetmenler` (isim) VALUES (".$yonet.")";
				mysqli_query($conn, $res);
				// get the last id inserted
				$yonetmen_id = mysqli_insert_id($conn);
				
			} else {
				 // if found, get it's id
				 $yonet = mysqli_fetch_assoc($res);
				 $yonetmen_id = $yonet[0]['id'];
			}
			// linkage
			$sql = "INSERT INTO `film_yonetmenler` VALUES ('".$film_id."', '".$yonetmen_id."')";
		}

		}
		
            $conn->query($sql);  
            //mysqli_query($conn,$sql);
            $eklendi = 1;
			
			echo $yonetmenler;
			
        }



Teamviewer bilginizi pm ile yollar mısınız? Beraber bakalım soruna
 
[MENTION=11620]era[/MENTION] problemi çözmüştür çok TEŞEKKÜRLER saatlerce uğraşacaktım yoksa :)
 
Arama motorundan vs. gelen arkadaşlar için soru çözümsüz kalmaması adına;

2 adet sorun vardı.

1. explode gerek yoktu çünkü gelen veri selectbox'dan array olarak geliyor.
2.
Bu kısım
PHP:
mysqli_query($conn, $res); 
if(mysqli_num_rows($res) == 0) {
bu şekilde düzeltildi.
PHP:
$Degisken = mysqli_query($conn, $res); 
if(mysqli_num_rows($Degisken) == 0) {
 
ahhh php

2 sene kursa gıttım
tek ogrendıgım sey

<?php echo '<p>Merhaba Dunya</p>'; ?>
 
Kişiselleştirme

Tema editörü

Ayarlar Renkler

  • Mobil kullanıcılar bu fonksiyonları kullanamaz.

    Alternatif header

    Farklı bir görünüm için alternatif header yapısını kolayca seçebilirsiniz.

    Görünüm Modu Seçimi

    Tam ekran ve dar ekran modları arasında geçiş yapın.

    Izgara Görünümü

    Izgara modu ile içerikleri kolayca inceleyin ve düzenli bir görünüm elde edin.

    Resimli Izgara Modu

    Arka plan görselleriyle içeriğinizi düzenli ve görsel olarak zengin bir şekilde görüntüleyin.

    Yan Paneli Kapat

    Yan paneli gizleyerek daha geniş bir çalışma alanı oluşturun.

    Sabit Yan Panel

    Yan paneli sabitleyerek sürekli erişim sağlayın ve içeriğinizi kolayca yönetin.

    Box görünüm

    Temanızın yanlarına box tarzı bir çerçeve ekleyebilir veya mevcut çerçeveyi kaldırabilirsiniz. 1300px üstü çözünürler için geçerlidir.

    Köşe Yuvarlama Kontrolü

    Köşe yuvarlama efektini açıp kapatarak görünümü dilediğiniz gibi özelleştirin.

  • Renginizi seçin

    Tarzınızı yansıtan rengi belirleyin ve estetik uyumu sağlayın.

Geri