Autor Zpráva
noby
Profil
Dobrý den.
Již pár dní řeším funkci update. Jenže tato funkce mi nechce fungovat. Nevíte kde by v následujícím kódu mohl být problém?
<?php
include("../../connecting.php");
$id = $_POST['id'];
$nazev = $_POST['nazev'];
$popis = $_POST['popis'];
$clanek = $_POST['clanek'];
$vlozen = $_POST['vlozen'];
$query = ("UPDATE clanky SET id = '$id', nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'");
mysql_query($query);
header("location: ../admin.php?page=edit&id=$id")
?>
panther
Profil
noby:
co píše mysql_error()? Připojení k DB proběhne (aneb je správně cesta k připojovacímu souboru)?
noby
Profil
panther:
mysql_query nevypsal vůbec nic, když jsem ho v kódu měl. Spojení s databázi je správné protože to vypíše článek který chci editovat
panther
Profil
noby:
mysql_query nevypsal vůbec nic
ne mysql_query, mysql_error. Kde jsi ho v kódu měl? Pole $_POST, jsou v něm data, která očekáváš, neprovádíš - nesnažíš se provádět - tenhle kód před odesláním fomruláře?

V uvedeném kousku (syntaktický) problém nevidím.
noby
Profil
panther:
Pardon chtěl jsem napsat mysql_error ale místo toho jsem napsal mysql_query. V kódu byl umístěn zde:
<?php
$query = ("UPDATE clanky SET id = '$id', nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'") or die(mysql_error());
mysql_query($query);

?>

