Eklemek veya bir alt satır güncelleme olamaz: Bir yabancı anahtar kısıtlaması başarısız

2 Cevap php
// Getting the id of the restaurant to which we are uploading the pictures
$restaurant_id = intval($_GET['restaurant-id']);

if(isset($_POST['submit']))
{
    $tmp_files = $_FILES['rest_pics']['tmp_name'];
    $target_files = $_FILES['rest_pics']['name'];
    $tmp_target = array_combine($tmp_files, $target_files);
    $upload_dir = $rest_pics_path;
foreach($tmp_target as $tmp_file => $target_file)
    {
        if(move_uploaded_file($tmp_file, $upload_dir."/".$target_file))
        {
            $sql = sprintf("
            INSERT INTO rest_pics
            (branch_id, pic_name)
            VALUES ('%s', '%s')"
            , mysql_real_escape_string($restaurant_id)
            , mysql_real_escape_string(basename($target_file)));
            $result = mysql_query($sql) or die(mysql_error());
        }

Ben sonraki hatayı alıyorum:

Cannot add or update a child row: a foreign key constraint fails (rest_v2.rest_pics, CONSTRAINT rest_pics_ibfk_1 FOREIGN KEY (branch_id) REFERENCES rest_branches (branch_id) ON DELETE CASCADE ON UPDATE CASCADE

Ancak, bu hata tamamen kaybolur ve ben sql sorgu yerine $ restaurant_id değişkeni doğrudan restoran id (14 örneğin) koyduğunuzda her şey iyi gider.

The URL am getting the id from is: http://localhost/rest_v2/public_html/admin/add-delete-pics.php?restaurant-id=2

Herhangi bir yardım lütfen?

2 Cevap

Sorry guys, I figured it out. The error was in the form, I used:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...

yerine:

<form action="" ...

Bu onun GET parametreleri olmadan sayfa yükleme yapılmış, böylece branch_id eksikti ve bu sily hata oluştu bu yüzden.

Teşekkürler cevaplar için çok :)

Sorun sorgu dizesi olarak $ restaurant_id koyarak olmasıdır. Bunu alıntı var. Bu ile değiştirmek istiyorum:

 $sql = sprintf("
            INSERT INTO rest_pics
            (branch_id, pic_name)
            VALUES (%s, '%s')" //<-- I removed the quotes around the first %s
            , mysql_real_escape_string($restaurant_id)
            , mysql_real_escape_string(basename($target_file)));

Ayrıca, PDO kullanarak yerine dışarı tarihli mysql_ * işlevleri içine bakmak isteyebilirsiniz. Bunlar, temiz daha hızlı, daha güvenli ve daha modern demektir. İşte PDO kullanarak aynı sorgu var:

$statement = $db->prepare('INSERT INTO rest_pics (branch_id, pic_name) VALUES (?, ?)');
$statement->execute(array($restaurant_id, $target_file));

Ben PDO doğru çıkmıyor gidiyor sorgular ve sonuçlar için veri türünü belirler çünkü tırnak endişesi ile uğraşmak zorunda olmadığını fark. Hiçbir manuel öncelemeli - Ayrıca, bu varsayılan olarak güvenlidir. Eğer PDO kullanılan, diğer bir deyişle, bu olmazdı.