[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
mysqli_real_escape_string

Registrovaný: 13.11.06
Prihlásený: 13.04.21
Príspevky: 169
Témy: 54 | 54
NapísalOffline : 18.03.2009 19:00 | mysqli_real_escape_string

Zdravím skušam si niečo naštudovať o php a mysql a narazil som na problem.
Mám príklad(nejaka jednoducha kniha návštev s overovanim ci sa pripojilo a vypisovanim chyb-je tam toho dosť navyše):
Kód:
<html>
<head>
<title>Kniha návštěv</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php


// -- Připojení k databázi a správné nastavení češtiny --

// Připojení k databázi.
$db_spojeni = mysqli_connect
  ('localhost', 'root', 'lokomotiva', 'test', 3306);
 
// Otestování, zda se připojení podařilo.
if (!$db_spojeni)
{
  echo 'Připojení se nepodařilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_connect_error();
  exit();
}

// Správné nastavení češtiny.
$objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'cp1250'");
if (!$objekt_vysledku)
{
  echo 'Poslání SQL příkazu se nepodařilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_error($db_spojeni);
  exit();
}


// -- Vlož nový zápis, pokud byl odeslán formulářem --

// Test, jestli přišla data z formuláře.
if (isset($_POST['zprava']))
{
  // Vytvoření SQL příkazu typu INSERT.
  $sql_prikaz =
    "INSERT INTO kniha_navstev(datum,jmeno,email,zapis) "
    ."VALUES(NOW(),'"
    .mysqli_real_escape_string($db_spojeni,$_POST['jmeno'])
    ."','"
    .mysqli_real_escape_string($db_spojeni,$_POST['email'])
    ."','"
    .mysqli_real_escape_string($db_spojeni,$_POST['zprava'])
    ."')"
    ;

  // Zaslání SQL příkazu do databáze.
  $objekt_vysledku = mysqli_query($db_spojeni, $sql_prikaz);
 
  if (!$objekt_vysledku)
  {
    echo 'Poslání SQL příkazu se nepodařilo, sorry';
    echo '<br />';
    echo 'Popis chyby: ', mysqli_error($db_spojeni);
    exit();
  }
  echo 'Nový zápis do knihy návštěv přidán.<br />';
}


// -- Vypiš všechny zápisy v knize návštěv --

// Zaslání SQL příkazu do databáze.
$objekt_vysledku = mysqli_query($db_spojeni,
  'SELECT * FROM kniha_navstev ORDER BY datum DESC');
if (!$objekt_vysledku)
{
  echo 'Poslání SQL příkazu se nepodařilo, sorry';
  echo '<br />';
  echo 'Popis chyby: ', mysqli_error($db_spojeni);
  exit();
}

// Zobrazení všech vrácených dat.
while ($radek = mysqli_fetch_array($objekt_vysledku))
{
  echo '<hr />';
  echo 'Datum a čas: ',$radek['datum'],'<br />';
  echo 'Napsal: ',$radek['jmeno'],' (',$radek['email'],')<br />';
  echo 'Zápis: ',$radek['zapis'],'<br />';
  echo '<br />';
}
echo '<hr />';


// -- Odpojení od databáze --

// Zavření objektu výsledku, protože už ho nebudeme používat.
mysqli_free_result($objekt_vysledku);
 
// Odpojení od databáze.
if ($db_spojeni)
  mysqli_close($db_spojeni);


// -- Formulář pro vkládání nových zápisů --
?>
<form name="kniha" action="" method="post">
<b>Jméno:</b><br />
<input name="jmeno" size="40"><br />
<br />
<b>Mail:</b><br />
<input name="email" size="40"><br />
<br />
<b>Zpráva:</b><br />
<textarea name="zprava" rows="5" cols="30"></textarea><br />
<br />
<input type="submit" value="Odeslat zprávu">
</form>

</body>
</html>

všetko chápem len neviem prísť na princíp zápisu tohoto tu
Kód:
  $sql_prikaz =
    "INSERT INTO kniha_navstev(datum,jmeno,email,zapis) "
    ."VALUES(NOW(),'"
    .mysqli_real_escape_string($db_spojeni,$_POST['jmeno'])
    ."','"
    .mysqli_real_escape_string($db_spojeni,$_POST['email'])
    ."','"
    .mysqli_real_escape_string($db_spojeni,$_POST['zprava'])
    ."')"
    ;

konkretne prečo je .mysqli_real_escape_string ta bodka? a vlastne cely ten kod premennej $sql_prikaz znamena .... snáď som tu nechcem niečo zložité :oops:


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3984
Témy: 96 | 96
NapísalOffline : 18.03.2009 19:07 | mysqli_real_escape_string

lebo ti to v PHP spája reťazce


Offline

Užívateľ
Užívateľ
mysqli_real_escape_string

Registrovaný: 13.11.06
Prihlásený: 13.04.21
Príspevky: 169
Témy: 54 | 54
Napísal autor témyOffline : 18.03.2009 19:20 | mysqli_real_escape_string

aj som myslel nebol som isty ale ked som si to prepisal do podoby
Kód:
$sql_prikaz ="INSERT INTO kniha_navstev(datum,jmeno,email,zapis) "."VALUES(NOW(),'".mysqli_real_escape_string($db_spojeni,$_POST['jmeno'])."','".mysqli_real_escape_string($db_spojeni,$_POST['email'])."','"   .mysqli_real_escape_string($db_spojeni,$_POST['zprava'])."')";

tak to je neprehladne ale teraz tie bodky tam maju opodstatnenie no s takymito banalitami sa ja trapim vkuse ..... podstata pochopena detail robi problem :loony: :oops: dik


Offline

Skúsený užívateľ
Skúsený užívateľ
mysqli_real_escape_string

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1585
Témy: 96 | 96
NapísalOffline : 19.03.2009 18:15 | mysqli_real_escape_string

Ale tento zápis je naozaj škaredý. Skôr by som sa pozrel po inej alternatíve. Moja obľúbená funkcia sprintf:
Kód:
$sql_prikaz = spintf("INSERT INTO kniha_navstev(datum,jmeno,email,zapis) VALUES (NOW(),'%s','%s'",
 mysqli_real_escape_string($db_spojeni,$_POST['email']),
 mysqli_real_escape_string($db_spojeni,$_POST['zprava'])
)


Keď s php pokročíš ďalej, pozri sa po stored procedures, teraz na to ale kašli


_________________
neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to!
 [ Príspevkov: 4 ] 


mysqli_real_escape_string




© 2005 - 2024 PCforum, edited by JanoF