Autor Zpráva
Vojko
Profil
Dobrý deň,

chcel by som Vás požiadať o pomoc.
Mám jednoduchý formulár, ktorý by som chcel aby odosielal dáta do MySQL.
Neviem avšak kde mám chybu.

Formulár:

<form action="input.php" method="post">
  <input class="form_input" id="date" name="date" type="text">
  <input class="form_input" id="test1" name="test1" type="text">
  <input class="form_input" id="test2" name="test2" type="text">
</form

A toto obsahuje input.php:

<?php
$con = mysql_connect("HOST","UZ.MENO","HESLO");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("TU SOM VYPLNIL MENO DB", $con);

$sql="INSERT INTO Persons (Date, Test, Test2)
VALUES
('$_POST[date]','$_POST[test1]','$_POST[test2]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);
?> 

Ďakujem za každú pomoc.
Hando
Profil
Ahoj.

A co ti to vypisuje za chyby? Vypiš si proměnnou sql pomocí echa a uvidíš, jestli je v ní to, co očekáváš.
Krom toho vůbec neošetřuješ vstupy od uživatele, což není dobrý nápad.
noName
Profil *
Zkus:

$sql="INSERT INTO Persons (Date, Test, Test2)
VALUES
('{$_POST[date]}','{$_POST[test1]}','{$_POST[test2]}')";
jenikkozak
Profil
noName:
To nemůže žádnou chybu opravit.
Vojko
Profil
Hando tak nemáš nejaký hotový kód ?
Pretože nevyznám sa v tom :/
SIFLER
Profil
Stačí vám bohatě toto:

<?php
$con = mysql_connect('host', 'user', 'pass');
mysql_select_db('db');    
if(!$con){                                                           
  die('Chyba v připojení k MySQL.');                   
}

mysql_query("INSERT INTO Persons (Date, Test, Test2) VALUES ('$_POST[date]','$_POST[test1]','$_POST[test2]')");
?>

Místo POST proměnných použijte celé, které převedte na ně a zároveň je ošetříte.

Takže zápis by mohl vypadat nějak takto:

mysql_query("INSERT INTO Persons (Date, Test, Test2) VALUES ('$date','$test1','$test2')");
Hando
Profil
Trochu bych to poupravil:

[pre]<?php
$con = mysql_connect('host', 'user', 'pass');
mysql_select_db('db');    
if(!$con){                                                           
  die('Chyba v připojení k MySQL.');                   
}

$date=mysql_real_escape_string($_POST["date"]);
$test1=mysql_real_escape_string($_POST["test1"]);
$test2=mysql_real_escape_string($_POST["test2"]);


$insert="INSERT INTO Persons SET
Date='$date',
Test='$test1',
Test2='$test2'
";

$insert=mysql_query($insert);

    if (isset($insert)){
        echo "Uloženo"; 
              }
    else{    
         echo("chyba při vkládání!");
       }

?>

Takhle bys měl být informován o tom, zda se to vůbec uložilo nebo ne, stejně tak bys měl mít ošetřené vstupy od uživatel prostřednictvím mysql_real_escape_string.
Pokud by to dělalo nějaký problém, dá se hned vypsat $insert pomocí echo $insert; a výsledný výstup hodit do konzole mysql, třeba v Admineru nebo PHPMyAdmin - pokud tam nebude chyba, je třeba ji hledat jinde.
Píšu to v rychlosti, snad tam nejsou chyby...
jenikkozak
Profil
Hando:
Tvá podmínka vypíše „Uloženo“ bez ohledu na úspěch ukládání do databáze.
SIFLER
Profil
Proboha, hlavně neescapujte, stačí:

$date = htmlspecialchars($_POST['date'], ENT_QUOTES);

A jinak ověření zda-li se to vůbec uložilo můžeš mnoha způsoby, ale když máš preciznost v kódu tak nemusíš vůbec kontrolovat zda-li se to uložilo tímto způsobem, ale spíže kontrolovat zda proměnné odpovídají parametrům, které chceš aby byly. Takže řekněme, že uložení můžeš provést až v tom případě, jak si budeš jist, že tvoje proměnné odpovídají tomu co přesně chceš. A nemusíš si nad tím lámat hlavu.
Vojko
Profil
Nóó tak teraz v tom mám guláš jak sviň. :D

Ako má teda vypadať finálna verzia kódu ? :D
Alphard
Profil
SIFLER:
Proboha, hlavně neescapujte, stačí:
Před ukládáním do databáze? Takováto rada přímo škodí. Jestli to nemůžete nějak obhájit, upravte prosím svůj příspěvek, ať nemate, nebo k tomu asi dopíši komentář já.

[#10] Vojko
Trochu samostatnosti. Existuje hodně možných způsobů.
Ano, v tomto vlákně vzniká bordel, ale vy sám se ho nesnažíte řešit. Ráno sem nahrajete "nefunkční" kód s nepopsaným problémem. O půl šesté se jen zeptáte na hotový kód a teď svou žádost víceméně jen zopakujete.
SIFLER
Profil
Alphard:
V mé radě nebylo to co škodí, co stačí jsem napsal. Tak jaký je problém?..
Alphard
Profil
htmlspecialchars($_POST['date'], ENT_QUOTES); není náhrada za mysql_real_escape_string(), nebo myslíte, že ano? Konkrétně se mi nelíbí vaše rada „hlavně neescapujte“, myslím, že by měla znít opačně, nezapomeň escapovat.

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: