2016-07-16 2 views
2

У меня есть две таблицы в моей БД, telephones(id, title, price) и images(id, tp_id, photos) я пошел в images стол и поставить внешний ключ на tp_id колонке, чтобы соответствовать id в telephones стол так, что каждое изображение является связанный с telephone. Но проблема в том, что мои изображения попадают в таблицу отлично, но столбец tp_id всегда имеет значение 0, чего я здесь не хватает? может ли кто-нибудь меня вести? Спасибовставки изображения в другую таблицу с внешним ключом

PS: Я знаю об уязвимости безопасности моего кода. Я просто делаю некоторые тесты здесь!

<?php 

if (isset($_POST['submit'])) { 

    include 'dbconnect.php'; 


    for ($i = 0; $i < count($_FILES["photo"]["name"]); $i++) { 


     $target = "img/"; //This is the directory where images will be saved 
     $target_files = $target . basename($_FILES['photo']['name'][$i]); //This gets all the other information from the form 
     $ad_title = $_POST['title']; 
     $ad_price = $_POST['price']; 
     $ad_photo = $target . ($_FILES['photo']['name'][$i]); 

     if (!move_uploaded_file($_FILES['photo']['tmp_name'][$i], $target_files)) { //Tells you if its all ok 
      echo "Sorry, there was a problem uploading your file."; 
     } else { //Gives and error if its not 
      $sql = "INSERT INTO telephones (title, price) VALUES ('$ad_title', '$ad_price')"; 
      $conn->query($sql); 

      $sql1 = "INSERT INTO images (photos) VALUES ('$ad_photo') "; 
      $conn->query($sql1); 
//Writes the photo to the server 

      header('location: addconfirm.php'); 
     } 
    } 
} 
?> 
+1

** ПРЕДУПРЕЖДЕНИЕ ** Этот код имеет серьезные [SQL injection bugs] (http://bobby-tables.com/), потому что вы отправляете данные '$ _POST' непосредственно в свой запрос. По возможности используйте ** подготовленные заявления **. Это довольно просто сделать в ['mysqli'] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [PDO] (http://php.net/manual/ ru/pdo.prepared-statements.php), где любые предоставленные пользователем данные указываются с индикатором '?' или ': name', который позже заполняется с помощью' bind_param' или 'execute' в зависимости от того, какой из них вы используете. – tadman

ответ

0

получить последнее вставленное значение первичного ключа, используя этот

$last_id = $conn->insert_id; 
+0

на запрос второго? – Juju

+0

@Juju получить последний вставленный идентификатор из первого запроса и использовать его во втором запросе. – deadman

0

Вы должны получить последние вставить идентификатор форму telephones таблицы с помощью $conn->insert_id; и вставок в images таблице как

$sql = "INSERT INTO telephones (title, price) VALUES ('$ad_title', '$ad_price')";      
      $conn->query($sql); 
      $tp_id=$conn->insert_id;// get last insert id 

$sql1 = "INSERT INTO images (photos,tp_id) VALUES ('$ad_photo',$tp_id) "; 
      $conn->query($sql1); 

Примечания : - Ваш скрипт открыт для проверки на дюйм sql How can I prevent SQL injection in PHP?, чтобы предотвратить его.

+0

благодарит за работу – Juju

+0

Прочитайте http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Saty

1

Вопрос уже ответили много раз Используйте : MySQL: LAST_INSERT_ID()

$sql = "INSERT INTO telephones (title, price) VALUES ('$ad_title', '$ad_price')";      
$conn->query($sql); 
$tp_last_insert_id = $conn->LAST_INSERT_ID;// get last insert id 

вы должны вызывать эту функцию сразу после вставки, чтобы получить последние добавленные ID

$sql1 = "INSERT INTO images (photos,tp_id) VALUES ('$ad_photo',$tp_last_insert_id) "; 
    $conn->query($sql1); 
+0

спасибо, что это сработало – Juju

Смежные вопросы