Autor Zpráva
noskill
Profil
Dobrý den, jsem teprve začátečník a zkouším vytvořit databázi, která si bere informace s kontaktního formuláře vloží je do databáze a poté vytiskne na stránce v tabulce. Použil jsem tenhle kód ze stránek http://www.tvorba-webu.cz/php/mysql.php.

<?
$db="mydata";
$tb="adresar";
$sloupec1="Jméno";
$sloupec2="Zvíře";
$sloupec3="Částka";
$spojeni=mysql_connect("localhost","php@localhost","php");
mysql_select_db($db, $spojeni);
$tabulka=mysql_query("CREATE TABLE `$tb` (`$sloupec1` VARCHAR (20) NOT NULL,`$sloupec2` VARCHAR (40) NOT NULL)", $spojeni );

?>

<?
$db="mydata";
$tb="adresar";
$spojeni=mysql_connect("localhost","php@localhost","php");
mysql_select_db($db, $spojeni);
mysql_query("INSERT INTO $tb values ($_POST['name'], $_POST['zvire'], $_POST['castka']), $spojeni");  
?>

Hází mi to chybu v mysql_query (zápis mám dle mého špatně).

Za odpověď velice děkuji.
Majkl578
Profil
Jakou chybu?

18. řádek má vypadat takto:
mysql_query("INSERT INTO $tb values ($_POST['name'], $_POST['zvire'], $_POST['castka'])", $spojeni); 

Celé řešení má nicméně bezpečnostní díru, je náchylné vůči SQL injection.
juriad
Profil
Navíc do tabulky se dvěma sloupci vkládáš tři hodnoty. Chybí ti na řádku 9 definice třetího sloupce.
noskill
Profil
Mám tři sloupce ale stále mi to hlásí chybu :/
Vyskakuje mi tahle hláška:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /home/users/noskill/zvirata.g6.cz/web/poslat.php on line 44

Znáte nějaké zdroje o bezpečnosti dírách v databázích a php?
juriad
Profil
Když se uvnitř stringu odkazuješ na prvek pole, nepoužívají se ani apostrofy, ani uvozovky:
"$_POST[name]"
noskill
Profil
Moc díky :) ale stále tam je ještě někde chyba.. hlásí to chybovou hlášku ve vytvoření databáze. Parse error: syntax error, unexpected ')' in /home/users/noskill/zvirata.g6.cz/web/poslat.php on line 24

<?
$jmeno="mydata";
$spojeni=mysql_connect("localhost","php@localhost","php");
$vytvorit=mysql_create_db($jmeno, $spojeni) );
?>

<?
$db="mydata";
$tb="adresar";
$sloupec1="Jméno";
$sloupec2="Zvíře";
$sloupec3="Částka";
$spojeni=mysql_connect("localhost","php@localhost","php");
mysql_select_db($db, $spojeni);
$tabulka=mysql_query("CREATE TABLE `$tb` (`$sloupec1` VARCHAR (20) NOT NULL,`$sloupec2` VARCHAR (40) NOT NULL, `$sloupec3` VARCHAR (40) NOT NULL)", $spojeni);

?>

<?
$db="mydata";
$tb="adresar";
$spojeni=mysql_connect("localhost","php@localhost","php");
mysql_select_db($db, $spojeni);
mysql_query("INSERT INTO $tb values ($_POST[name], $_POST[zvire], $_POST[castka])", $spojeni ); 
?>

<?
$spojeni=mysql_connect("localhost","php@localhost","php") ;
$co="SELECT * FROM adresar";
$navrat=mysql_db_query("mydata", $co, $spojeni);
echo("<table border=\"1\">");
for ($i=0;$i<mysql_num_fields($navrat); $i++){
echo("<td><strong>".mysql_field_name($navrat, $i)."</strong></td>");
}
while (list($name, $zvire, $castka) = mysql_fetch_row($navrat)){
echo("<tr><td>$name</td><td>$zvire</td><td>$castka</td></tr>" );
}
echo("</table>");
?>



Dobře.. tu závorku jsem odstranil.. blbě se koukám, ale i přesto to hází fatalní error..
juriad
Profil
Na 4. řádku přebývá jedna závorka.
$vytvorit=mysql_create_db($jmeno, $spojeni) );

Připíšu další poznámky ke kódu.


Bohužel se mi křišťálová koule porouchala, věštit, kde k fatal erroru došlo, bez ní nedokážu. Jaký error a kde?
Možná, některé z následujících problémů jsou důvodem.

Je blbost vytvářet databázi (!) a tabulku pomocí PHP skriptu při zpracování formuláře. Většinou (a opravdu dobře si rozmysli, když náhodnou ne) chceš vytvořit databázi a všechny tabulky mnohem dříve - při instalaci, nebo při prvním spuštěním. Pro správu databáze při vývoji můžeš použít phpmyadmin či adminer.

Nepojmenovávej sloupce v databázi s diakritikou.

Nevytvářej pro jednu query nové spojení. Většinou stačí vytvořit jediné na začátku celého skriptu.

Řádku 32 - 34 nahraď normálním výpisem
echo "<tr><th>Jméno</th><th>Zvíře</th><th>Částka</th></tr>";

Nespoléhej na pořadí sloupců vrácených SELECTEM. Použij místo mysql_fetch_row funkci mysql_fetch_assoc.
noskill
Profil
I tak moc díky zkusím co se dá, mrknu na to phpmyadmin :) a třeba najdu nějaké návody. (vím že to existuje ale neděl jsem v tom pomalu nic)

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: