Autor | Zpráva | ||
---|---|---|---|
vit Profil * |
#1 · Zasláno: 28. 5. 2010, 23:03:47
Ahoj, zde je formulář:
<html> <head> <title>Novinky - pošli</title> </head> <body> <form action="novinky_uloz.php" method="post"> <input type="text" name="nick" maxlength="50"/> nick <br/> <input type="text" name="datum" maxlength="50"/> datum <br/> <input type="text" name="nadpis" maxlength="50"/> nadpis <br/> <textarea name="clanek" rows="15" cols="30">Článek</textarea><br/> <input type="submit" name="sent" value="Pošli"/> </form> </body> </html> script, který zapisuje do db: <?php require "pripojse.php"; if(IsSet($_POST['sent'])) { $id = $_POST['id']; $nick = $_POST['nick']; $datum = $_POST['datum']; $nadpis = $_POST['nadpis']; $clanek = $_POST['clanek']; // Podmínka, jestli byly vyplněny všechny údaje if($datum=="" || $clanek=="" || $nick="" || $nadpis="") { echo "Nebyly vyplněny všechny údaje!"; } // Všechny údaje byly v pořádku vyplněny else { $query = @MySQL_Query("INSERT INTO novinky VALUES ('$id', '$nick', '$datum', '$nadpis', '$clanek')") or die(mysql_error()); echo "<script> window.location.replace(\"http://czechmods.ic.cz/\"); </script>"; } } ?> a vypisovaci script: <?php require "pripojse.php"; $Vyber=mysql_query("SELECT `id`, `nick`, `datum`, `nadpis`, `clanek` FROM `novinky` ORDER BY id DESC LIMIT 300000") or die(mysql_error()); while ($Vypis = mysql_fetch_array($Vyber)) { echo " <h3><b><a href=\"kontakt.php\">".$Vypis['nick']."</a> | ".$Vypis['datum']." | </b>".$Vypis['nadpis']."</h3> <p>".$Vypis['clanek']."</p><center><img src=\"pic/cara.jpg\"></center> "; } ?> no a můj problém tkví v tom, že se mi do DB neuloží nick a nadpis. Prosím nevíte někdo co s tím? |
||
mattyZEM Profil |
#2 · Zasláno: 29. 5. 2010, 01:06:45 · Upravil/a: mattyZEM
vit:
„// Podmínka, jestli byly vyplněny všechny údaje“ Tu ti jednoduše obejdu pomocí mezery. „$id = $_POST['id'];“ Nevidím nikde input s názvem id. $query = @MySQL_Query("INSERT INTO novinky VALUES ('$id', '$nick', '$datum', '$nadpis', '$clanek')") or die(mysql_error()); $Vyber=mysql_query("SELECT `id`, `nick`, `datum`, `nadpis`, `clanek` FROM `novinky` ORDER ......"); #2 - Pokud neexistují i jiné sloupce, použij *, zbytečně je vypisuješ, pro MySQL bude jednodušší příkaz. Mimochodem, script nemusí proběhnout správně, použij stripslashes()/mysql_real_escape_string() na všechny POST[]-y. |
||
SpotRudloff Profil |
#3 · Zasláno: 29. 5. 2010, 08:37:42 · Upravil/a: SpotRudloff
vit:
„if($datum=="" || $clanek=="" || $nick="" || $nadpis="")“ Toto určitě změň na if(!empty($datum) AND !empty($clanek) AND !empty($nick) AND !empty($nadpis)) „$query = @MySQL_Query("INSERT INTO novinky VALUES ('$id', '$nick', '$datum', '$nadpis', '$clanek')") or die(mysql_error());“ 1) Proč utišuješ chybu? 2) Nepoporučuji používat INSERT INTO novinky VALUES..., ale INSERT INTO novinky(sloupce, v, tabulce) VALUES... - je to rychlejší a navíc když tam máš ID, tak ho tam psát nemusíš a vyplní ho to samo (když máš auto_increment). Ke všemu používáš prakticky to samé u SELECTu, nevybíráš vše, ale pouze vybrané. 3) Ty máš v tabulce typ sloupečku ID jako text? Nedoporučuji... > echo "<script> > window.location.replace(\"ht>tp://czechmods.ic.cz/\"); > </script>"; Proč nepoužiješ header("Location: http://czechmods.cz/"); ? mattyZEM: „#2 - Pokud neexistují i jiné sloupce, použij *, zbytečně je vypisuješ, pro MySQL bude jednodušší příkaz.“ Teď lžeš, jelikož jednodušší příkaz (a teké rychlejší) je pro MySQL napsat tabulky které chceš vybrat (klidně i když jsou všechny). A pokud máš mnohem více dat, tak je to potom znatelné. ;) |
||
vit Profil * |
#4 · Zasláno: 29. 5. 2010, 10:03:22
stejne mi to tam nezapise ten nick a nadpis
|
||
Neas Profil |
#5 · Zasláno: 29. 5. 2010, 11:32:33
Pošli nějaké informace o dané tabulce v mysql, ať vidíme datové typy a pod. Chyba může být klidně i tam.
|
||
vit Profil * |
#6 · Zasláno: 29. 5. 2010, 12:07:37
Tady je screen:
http://img338.imageshack.us/img338/8029/beznzvuub.jpg |
||
Alphard Profil |
#7 · Zasláno: 29. 5. 2010, 12:08:45
vit:
Kontrolujte jednotlivé kroky scriptu. Na začátek si vypište obsah pole post, tj. print_r($_POST); , jestli je tam vše ok, běžte dál, jestli ne, zpátky.
A stále jste neodpověděl, proč ten @. |
||
Alphard Profil |
#8 · Zasláno: 29. 5. 2010, 12:09:43
Ještě reaguji na [#6], ukládat datum jako text není dobrý nápad.
|
||
SpotRudloff Profil |
#9 · Zasláno: 29. 5. 2010, 12:15:45
vit:
Jak můžeš dát ID auto_increment a potom mu přiřazovat hodnotu při ukládání do DB? Taky hloupost. |
||
Neas Profil |
#10 · Zasláno: 29. 5. 2010, 12:22:29 · Upravil/a: Neas
když je ID auto_increment, zapisuje se a navyšuje o jedno celé číslo automaticky, tj. netřeba jej zapisovat scriptem.
A na datum si zvol raději nějaký datový typ určený pro datumy. |
||
vit Profil * |
#11 · Zasláno: 29. 5. 2010, 13:34:19
tak ja uz si opravdu nevim rady skuste prosim nekdo upravit ten script:
<?php require "pripojse.php"; if(IsSet($_POST['sent'])) { $nick = $_POST['nick']; $datum = $_POST['datum']; $nadpis = $_POST['nadpis']; $clanek = $_POST['clanek']; // Podmínka, jestli byly vyplněny všechny údaje if($datum=="" || $clanek=="" || $nick="" || $nadpis="") { echo "Nebyly vyplněny všechny údaje!"; } // Všechny údaje byly v pořádku vyplněny else { $query = MySQL_Query("INSERT INTO novinky (nick, datum, nadpis, clanek) VALUES ('$nick', '$datum', '$nadpis', '$clanek')") or die(mysql_error()); echo "<script> window.location.replace(\"http://czechmods.ic.cz/\"); </script>"; } } ?> |
||
SpotRudloff Profil |
#12 · Zasláno: 29. 5. 2010, 14:16:27 · Upravil/a: SpotRudloff
Ty moc nedbáš na naše rady. ;) Nejdříve použij tento kód k odstranění zbytečností a k větší bezpečnosti a potom zkoušej opravit.
<?php require "pripojse.php"; if(IsSet($_POST['sent'])) { $nick = $_POST['nick']; $datum = $_POST['datum']; $nadpis = $_POST['nadpis']; $clanek = $_POST['clanek']; // Podmínka, jestli byly vyplněny všechny údaje if(empty($datum) AND empty($clanek) AND empty($nick) AND empty($nadpis)) { echo "Nebyly vyplněny všechny údaje!"; } // Všechny údaje byly v pořádku vyplněny else { $query = MySQL_Query("INSERT INTO novinky (nick, datum, nadpis, clanek) VALUES ('".$nick."', '".$datum."', '".$nadpis."', '".$clanek."')") or die(mysql_error()); header("Location: http://www.czechmods.ic.cz"); } } ?> |
||
panther Profil |
#13 · Zasláno: 29. 5. 2010, 14:21:30
SpotRudloff:
„Ty moc nedbáš na naše rady.“ ono dbát tvých rad je trochu nebezpečné :-) Tvůj kód, pokud budou vyplněny všechny pole, vyhodí chybu. Pokud nějaké pole zůstane nevyplněné, provede se zápis do DB. |
||
SpotRudloff Profil |
#14 · Zasláno: 29. 5. 2010, 14:38:56
panther:
Trochu jsem to prohodil. :) My bad, už je to správně. |
||
mattyZEM Profil |
#15 · Zasláno: 29. 5. 2010, 17:07:08
SpotRudloff:
„(klidně i když jsou všechny)“ Really? Jak můžeš urychlit příkaz MySQL, když podle * může rovnou vybrat vše, a pokud vypisuješ (vybíráš i tak vše) sloupce, dle mé logické úvahy by to mělo příkaz zpomalit, ne? |
||
SpotRudloff Profil |
#16 · Zasláno: 30. 5. 2010, 07:40:48
mattyZEM:
Článek na Linuxsoftu a nejen ten to dokazují. Jsou to sice zlomky sekundy, ale při velkém objemu dat je to rozdíl. Dovolím si citovat tuto část: Správný je ten druhý přístup. Jelikož SELECT * vrací všechny sloupce a tabulka pracovníků se může časem rozrůst o další sloupce, vracel by první příkaz zbytečně mnoho záznamů. V příkazu SELECT tedy VYJMENOVÁVEJTE SLOUPCE. Toto sice dokazuje jen část, ale klidně najdu další článek. Na webtrhu o tom bylo také mnoho diskuzí. |
||
Časová prodleva: 14 let
|
0