Pro jistotu jsem do kodu mysql_error vložil i teď a opět nic nevypsal.
Alphard
Profil
[#5] noby
V tomto kódu jste vynechal mysql_query().
Za používání neošetřených vstupů do databázových dotazů by se mělo stříelet (kolega DoubleThink říká bez soudu).
noby
Profil
Alphard:
V tomto kódu jste vynechal mysql_query().
Jsem ho prostě jen nepřipsal v minulem postu ale jinak tam byl a je
jenikkozak
Profil
noby:
Vypisuješ si error MySQL dotazu před tím, než může vůbec vzniknout. (Dotaz se předává až na 3. řádku, výpis chyby máš na druhém.)
Dost dobře nerozumím ještě jedné věci:
UPDATE clanky SET id = '$id', nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'
noby
Profil
jenikkozak:
I když to upravím do této podoby:
<?php
$query = ("UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'");
mysql_query($query) or die(mysql_error());
?>

Tak nic nevypíše ani se nic neprovede.
Alphard
Profil
Existuje to id? Co říká mysql_affected_rows()?
noby
Profil
Alphard:
Jasně že to id existuje už samotná url napovídá že se jedna o editaci článku s id číslo 2
A tento článek o jehož editaci se pokouším je id číslo 2.
mysql_affected_rows jsem ještě nezkoumal takže ani nevím k čemu slouží.
Tori
Profil
noby:
A neměnil jste ve formuláři to ID článku?
noby
Profil
Tori:
Neměnil, id se určuje automaticky u odkazu viz můj předchozí příspěvek kde je uveden odkaz pro editaci v této podobě.
<a href="admin.php?page=edit&amp;id='.$id['id'].'"><img src="images/edit.png" title="Editovat článek '.$id['nazev'].'"></a>

Kde '.$id['id'].' vypíše url v této podobě:
admin/admin.php?page=edit&id=2
Marek88
Profil
Když si vypíšeš proměnnou $query, tak je tam opravdu to, co očekáváš?
$query = "UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'";
echo $query;
noby
Profil
Marek88:
Tam nemám jak vypisovat to pouze zpracuje změny v článku který změním ve formuláři
Alphard
Profil
noby:
Samozřejmě, že to můžete vypsat. Znáte aspoň základy PHP, nebo jen lepíte kód, který jste někde našel?
[#14] Marek88 dal jasnou ukázku kódu, možná za to můžete dát ještě exit.

Když jsem se vás ptal na mysql_affected_rows(), kterou neznáte, tak se máte podívat do manuálu, ne sem psát, že jste to ještě neviděl. Více vlastní snahy.
noby
Profil
Alphard:
PHP se učím postupně. Po cca jednom roce jsem se rozhodl že si něco zkusím a však vše mi fungovalo až do te doby než jsem začal měnit kody v souborech apod. I tato funkce UPDATE fungovala ale od te doby co jsem začal měnit obshay souboru a pozměnil pár indexu atd. tak nefunguje. Přitom chyba je sto procentně tady jelikož mi vše ostatní funguje. Například tohle je verze předchozího kódu, která fungovala:
<?php
// Připojení k databázi
include("../../connect.php");

// Zjištění id článku
$id = $_POST['idx'];
$nazev = $_POST['nazev'];
$popis = $_POST['popis'];
$clanek = $_POST['clanek'];

// Příkaz update
$query = ("UPDATE clanky SET nazev='$nazev', popis='$popis', clanek='$clanek' WHERE id = '$id' ");
mysql_query($query);

header("location: ../prihlasen.php?page=edit_article&;id='.$id.'");
?>


Přitom tento kod je téměř stejný pouze přidán další řádek do databáze navíc . Jinak ano uznávám v PHP jsem amatér ale ne zas až tako velký abych nedokázal dát dohromady 1+1.

No nic k tématu. Marek88 dal sice ukázku, ale tento script pouze zpracuje tzv. vypsal by to co jsem změnil po odeslání změn ve formuláři
DoubleThink
Profil *
Neznáme podobu ani data tabulky. Nevíme, jaká data přišly v POST datech. A tak dále.
Není ti pomoci.

Vypiš si query a vyzkoušej ji v PMA/Admineru. V PHP přímá chyba není, pokud vynechám (ne)zpracování uživatelských dat, za což bys měl dostat pár facek.
jenikkozak
Profil
noby:
No nic k tématu. Marek88 dal sice ukázku, ale tento script pouze zpracuje tzv. vypsal by to co jsem změnil po odeslání změn ve formuláři
Vypsal by? Měls to zkusit. Jde totiž třeba o to, jestli ti to vypisuje to id, které očekáváš.

header("location: ../prihlasen.php?page=edit_article&;id='.$id.'");

Máš tam trochu zmatek ve znaménkách; location by mělo být absolutní adresou.
noby
Profil
jenikkozak:
Tenhle script se nemusí řešit ten byl jen pro ukázku který jsem měl před tím. Jinak ano
$query = "UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = '$vlozen' WHERE id = '$id'";
echo $query;

Vypíše id které očekávám. A takhle vypadá struktura tabulky:
CREATE TABLE IF NOT EXISTS `clanky` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazev` varchar(255) NOT NULL,
  `popis` text NOT NULL,
  `clanek` text NOT NULL,
  `vlozen` int(11) NOT NULL,
  `hit` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


// Edit
Už funguje chyběl středník za header("location: ../admin.php?page=edit&amp;id=$id");
Takže chyba byla jen ve středníku
Marek88
Profil
Zkus upravit tvůj script z příspěvku [#1] takto:
<?php
include("../../connecting.php");
$id = $_POST['id'];
$nazev = $_POST['nazev'];
$popis = $_POST['popis'];
$clanek = $_POST['clanek'];
$vlozen = $_POST['vlozen'];
$query = ("UPDATE clanky SET nazev = '$nazev', popis = '$popis', clanek = '$clanek', vlozen = $vlozen WHERE id = $id"); // odstraň uvozovky u číslných hodnot
echo $query . "<br>"; // vypiš si ještě jednou pro jistotu dotaz, který se bude provádět
mysql_query($query) or die(mysql_error());
echo "<br>Změněno řádků: " . mysql_affected_rows();  // tohle by ti mělo ukázat počet ovlivněných řádků předchozím dotazem
// Přesměrování tam pro testovací účely nedávej
//header("location: ../admin.php?page=edit&id=$id");
?>

Napiš sem pak, co ti to vypíše.
Kajman_
Profil *
noby:

Ve funkční verzi používáte
$_POST['idx'];

v nefunkční
$_POST['id'];
jenikkozak
Profil
Kajman_:
Také jsem si toho všimnul, ale: „Vypíše id které očekávám. A takhle vypadá struktura tabulky

noby:
Už funguje chyběl středník za header("location: ../admin.php?page=edit&id=$id");
Takže chyba byla jen ve středníku
Z tohoto usuzuji, že téma je uzavřené a chybu jsi našel. Nebo se mýlím?
noby
Profil
jenikkozak:
Nepletete téma je uzavřeno a chyba nalezena

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:

0