Autor Zpráva
master2222
Profil
Ahoj, udělal jsem si script na vkládání záznamů do db, ale nefunfuje... Nevím proč a tak se vás ptát, jestli nevidíte chybu. Po zádání povinných údajů(Jméno a text) mi to napíše, že sice operace proběhla v pořádku, ale nic to neudělá...

Index.php

<!DOCTYPE HTML PUBLIC "-W3CDTD HTML 4.01 TransitionalEN">

<html>
  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  <title>Komentář</title>

  </head>
  <body>

  <?php

  if(isset($_GET["ok"])) { echo "Operace proběhla úspěšně"; }

  if(isset($_GET["err"])) { echo "Někde se stala chyba"; }

  ?>

  <form action="uloz.php" method="post">

  <table>

  <tr>

    <td>Jméno:</td><td><input type="text" name="user"></td>

  </tr>

  <tr>

    <td>E-mail:</td><td><input type="text" name="mail"></td>

  </tr>

  <tr>

    <td>Web:</td><td><input type="text" name="web"></td>

  </tr>

  <tr>

    <td>Text:</td><td><textarea type="text" name="text"></textarea></td>

  </tr>

  <tr>

    <td colspan="2"><input type="submit" value="Komentuj"></td>

  </tr>

  </table>

  </form>

  </body>
</html>


uloz.php

<?php

require_once "nastaveni.php";

if(!(MySQL_Connect("$DB_HOST","$DB_USER","$DB_PASS"))) {

  die("Nepodařilo se připojit k databázi");

}
if(!(MySQL_Select_DB($DB_NAME))) {

  die("Databáze nebyla nalezena");

}
// Ověření, zda komentující zadal povinné údaje jméno a text

if(isset($_POST["user"]) && isset($_POST["text"]))

{

  $user = $_POST["user"];

  $mail = $_POST["mail"];

  $web = $_POST["web"];
 
  $text = $_POST["text"];
  //Uložení komentáře do db

  MySQL_Query("INSERT INTO komentare2  VALUES ('','$user','$mail','$web','$text')");
header("Location:index.php?ok");

} else {

  header("Location:index.php?err");

}

?>


nastaveni.php

<?php

$DB_HOST = "localhost";
$DB_USER = "root";
$DB_PASS = "???";
$DB_NAME = "root";
?>

tabulka Mysql

CREATE TABLE komentare2 (

id_komentare TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

user VARCHAR( 40 ) NOT NULL ,

mail VARCHAR( 50 ) NOT NULL ,

web VARCHAR( 50 ) NOT NULL,

text TEXT NOT NULL

) ENGINE = innodb;


Děkuji za všechny rady...
panther
Profil
master2222
if(isset($_GET["ok"]))
nemělo by být:
if(isset($_GET) and ($_GET == "ok")) ...
nightfish
Profil
MySQL_Query("INSERT INTO komentare2  VALUES ('','$user','$mail','$web','$text')");

nahraď za
MySQL_Query($q="INSERT INTO komentare2  VALUES ('','$user','$mail','$web','$text')") or Die("dotaz = $q<br>chyba = ".mysql_error());


a poděl se s námi o výsledek

EDIT: a pro jistotu ještě zakomentuj ten první Header, aby se v případě chyby hned nepřesměrovalo pryč
Tomasds
Profil
Doporučil bych pro účely odladění vyhodit header("Location:index.php?ok"); a ten dotaz nad tím si nejdřív seskládat do proměnné .. $qry = "INSERT ... a tu proměnnou vypsat. Jestli tam neuvidíš žádný zřejmý problém, tak si zkus ten dotaz provést přímo phpmyadminem, kde se dozvíš o něco víc, než jen to, že se to nepodařilo.
Kromě toho doporučuji používat spíš tvar
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
, ušetří ti to spoustu času při ladění, protože vždycky vidíš, co kam vkládáš. Když v tom tvém případě vložíš třeba před "mail" sloupec "telefon", tak se budeš divit, že ti to nefunguje.
nightfish
Profil
panther
nemělo... $_GET je pole
pokud bude v URL ?ok
tak je $_GET['ok'] správně
master2222
Profil
Upravil jsem podle rad uloz.php takto

<?php

require_once "nastaveni.php";

if(!(MySQL_Connect("$DB_HOST","$DB_USER","$DB_PASS"))) {

  die("Nepodařilo se připojit k databázi");

}



if(!(MySQL_Select_DB($DB_NAME))) {

  die("Databáze nebyla nalezena");

}



// Ověření, zda komentující zadal povinné údaje jméno a text

if(isset($_POST["user"]) && isset($_POST["text"]))

{

  $user = $_POST["user"];

  $mail = $_POST["mail"];

  $web = $_POST["web"];
  
  $text = $_POST["text"];



    // overeni, jestli uzivatel nebo mail uz v databazi neni

 

  //Uložení komentáře do db

  MySQL_Query($q="INSERT INTO komentare2 (user,mail,web,text) VALUES ($user, $mail, $web, $text) ") or Die("dotaz = $q<br>chyba = ".mysql_error());


}
 

?>


A napsalo mi to toto

dotaz = INSERT INTO komentare2 (user,mail,web,text) VALUES (Někdo, nekdo@nekde.cz, http://www.nekde.cz, Nějaký text...)
chyba = You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�kdo, nekdo@nekde.cz, http://www.nekde.cz, Nějaký text...)' at line 1
tane
Profil
INSERT INTO komentare2 (user,mail,web,text) VALUES ('".$user."', '".$mail."', '".$web."', '".$text."')
tiso
Profil
tane - zbytočná úprava, nič to nevyrieši.
AM
Profil *
VALUES ($user, $mail, $web, $text)
Vrať tam ty uvozovky, tohle je hrůza.
V jakém kódování máš DB? podle toho <?> znaku v query typuju, že je nějaký problém s UTF8
master2222
Profil
Znaková sada v MySQL: UTF-8 Unicode (utf8)

Nenapsali by jste mi teda něco podobného, aby to fungovalo, jsem v koncích :-(
khubajsn
Profil *
mysql_query("SET NAMES UTF-8")
AM_
Profil
Nenapsali by jste mi teda něco podobného, aby to fungovalo, jsem v koncích :-(
Kolik za to dáš?

Radši si tam vrať ty uvozovky, bez kterých ti to rozhodně nepojede, a řekni, co ti to hází potom.

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: