Autor Zpráva
gerix
Profil
Zdravím, mám tenhle kód:

$id = $_POST["id"];
$name = $_POST["name"];
mysql_query("UPDATE ps_product_lang SET name='$name' WHERE id_product=$id");

TADY: name='$name' jsou asi špatně uvozovky, ale nevím jak na to.

Když v $name mám zadáno v textovém poli na předchozí stránce tohle:

Liťáky 26" černé - uloží se to do db jako Liťáky 26 - bez slova černé a bez uvozovky

jak to tedy opravit aby bylo vše ok? Díky za radu
Taps
Profil
gerix:
máš nastavené všude jednotné kǒdování ?..samotný sql příkaz je v pořádku jen ho ještě ošetřit proti sql injection
Someone
Profil
mysql_query("UPDATE ps_product_lang SET name='".$name."' WHERE id_product='".$id."'");
Já bych to použil asi takto i když chyba bude asi jinde viz. [#2] Taps
Taps
Profil
Someone:
Myslím si, že to daný problém nevyřeší
gerix
Profil
cely to mam takhle:

zpracuj.php
<?php
$MySQL_server="localhost";
$MySQL_user="dsf";
$MySQL_user_password="asd";
$MySQL_db="asd";
$spojeni=mysql_connect($MySQL_server,$MySQL_user,$MySQL_user_password);
$spojenidb=mysql_select_db($MySQL_db);

$id = $_POST["id"];
$name = $_POST["name"];

                    mysql_query("SET character_set_results=utf8");
                    mysql_query("SET character_set_connection=utf8");
                    mysql_query("SET character_set_client=utf8");
                    mysql_query("SET names='utf8';");
                    mysql_query("UPDATE ps_product_lang SET name='".$name."' WHERE id_product=$id");
            
            Header('Location: formular.html');

?>


formular.html

<form method="POST" action="zpracuj.php">
    <input type="hidden" name="id" value="1056">
    <input type="text" name="name" value="Rám FORCE MTB 26 - modro-bílý L50">
    <button>Upravit!</button>
</form>


+ soubory uložený v UTF-8


Kde by tedy mohla být chyba? Děkuji
Taps
Profil
gerix:
a hlavičce html dokumentu máš nastavené jaké kódování ? v jakém kódování je soubor uložen ?
gerix
Profil
Taps:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
pcmanik
Profil
Someone:
Prevadzas cislo na string. To je absolutne zbytocne
Taps
Profil
gerix:
zkus upravit set names, viz níže
mysql_query("set names utf8");
Han
Profil
gerix:
Skús použiť $name=mysql_real_escape_string($_POST['name'])
gerix
Profil
Taps:

Zkusil jsem, ale bohužel nepomohlo.

pcmanik:

Nevím co myslíš konkrétně?
Someone
Profil
gerix:
Nevím co myslíš konkrétně?
Myslí toto:
mysql_query("UPDATE ps_product_lang SET name='".$name."' WHERE id_product='".$id."'");
klidně je vynech.
gerix
Profil
Han:

Taky nepomohlo:(
Taps
Profil
gerix:
do stránky zpracuj.php dej níže uvedený kod a zakomentuj header
<?
print_r($_POST);
?>
Vypíše se ti text v pořádku s diakritikou ?
Someone
Profil
[#14] Taps
I kdyby byla špatná diakritika, tak by se to mělo zapsat do DB tak či tak, s tím rozdílem, že místo nevhodného znaku bude např. ?.
Myslím si, že je problém v oněch uvozovkách, které předčasně ukončí řetězec. Ovšem divné je, že [#10] nezabrala.
Taps
Profil
gerix:
a nemáš ještě omezenou délku řetězce v phpmyadminu ? např. varchar 20...
gerix
Profil
Taps:

varchar(128) utf8_general_ci

print_r($_POST); => vypsalo to správně - Liťáky 26" černé

info na mailu
Someone
Profil
gerix:
Zkus si vypsat:
$name = mysql_real_escape_string($_POST['name']);
echo $name;
Mělo by to vypadat takto: Liťáky 26\" černé
gerix
Profil
Someone:

jj přesně to vypsalo
Someone
Profil
Když odstraníš uvozovky, zapíše se to správně?
gerix
Profil
Someone:
ano bez te uvozovky je všechno v pořádku

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: