Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP script

Mam jeden dotaz. jsem zacatecnik a ucim se programovat. Naprogramoval jsem si takovy jednoduchy script na novinky. kdyz neco upravim na webu vypnim formular co jsem na webu zmenil a odeslu do databaze a pomoci druheho scriptu to zobrazim na webu. proste takovy jednoduchy novinkovac jenze chtel bych to upravit tak aby pri pripsane novince se vedle textu zobrazilo slovicko smazat a kdyz na to kliknu tak se cely text smaze s databaze. kdyz treba neco napisu blbe. Poslu tu script jak to mam udelane prosim nekoho kdo v tom umi tak jestli by mi to neopravil dekuji.

Script pro odeslani textu do databaze:

<?
mysql_connect("localhost","jmeno","heslo");
mysql_select_db("databaze");

$text = $_POST["zprava"];

if($text != "")
{
 $cas = $cas = StrFTime("%Y-%m-%d %T", Time());
 mysql_query("INSERT INTO Novinky VALUES ('$text','$cas')");
 header("Location: ---");
}
?>

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
  <head>
  <title>MYSQL</title>
  <meta http-equiv="Content-Type" CONTENT="text/html; charset=iso-8859-2">
  </head>
<body>


<form action="zapis.php" name="post" method="post">
<textarea cols="60" rows="5" name="zprava" value=""></textarea>
<br><br>
<input type="submit"  value="odeslat">

</form>
</body>
</html>

Script pro zobrazeni novinek na webu:

<?
mysql_connect("localhost","--","--");
mysql_select_db("--");

$vyber = mysql_query("SELECT * FROM `Novinky` ORDER BY `Novinky`.`cas` DESC");
?>

<?
while ($zanam = mysql_fetch_array($vyber, MYSQL_NUM))
{
 echo "<div style='border: 2px solid'><b>$zanam[1] - $zanam[0]</b></div><br>";
}
?>

doplněn tag CODE (host)

Předmět Autor Datum
len pripomienka (neber to ako vrtanie) - ked pises kod, tak hore v liste mas tlacitko code - je to p…
Michal2 14.04.2009 13:22
Michal2
//Odkaz pro smazání novinky <a href="?smaz=<? echo $zanam['id']; ?>">Smazat</a> //Skript pro smazání…
marekdrtic 14.04.2009 13:55
marekdrtic
Mazat záznamy z databáze fyzicky, není zrovna nejlepší řešení...;-)
MaSo 14.04.2009 18:39
MaSo
moc ti dekujo za script ale nemohu to nejak rozchodit. kdyz ho vlozim k scriptu: <? mysql_connect("…
Vaseks 14.04.2009 16:41
Vaseks
Udělej export struktury dat z databáze nebo vymaž všechny novinky a přidej si tam sloupec id s auto-…
marekdrtic 14.04.2009 16:43
marekdrtic
no to jsem udelal a co dale??
Vaseks 14.04.2009 17:15
Vaseks
<? mysql_connect("localhost","--","--"); mysql_select_db("--"); $vyber = mysql_query("SELECT * FROM…
marekdrtic 14.04.2009 17:18
marekdrtic
presne tak to udelam a delal jsem to uz drive a proste to nejde hodi to bilou obrazovku a kdyz dam z…
Vaseks 14.04.2009 17:22
Vaseks
Napiš mi na ICQ (373475016) a podívám se ti na to, pak sem postnu konečné řešení.
marekdrtic 14.04.2009 17:38
marekdrtic
Vyřešeno, celé to bylo o tom, že Vaseks tam trochu popletl závorky a zápis apostrofů, takže tam bylo…
marekdrtic 14.04.2009 18:00
marekdrtic
Vyreseno, moc dekuji marekdrtic za pomoc. Je sikovnej.
Vaseks 14.04.2009 18:02
Vaseks
Hoci je to vyriešené, napíšem ešte pár poznámok, ktoré sú dúfam k veci: 1. Keď vyvíjaš skript, tak…
los 14.04.2009 22:49
los
O té funkci mysql_real_escape_string jsem nic nevěděl, vždycky jsem na to buď kašlal nebo obcházel s…
marekdrtic 15.04.2009 06:17
marekdrtic
v prípade čísla ho môže stačiť pretypovať. Mozem poprosit o podrobnejsie vysvetlenie? Dakujem. :-)
2laak 15.04.2009 07:06
2laak
Napr. po priradení $id = (int)$_GET["id"]; bude v $id určite číslo, takže sa dá bezpečne použiť v SQ…
los 15.04.2009 08:34
los
Vdaka, doteraz som si myslel, ze ciselne typy (smallint, int atd) su bez problemov a neriesil som na… poslední
2laak 15.04.2009 08:43
2laak
//Odkaz pro smazání novinky
<a href="?smaz=<? echo $zanam['id']; ?>">Smazat</a>

//Skript pro smazání

<?php
if(isset($_GET['smaz']))
{
$id = $_GET['smaz'];
(mysql_query('DELETE FROM `Novinky` WHERE `id` = '$id' LIMIT 1')) ? echo "OK" : echo "Error";
}
?>

Lze nahradit skript

(mysql_query('DELETE FROM `Novinky` WHERE `id` = '$id' LIMIT 1')) ? echo "OK" : echo "Error"; 

pouze tímto (nevypíše to ty hlášky OK a Error)

mysql_query('DELETE FROM `Novinky` WHERE `id` = '$id' LIMIT 1'); 

PS: <form action="zapis.php" name="post" method="post"> IMHO by bylo vhodnější nedávat tam to action="zapis.php" ale jen action="" nebo nic, protože když budeš svůj systém rozvíjet tak budeš třeba i měnit názvy souborů a hned ti to nepůjde

PS 2: Pokud bys nerozuměl tomuto řádku:

(mysql_query('DELETE FROM `Novinky` WHERE `id` = '$id' LIMIT 1')) ? echo "OK" : echo "Error";

tak je to to samé jako:

if(mysql_query('DELETE FROM `Novinky` WHERE `id` = '$id' LIMIT 1'))
{
echo "OK";
}
else
{
echo "Error";
}

moc ti dekujo za script ale nemohu to nejak rozchodit. kdyz ho vlozim k scriptu:

<?
mysql_connect("localhost","--","--");
mysql_select_db("--");

$vyber = mysql_query("SELECT * FROM `Novinky` ORDER BY `Novinky`.`cas` DESC");
?>

<?
while ($zanam = mysql_fetch_array($vyber, MYSQL_NUM))
{
 echo "<div style='border: 2px solid'><b>$zanam[1] - $zanam[0]</b></div><br>";
}
?>

tak se mi zobrazi jen bila stranka. muzete mi prosim poradit kde to mam zpravne vlozit??

<?
mysql_connect("localhost","--","--");
mysql_select_db("--");

$vyber = mysql_query("SELECT * FROM `Novinky` ORDER BY `Novinky`.`cas` DESC");

if(isset($_GET['smaz']))
{
$id = $_GET['smaz'];
(mysql_query('DELETE FROM `Novinky` WHERE `id` = '$id' LIMIT 1')) ? echo "OK" : echo "Error";
}
?>

<?
while ($zanam = mysql_fetch_array($vyber, MYSQL_NUM))
{
 echo "<div style='border: 2px solid'><b>$zanam[1] - $zanam[0]</b>&nbsp;<a href="?smaz=<? echo $zanam['id']; ?>">Smazat</a></div><br>";
}
?>

Hoci je to vyriešené, napíšem ešte pár poznámok, ktoré sú dúfam k veci:

1. Keď vyvíjaš skript, tak si nastav vypisovanie chýb (error_reporting) buď v konfigurácii alebo priamo v PHP súbore. Oveľa jednoduchšie potom nájdeš príčinu problému podľa chybovej hlášky.

2. V SQL dopytoch používaš neošetrené vstupy od používateľa, takže hrozí SQL injection. Pred použitím reťazca v SQL dopyte sa používa funkcia mysql_real_escape_string, v prípade čísla ho môže stačiť pretypovať.

Zpět do poradny Odpovědět na původní otázku Nahoru