Autor Zpráva
Ankiank
Profil *
Čau, dělám kód pro zápis článků do databáze, jenže mi nastane chyba (Column count doesn't match value count at row 1 - počet sloupců nesouhlasí .....) jenže je problém že souhlasí :? Také bych potřeboval jak do políčka pro článek místo toho input text dát <textarea> (Btw. jsem začátečník O:) )
KÓD
<html>
<head><title>Administrace - přidej článek</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>

<?
include "./connect.php";// připojení k databázi

if(isset($_POST['submit'])) {

  $titulek = mysql_real_escape_string($_POST['titulek']);
  $datum = mysql_real_escape_string($_POST['datum']);
  $kategorie = mysql_real_escape_string($_POST['kategorie']);
  $autor = mysql_real_escape_string($_POST['autor']);
  $text = mysql_real_escape_string($_POST['text']);
  
  /* --- KONTROLA ZADANÝCH ÚDAJŮ --- */
  if($titulek==""){
    echo'Nebyl vyplněn titulek!';
  }
  else if($text==""){
    echo'Nebyl vyplněn text';
  }
  else if($datum==""){
    echo'Nebyl vyplněn datum';
  }
  else if($kategorie==""){
    echo'Nebyla vyplněna kategorie';
  }
  else if($autor==""){
    echo'Nebyl vyplněn autor';
  }
    else{
    $sql= mysql_query("INSERT INTO clanky VALUES ('','$titulek','$text','$datum','$kategorie','$autor')") or die(mysql_error());
    echo'Článek byl úspěšně vložen!';
  }
}
?>

<form action="#" method="post">     
  <table>
    <tr>
      <td>Titulek: </td>
      <td><input type="text" name="titulek" value="<?php if(isset($_POST["titulek"])){echo $_POST["titulek"];}?>" size="25" tabindex="1" /></td>
    </tr>
    <tr>
      <td>Autor: </td>
      <td><input type="text" name="autor" value="<?php if(isset($_POST["autor"])){echo $_POST["autor"];}?>" size="25" tabindex="2" /></td>
    </tr>
    <tr>
      <td>Kategorie: </td>
      <td><input type="text" name="kategorie" value="<?php if(isset($_POST["kategorie"])){echo $_POST["kategorie"];}?>" size="25" tabindex="3" /></td>
    </tr>
    <tr>
      <td>Datum: </td>
      <td><input type="text" name="datum" value="<?php if(isset($_POST["datum"])){echo $_POST["datum"];}?>" size="25" tabindex="4" /></td>
    </tr>
      <td>Článek: </td>
      <td><input type="text" name="text" value="<?php if(isset($_POST["text"])){echo $_POST["text"];}?>" size="25" tabindex="5" /></td>
    <tr>
      <td colspan="2"><input type="submit" name="submit" value="Přidat článek" /></td>
    </tr>
  </table>
</form>

</body>
</html>

Mimochodem, ta databáze http://imageshack.us/photo/my-images/87/23040422.jpg/
pcmanik
Profil
Ankiank:
Ked pocitam, tak vkladas do 6 stlpcov, pricom mas v DB len 5. Takze chybova hlaska je spravna.
Tvoje overenie obsahu je dost chabe, nakolko staci vlozit medzeru a hned ti to prejde cez tie tvoje podmienky, co myslim nechces, preto si este pozri funkciu trim().
Takisto ti chyba overenie, ci neni prekroceny pocet znakov, inak sa to v DB oreze a ty o tom nebudes vediet.
Pri INSERTE mysql_real_escape_string() nepotrebujes, ovela podstatnejsie je pri vypise pouzit htmlspecialchars()
Co sa tyka policka pre clanok, tak tam tu textareu jednoducho vloz a nastav jej name, v php k nej budes pristupovat rovnako, ako k tym inputom.

A prosim, nebav sa tu s nami ako s detmi: cau, smajlikov atd. Si nechaj pre kamaratov.
Ankiank
Profil *
Díky. Na ty funkce se podívám, pročtu a pozměním to. Ale já nevím, jsem asi *****, ale ať počítám jak počítám, dopočítávám se toho, že vkládám sloupců pět (1. titulek, 2. Autor, 3.Kategorie, 4.Datum, 5. Text).

Mimochodem, pardon.
pcmanik
Profil
Ankiank:
Tie prve uvodzovky tam nemaju byt, samozrejme vratane tej ciarky, co nasleduje.

$sql= mysql_query("INSERT INTO clanky VALUES ('','$titulek','$text','$datum','$kategorie','$autor')") or die(mysql_error());
Ankiank
Profil *
Už to vidím. Díky moc. No, teď už jen nastudovat ty funkce.
Ankiank
Profil *
A pokud se ještě mohu zeptat, jaký je rozdíl mezi mysql_real_espace_string a htmlspecialchars? Předem díky za odpověď.
Ankiank
Profil *
A ještě bych připojil jeden dotaz. Když něco vyplním špatně, tak v <input type="text"> mi vyplněné údaje zůstanou, ale v textaree ne. Jde to zabezpečit?
pcmanik
Profil
Ankiank:
V tom inpute ti ostanu len vdaka cache prehliadaca, na to, aby ti tam tie udaje skutocne ostali mozes vyuzit napr. ajax pre spracovanie toho formulara bez odosielania.

mysql_real_espace_string Upravuje znaky tak, aby sa zabranilo sql injection v sql dotaze.
htmlspecialchars sluzi na to, ze ak sa dostane do DB kod napr <b>Text</b> tak aby sa nevykonal pri vypise, ak tuto funkciu nepouzijes, tak sa ti ten text zobrazi ako tucny, resp. si mozes domyslet aka je to bezpecnostna diera.

Otvor si PHP manual, obidve funkcie su tam pekne popisane aj s prikladmi.

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