Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    inserimento multiplo su MySQL

    Ciao a tutti,
    devo associare diveri seminari ad un corso (tbl corsi_has_seminari molti a molti) da una pagina dove ho il corso [corsi_idcorsi] e scelgo da una lista multiple select i vari seminari [seminari_idseminari].

    la insert scritta cosi:

    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
    $arr = $_POST['seminari_idseminari'];
    $corso = $_POST['corsi_idcorsi'];
    $tot_value = "";
    foreach ($arr as $value) { // line 43
    $tot_value .= "$value
    \n";
    }

    $insertSQL = sprintf("INSERT INTO corsi_has_seminari (corsi_idcorsi, seminari_idseminari) VALUES ('$corso', '$value')");

    mi restituisce:

    "Warning: Invalid argument supplied for foreach() in F:\etc on line 43
    Out of range value adjusted for column 'seminari_idseminari' at row 1"

    any idea ?

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    nel tuo html sostituisci
    <select name="seminari_idseminari" ...
    con
    <select name="seminari_idseminari[]" ...

  3. #3
    perbacco Bubi1,

    ora gira ma mi inserisce un solo seminario alla volta, credo dipenda dal fatto che il corsi_idcorsi è sempre lo stesso e gli viene passato una sola volta.

    se cambio anche "corsi_idcorsi" in "corsi_idcorsi[]" mi restituisce

    Out of range value adjusted for column 'corsi_idcorsi' at row 1

    come posso ripassarglielo ad ogni insert ?

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    [] servono per select multipli

    out of range te lo da quando inserisci dati non dello stesso tipo del tuo campo mysql. Nel tuo codice vedo che hai ...$corso = $_POST['corsi_idcorsi'];... e poi ...VALUES ('$corso'... . E ovvio che se inserisci un array in un campo numerico riceverai un errore.

    Non ho ben capito se tu vuoi passare allo script 1 corso e molti seminari, o molti corsi e molti seminari.
    Nel primo caso usi le [] solo sui seminari, nel secondo su tutti e due.
    Per ogni set di valori devi fare un ciclo.. quello di adesso e' inutile. Tu fai
    foreach ($arr as $value) { // line 43
    $tot_value .= "$value
    \n";
    }
    e poi
    ...VALUES ('$corso', '$value')"...
    quindi value contiene solo l'ultimo elemento processato dal tuo ciclo

  5. #5
    grazie x spiegazioni Bubi,

    di fatto scelgo 1 corso da un menu e ci associo molti seminari da una lista multipla.
    l'insert è su una tabella molti a molti dove i record sono, tipo:

    Corsi_idcorsi | Seminari_idseminari

    1 2
    1 4
    1 7
    1 8

    il problema è che non so come modificare lo script (suggeritomi :|) per generare l'array che mi passa le coppie di valori...

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    nel tuo html devi avere

    <select name="corsi_idcorsi" ...
    e
    <select name="seminari_idseminari[]" multiple ...

    nel tuo php devi avere (esempio semplice):
    Codice PHP:
    $seminari $_POST['seminari_idseminari'];
    $corso intval($_POST['corsi_idcorsi']);
    if(
    $corso && is_array($seminari) && count($seminari) >0){
      
    $ext=array();
      foreach(
    $seminari as $seminario){
        
    $ext[] = "('$corso','$seminario')";
      }
    }else{
      die(
    'input sbagliato');
    }
    $ext implode(',',$ext);
    $insertSQL "INSERT INTO corsi_has_seminari VALUES $ext;";
    mysql_query($insertSQL) or die('Errore query: '.mysql_error()); 

  7. #7
    Grazie BubiOne, gentilissimo e paziente !

    me la studio & revert

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.