Autor Zpráva
fox2258
Profil *
Zdravíčko,

<CENIK>
<item>
    <id>67275</id>
    <partnum>MP-GEL-GR</partnum>
    <nazev>Podložka pod myš ERGO gelová šedá GEMBIRD retail balení MAXI</nazev>
    <item_url>http://www.gmb.nl/eGMB/item_view.aspx?id=989</item_url>
    <popis>MP-GEL Gel mouse pad with wrist rest  
 Features  
 
Comfortable gel mouse pad with wrist rest
Extra big size: 260x220 mm
3 mm thickness
Grippy rubber bottom
 
 Packing Details  
 
Q'ty in crtn, pcs: 40
Crtn volume, CUM: 0.082362
Crtn weight, kgs: 13
Country of origin: CN
Barcode: 8716309009898
Customs code: 3926909790
 
Gelová podložka pod myš. Komfortní, velikost 260mmx220mm
</popis>
    <vyrobce>GEMBIRD</vyrobce>
    <vyrobce_url>www.gmb.nl</vyrobce_url>
    <Picture_L>http://www.neco.cz/prilohy/254180004486_0.jpg</Picture_L>
    <Picture_S>http://www.neco.cz/prilohy/254180004485_0.jpg</Picture_S>
    <Cena_bez>80</Cena_bez>
    <SNC>0</SNC>
    <AZ>0</AZ>
    <Cena_s>80</Cena_s>
    <Doporucena_bez_DPH>104</Doporucena_bez_DPH>
    <Cena_s_sDPH>97</Cena_s_sDPH>
    <Doporucena_s_DPH>126</Doporucena_s_DPH>
    <Dostupnost />
    <Zaruka>24 měsíc(ů)</Zaruka>
    <EAN>8716309096584</EAN>
    <Skupina>Periferie a PC příslušenství</Skupina>
    <Podskupina>Vstupní zařízení</Podskupina>
    <Kategorie>Podložky a přelepky</Kategorie>
    <Podkategorie />
    <PLU>Podložky pod myš</PLU>
    <ITEM_URL>http://www.neco.cz/eshop.aspx?content=DETAILTVR&amp;nparams=kod_id;57311</ITEM_URL>
    <Stav>2</Stav>
    <Skladem>0</Skladem>
  </item>


</CENIK>

a při nahrávání mi to hodí tuhle chybu:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ty in crtn, pcs: 40
Crtn volume, CUM: 0.082362
Crtn weight, kgs: 13
Country of o' at line 1

Když ten popis změním jako že vymažu to na co to upozorňuje tak to pak projde, akorát mi jde o to, že mam ceník kde je mraky produktů a občas u nějakého produktu je ta syntaxe naprd takže z 5700 produktů se mi jich zapíše do databáze třeba jen 5400. Koukal jsem co mam za typ databáze a je to MariaDB 5.5 a když bych ho smazal a založil novej tak bych byl na verzi MariaDB 10.3. Může to vyřešit problém? a nebo je to potřeba řešit někde jinde a kde? v php zdrojovém kodu? mohu poskytnout

Díky za radu


zkrátka mu vadí ten ' za písmenem Q v popisu. Akorát nevím jak to ošetřit

<?php
 require "db.php"; // pripojeni k databazi

$affectedRow = 0;

$xml = simplexml_load_file("cenik.xml") or die("Error: Cannot create object");

foreach ($xml->children() as $row) {
    $id_produktu = $row->id;
    $part_number = $row->partnum;
    $nazev = $row->nazev;
    $item_url = $row->item_url;
    $popis = $row->popis;
    $vyrobce = $row->vyrobce;
    $obrazek_velky = $row->Picture_L;
    $obrazek_maly = $row->Picture_S;
    $cena_nakup_bez = $row->Cena_s;
    $cena_prodej_bez = $row->Doporucena_bez_DPH;
    $cena_nakup_dph = $row->Cena_s_sDPH;
    $cena_prodej_dph = $row->Doporucena_s_DPH;
    $dostupnost = $row->Dostupnost;
    $zaruka = $row->Zaruka;
    $skupina = $row->Skupina;
    $podskupina = $row->Podskupina;
    $kategorie = $row->Kategorie;
    $podkategorie = $row->Podkategorie;
    $plu = $row->PLU;
    $skladem = $row->Skladem;
    
    $dodavatel="jmeno_dodavatele";
    
    $sql = "INSERT INTO zbozi(id_produktu,partnum,nazev,item_url,popis,vyrobce,obrazek_velky,obrazek_maly,cena_nakup_bez,cena_prodej_bez,cena_nakup_dph,cena_prodej_dph,dostupnost,zaruka,skupina,podskupina,kategorie,podkategorie,plu,skladem_ks,dodavatel) VALUES ('" . $id_produktu . "','" . $part_number . "','" . $nazev . "','" . $item_url . "','" . $popis . "','" . $vyrobce . "','" . $obrazek_velky . "','" . $obrazek_maly . "','" . $cena_nakup_bez . "','" . $cena_prodej_bez . "','" . $cena_nakup_dph . "','" . $cena_prodej_dph . "','" . $dostupnost . "','" . $zaruka . "','" . $skupina . "','" . $podskupina . "','" . $kategorie . "','" . $podkategorie . "','" . $plu . "','" . $skladem . "','" . $dodavatel . "')";
    
    $result = mysqli_query($con, $sql);
    
    if (! empty($result)) {
        $affectedRow ++;
    } else {
        $error_message = mysqli_error($con) . "\n";
    }
}
?>
<h2>Insert XML Data to MySql Table Output</h2>
<?php
if ($affectedRow > 0) {
    $message = $affectedRow . " records inserted";
} else {
    $message = "No records inserted";
}

?>
<style>
body {  
    max-width:550px;
    font-family: Arial;
}
.affected-row {
    background: #cae4ca;
    padding: 10px;
    margin-bottom: 20px;
    border: #bdd6bd 1px solid;
    border-radius: 2px;
    color: #6e716e;
}
.error-message {
    background: #eac0c0;
    padding: 10px;
    margin-bottom: 20px;
    border: #dab2b2 1px solid;
    border-radius: 2px;
    color: #5d5b5b;
}
</style>
<div class="affected-row"><?php  echo $message; ?></div>
<?php if (! empty($error_message)) { ?>
<div class="error-message"><?php echo nl2br($error_message); ?></div>
<?php } ?>
Kajman
Profil
Všechny hodnoty vkládané do dotazu musíte ošetřit. Např.

mysqli_real_escape_string($con, $part_number)
Keeehi
Profil
fox2258:
Ono to má ještě jeden důsledek. Když nemáte ty apostrofy ošetřené, vytváří to technicky zranitelnost SQL Injection.
fox2258
Profil *
Kajman:
díky moc :-) vyřešeno

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:

0