Autor Zpráva
skrebl
Profil
Zdravim,
mám array a mám v něm nějaké hodnoty a všechny ty hodnoty bych potřeboval dostat do tabulky do jednoho sloupečku aby tam bylo např. hodnota1, hodnota2, hodnota3....
ale problém je ten, že počet hodnot v tom arrayi se mění
tak mě napadlo, že by se to dalo vyřešit spočítáním hodnot v poli, ale nenapadá jak to zapsat

tady je kod:
$pole = array();
    if(count($_FILES["S_IMAGE"]['name'])>0) {
        $GLOBALS['msg'] = ""; 
        for($j=0; $j < count($_FILES["S_IMAGE"]['name']); $j++) { 
            $filen = $_FILES["S_IMAGE"]['name']["$j"]; //file name
            $path = 'uploads/'.$filen; 
            if(move_uploaded_file($_FILES["S_IMAGE"]['tmp_name']["$j"],$path)) { 
                $GLOBALS['msg'] .= "soubor# ".($j+1)." ($filen) byl uploadnut<br>"; 
                $pole[$j+1] = "$filen";
            }
        } 
        $pocet = 0;
        foreach ($pole as $hodnota)
        {
            echo $hodnota.", ";
            $pocet++;
        }

a dotaz: $sql= mysql_query("INSERT INTO reference VALUES ('','$nadpis','$mesto','$text','$obrazek','$odkaz')") or die(mysql_error());

Potřeboval bych to získat do té hodnoty $obrazek
juriad
Profil
Jdeš na to špatně, Některé časteji řešené dotazy pro MySQL - FAQ » Více hodnot ve sloupci
skrebl
Profil
juriad:

Když já nevím jak bych pak získal názvy těch souborů které jsem zrovna uploadnul
Já to potřebuju udělat jako reference.. tzn že z té tabulky pak budu potřebovat vypsat názvy těch obrázku
Takže bych potřeboval nějak oddělit ty zrovna uploadnuté názvy od těch starších

Jednoduše řečeno.. Pak bych je nějak potřeboval přiřadit k těm hodnotám $nadpis $mesto $text $odkaz...
skrebl
Profil
juriad:

Jak se pozná co k čemu patří? Pomohlo by třeba kdybych do té druhé tabulky dal stejný nadpis nebo nějaké další id?
juriad
Profil
Nerozumím tomu, co jsou u tebe "reference".
Ale obecně zde jde o vazbu 1:n: Jedné referenci přísluší více obrázků a zároveň jeden obrázek přísluší jedné referenci.
Ta se v databázi realizuje dvěma tabulkami následovně:
tabulka reference (id_reference, nadpis, text, odkaz)
tabulka obrazky (id_obrazku, id_reference, obrazek)
Jednoduše v tabulce reference budeš mít nějaký primární klíč - jednoznačný identifikátor, obvykle se používá sloupec id s vlastností AUTOINCREMENT.
Každý obrázek bude u sebe mít to id_reference a navíc ještě své id_obrazku. Přes id_reference bude svázaný s referencí a id_obrazku bude sloužit pro jeho identifikaci.
skrebl
Profil
juriad:

Ano, to chápu, ale nevím jak dostat do té druhé tabulky id té reference..
juriad
Profil
Napřed provedeš insert do tabulky reference. Jaké id dostala nově vzniklá reference zjistíš pomocí mysql_insert_id (pokud použiješ autoincrement). A další sérií insertů vložíš do tabulky obrazky postupně všechny obrázky spolu s id reference, které již znáš (z prvního kroku).
skrebl
Profil
juriad:

To id jsem vyřešil takto:
// získání id 
    $tablename         = "reference";
    $next_increment     = 0;
    $qShowStatus         = "SHOW TABLE STATUS LIKE '$tablename'";
    $qShowStatusResult     = mysql_query($qShowStatus) or die ( "Query failed: " . mysql_error() . "<br/>" . $qShowStatus );

    $row = mysql_fetch_assoc($qShowStatusResult);
    $next_increment = $row['Auto_increment'];
/// --------------    

Akorát teď zase nevím jak ty obrázky které patří příslušné referenci vypsat všechny. Vždy se mi vypíše pouze ten první s tím id reference

       if ($_GET['id'] == $_GET['id'])

{
    $id = $_GET['id'];
    echo $id;

    $vysledek = mysql_query("SELECT * FROM reference WHERE id = '$id'") or die(mysql_error());
    $row = mysql_fetch_array($vysledek);
     echo "<h2>".$row["nadpis"]."</h2>\n"; //zobrazíme nadpis
         echo "<p>".$row["mesto"]."</p>\n"; //zobrazíme nadpis
         echo "<p>".$row["text"]."</p>\n"; //zobrazíme nadpis

            echo "<p>".$row["odkaz"]."</p>\n"; // zobrazíme text
    $pocetobr = $row["obrazek"];

    $refobr = mysql_query("SELECT * FROM obrazky WHERE id_reference = '$id'") or die(mysql_error());
    $row2 = mysql_fetch_array($refobr);
    $obr = $row2["obrazek"];
    
    foreach($obraz as $obr)
    {
        
        echo $obraz;

    }
    echo $obr;
    for($i = 1; $i < $pocetobr; $i++)
    {
        echo '<img src="uploads/$obr">';
    }
}

Jak můžete vidět tak jsem zkusil několik různých možností
Majkl578
Profil
skrebl:
To id jsem vyřešil takto:
To je velmi špatné řešení. Může nastat situace, že poběží více požadavků paralelně (což je vysoce pravděpodobné) a v tu chvíli je tato informace nespolehlivá -- v obou scriptech může být stejná popř. jeden script proběhne rychleji, tudíž některý z běžících scriptů bude ukládat neplatné údaje. Použij správný přístup, tj. mysql_insert_id již zmíněné v [#7].
skrebl
Profil
Majkl578:
juriad:


Dobře, použil jsem mysql_insert_id a funguje to, ale stále nevím jak to z té databáze vypsat.
Majkl578
Profil
Dotaz vrací víceřádkový výsledek, je tedy nutné použít výpis v cyklu (to jsou ale základy). Příklad použití je např. ve FAQ (tj. ta část s while).
skrebl
Profil
Jj, děkuju za rady :) Už jsem na to přišel. Předtim sem zkoušel cyklus for a foreach, ale teď jsem použil while a ten funguje :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: