Autor Zpráva
vit
Profil *
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
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 ......");
#1 - Pokud existují i jiné sloupce, bylo by vhodné definovat, do kterých se má co zapsat.
#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
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(\"http://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 *
stejne mi to tam nezapise ten nick a nadpis
Neas
Profil
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 *
Tady je screen:
http://img338.imageshack.us/img338/8029/beznzvuub.jpg
Alphard
Profil
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
Ještě reaguji na [#6], ukládat datum jako text není dobrý nápad.
SpotRudloff
Profil
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
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 *
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
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
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
panther:
Trochu jsem to prohodil. :) My bad, už je to správně.
mattyZEM
Profil
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
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í.

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: