UPDATE table nefunguje. – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

UPDATE table nefunguje. – MySQL – Fórum – Programujte.comUPDATE table nefunguje. – MySQL – Fórum – Programujte.com

 

Lighter0
Návštěvník
7. 2. 2008   #1
-
0
-

Čaues,
mám problém s UPDATEM databáse, nějak mi tenhle script prostě nechce fungovat. ID se bere z odkazu /Admin/edituj_clanek.php?ID=X kde X je libovolné číslo podle clanku, který si vyberete. Bohužel pro provedení tohoto příkazu se UPDATE neprovede, předpokládám že bude někde chyba v uvozovkách ale vubec nevím jak mají správne být, děkuji že to někdo zkontroluje a opraví.

mysql_select_db("lighter", $Connect);

$ID = $_GET["ID"];
mysql_query("SET NAMES utf8");
$Nazev = $_POST["Nazev"];
$Datum = $_POST["Datum"];
$Obsah = $_POST["Obsah"];
mysql_query("UPDATE clanky SET Nazev = '$Nazev', Datum = '$Datum', Obsah = '$Obsah' WHERE IDClanky = $ID");
mysql_close($Connect);

Nahlásit jako SPAM
IP: 84.244.95.–
Zelenáč0
Posthunter
7. 2. 2008   #2
-
0
-

myyyysql_error()!!!

Nahlásit jako SPAM
IP: 89.176.254.–
Paja2
~ Moderátor
+2
Věrný člen
7. 2. 2008   #3
-
0
-

To Lighter :
zkus dát 'ID' ,ale to asi nebude tím ..raději zkus použít mysql_error() tak jak psal Zelenáč

Nahlásit jako SPAM
IP: 88.146.215.–
Lighter0
Návštěvník
8. 2. 2008   #4
-
0
-

Tak mi to hodí tehle error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Nahlásit jako SPAM
IP: 84.244.95.–
survik1
~ Moderátor
0
Posthunter
8. 2. 2008   #5
-
0
-

To Lighter :



mysql_query("UPDATE clanky SET Nazev = '$Nazev', Datum = '$Datum', Obsah = '$Obsah' WHERE IDClanky = $ID") or die(mysql_error());


Teď bych prosil chybu ;)

Nahlásit jako SPAM
IP: 89.102.163.–
Život je jen hra, která se nedá vyhrát.
Lighter0
Návštěvník
8. 2. 2008   #6
-
0
-

survik1: dyt to je uplne to samí co jsem psal nahoře ne ? :D to die jsem tam přidal abych zjistil tu chybu kterou mužeš spatřit nad tvým příspevkem nebo ti ji překopčím.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Nahlásit jako SPAM
IP: 84.244.95.–
Lighter0
Návštěvník
8. 2. 2008   #7
-
0
-

Tak fakt nevim jestli jsem blbec nebo co ale pořád mi to nechce fungovat. Mno tedkon jsem dodelal příkaz na odstranění záznamu a ten funguje OK tak fakt nevim v čem je chyba.

Záznam na odstranění řádku mi funguje:

mysql_select_db("lighter", $Connect);

$ID = $_GET["ID"];
mysql_query("SET NAMES utf8");
mysql_query("DELETE FROM clanky WHERE IDClanky = $ID") or die(mysql_error());
mysql_close($Connect);


A záznam na Update mi nefunguje:
mysql_select_db("lighter", $Connect);

$ID = $_GET["ID"];
mysql_query("SET NAMES utf8");
$Nazev = $_POST["Nazev"];
$Datum = $_POST["Datum"];
$Obsah = $_POST["Obsah"];
mysql_query("UPDATE clanky SET Nazev = '$Nazev', Datum = '$Datum', Obsah = '$Obsah' WHERE IDClanky = $ID") or die(mysql_error());
mysql_close($Connect);


A záznam na Update mi píše chybu:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Já se to sice teprve učím, ale podle knížky a podle nějakých online manuálu mám příkaz UPDATE dobře. Nevíte co s tím ?

Nahlásit jako SPAM
IP: 84.244.95.–
OndreJ
~ Moderátor
0
Stálý člen
8. 2. 2008   #8
-
0
-

Vieš ono je ťažko niečo poradiť, keď si nenapísal datovú štruktúru tej tabuľky. Povedal by som, že problém bude niekde v stupných dát, ktoré "pcháš" do DB. Keďže vstupy vôbec neošetruješ, tak zrejme v reťazci máš úvodzovku, alebo dávaš iný datový typ tam, kam nepatrí (ale to by tuším hodilo iný error).

Nahlásit jako SPAM
IP: 213.151.246.–
OndreJ
~ Moderátor
0
Stálý člen
8. 2. 2008   #9
-
0
-

Dúfam, že si pochopil, čo tým básnik chcel povedať? Nie? Tak príklad:
formulárom pošleš text napr.: (Guns N' Roses) cez POST a ten si uložíš do premennej $Nazev.
do SQL dotazu to vložíš: "UPDATE clanky SET Nazev = '$Nazev', Datum ...
PHP tento dotaz zmení na "UPDATE clanky SET Nazev = 'Guns N' Roses', Datum ... a pošle ho do DB
všímaš tohoto? 'Guns N' Roses' a to je ten syntax error!

skús naštudovať funkcie:
http://sk.php.net/manual/en/function.mysql-real-escape-string.php
http://sk.php.net/manual/en/function.get-magic-quotes-gpc.php
alebo prípadne aj:
http://sk.php.net/manual/en/function.addslashes.php

Nahlásit jako SPAM
IP: 213.151.246.–
Lighter0
Návštěvník
8. 2. 2008   #10
-
0
-

Jo tohle sice pořešený nemám, ale jelikož v žádném z mých textů nepoužívám " ani ' tak to tímto způsobené být nemuže. PHP a MySQL se teprve učím.

Nahlásit jako SPAM
IP: 84.244.95.–
jinaq0
Newbie
9. 2. 2008   #11
-
0
-

No ja bych to tak nepodceňoval co psal Ondrej. Zkus si vypsat obsah pole $_POST pomoci print_r. A nebo ještě lépe, zkus si nechat vypsat samotný dotaz.



echo "UPDATE clanky SET Nazev = '$Nazev', Datum = '$Datum', Obsah = '$Obsah' WHERE IDClanky = $ID";


Možná je někde jinde chyba, každopádně se bude lépe hledat s již reálným dotazem, který posíláš na mysql.

Nahlásit jako SPAM
IP: 89.102.101.–
Lighter0
Návštěvník
9. 2. 2008   #12
-
0
-

Název a Datum jsou sloupce typu varchar a Obsah je pole typu mediumtext.

Celý skript pro přidání článku vypadá takto a přidání proběhne uspešně bez chyby:

<?php session_start(); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<link rel="stylesheet" type="text/css" href="Admin.css" />
<meta name="generator" content="PSPad editor, www.pspad.com" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Lighter's personal website</title>
</head>
<body>
<div class="stred">
<?php
if ($_SESSION["User"] != "xxxx" && $_SESSION["Password"] != "xxxx") {
header("location: error.php");}
else {$_SESSION["Pristup"] = 1;}
?>
<?php
if (empty ($_POST)) { ?>
<h1>Přidej článek</h1>
<form action="pridej_clanek.php" method="post" />
<p>Název článku: <input type="text" name="Nazev" /> </p>
<p>Datum vložení: <input type="text" name="Datum" /> </p>
<p>Zadej obsah: </p>
<textarea name="Obsah" rows="10" cols="100"></textarea>
<p> <input type="submit" name="Odeslat" value="Odeslat" /></p>

<div class="link"> <a href="admin.php">>>Zpátky na úvodní stránku</a> </div>

<?php
}
else {
include ("../config.php");
$Pripojeni = mysql_connect (SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die("Nepovedlo se připojit k databází: " . mysql_error());
mysql_select_db(SQL_DBNAME, $Pripojeni) or die("Nepovedlo se vybrat databázi: " . mysql_error());
mysql_query("SET NAMES utf8");
mysql_query("INSERT INTO clanky (Nazev, Datum, Obsah) VALUES ('$_POST[Nazev]', '$_POST[Datum]', '$_POST[Obsah]')") or die("Nelze přidat údaje do databáze: " . mysql_error());
mysql_close($Pripojeni);
$Vypis = "Přidání záznamů do tabulky proběhlo úspěšně."; ?>
<div class="link">
<?php echo $Vypis; ?>
<a href="admin.php">>>Zpátky na úvodní stránku</a>
</div>

<?php
}
?>
</div>
</body>
</html>


Skripr pto editaci je dá se říct to samé jen trochu pozměněný, to bohužel ale nefunguje a vrací to chybu You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Kod vypadá takt:
<?php session_start(); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<link rel="stylesheet" type="text/css" href="Admin.css" />
<meta name="generator" content="PSPad editor, www.pspad.com" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Lighter's personal website</title>
</head>
<body>
<div class="stred">
<?php
if ($_SESSION["User"] != "xxxx" && $_SESSION["Password"] != "xxxxx") {
header("location: error.php");}
else {$_SESSION["Pristup"] = 1;}
?>

<?php
if (empty ($_POST)) { ?>
<h1>Edituj článek</h1>
<form action="edituj_clanek.php" method="post" />
<p>Název článku: <input type="text" name="Nazev" /> </p>
<p>Datum vložení: <input type="text" name="Datum" /> </p>
<p>Zadej obsah: </p>
<textarea name="Obsah" rows="10" cols="100"></textarea>
<p> <input type="submit" name="Odeslat" value="Odeslat" /></p>

<div class="link"> <a href="admin.php">>>Zpátky na úvodní stránku</a> </div>

<?php
}
else {
include ("../config.php");
$Pripojeni = mysql_connect (SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die("Nepovedlo se připojit k databází: " . mysql_error());
mysql_select_db(SQL_DBNAME, $Pripojeni) or die("Nepovedlo se vybrat databázi: " . mysql_error());
mysql_query("SET NAMES utf8");
$ID = $_GET["ID"];
$Nazev = $_POST["Nazev"];
$Datum = $_POST["Datum"];
$Obsah = $_POST["Obsah"];
mysql_query("UPDATE clanky SET Nazev = '$Nazev', Datum = '$Datum', Obsah = '$Obsah' WHERE IDClanky = $ID") or die("Nelze upravit údaje v databázi: " . mysql_error());
mysql_close($Pripojeni);
$Vypis = "Příspěvek byl úspěšně upraven."; ?>
<div class="link">
<?php echo $Vypis; ?>
<a href="admin.php">>>Zpátky na úvodní stránku</a>
</div>

<?php
}
?>
</div>
</body>
</html>


Když si vypíši promenné Název, Datum i Obsah tak to vypíše ok, takže chyba musí být v tom příkazu někde. Snad jsem podal maximálně vyčerpávající info k hledání chyby.

Nahlásit jako SPAM
IP: 84.244.95.–
Zelenáč0
Posthunter
9. 2. 2008   #13
-
0
-

Zkus do toho dotazu napevnoí dosadit nejake hodnoty, at vime, jestli je chyba tam...

Nahlásit jako SPAM
IP: 89.176.254.–
Lighter0
Návštěvník
9. 2. 2008   #14
-
0
-

Mno tak jsem příkaz zmenil na mysql_query("UPDATE clanky SET Nazev = 'Změnená věcička', Datum = '8.5.2007', Obsah = 'Mno nějaký obsah' WHERE IDClanky = $ID") or die("Nelze upravit údaje v databázi: " . mysql_error());

A hází to tu samou chybu.

Nahlásit jako SPAM
IP: 84.244.95.–
Lighter0
Návštěvník
9. 2. 2008   #15
-
0
-

Nemá tam být nějaký UPDATE FROM nebo zatím SET jeslti to nemá být v závorce?

Nahlásit jako SPAM
IP: 84.244.95.–
Zelenáč0
Posthunter
9. 2. 2008   #16
-
0
-

Tak me jeste napada jeste jedna silena moznost -> zkus odstranit ty mezery pred a za =..

Nahlásit jako SPAM
IP: 89.176.254.–
Lighter0
Návštěvník
9. 2. 2008   #17
-
0
-

J tak jsem to zkusil a stejnak to nejde, to něco píše o nějaký správný syntaxi, mám mysql verzi 5.0.45 neni možný že je tam něco jinak no fakt tohle nechápu už vidím jak bude chyba uplně někde jinde i když to asi težko když to píše chybu na line 1 což je proste tento řádek. Nehlede nato že třeba vkládání a mazání funguje bezproblému.

Nahlásit jako SPAM
IP: 84.244.95.–
Lighter0
Návštěvník
9. 2. 2008   #18
-
0
-

Ještě jsem zkusil ten příkaz spustit přes PHPMyAdmina a provedlo se to vpořádku.

Nahlásit jako SPAM
IP: 84.244.95.–
Lighter0
Návštěvník
9. 2. 2008   #19
-
0
-

Tak jsem psal na podporu i na zahraničnim foru a jeden maník mi odepsal tuhle syntaxi, která mi nehodí žádný error ale data se v tabulce stejnak nepřepíšou, je to divný protože zatím mám mysql_error

mysql_query("UPDATE clanky SET Nazev = '".$Nazev."', Datum = '".$Datum."', Obsah = '".$Obsah."' WHERE IDClanky = '".$ID."'") or die("Nelze upravit údaje v databázi: " . mysql_error());

Nahlásit jako SPAM
IP: 84.244.95.–
Jirka
~ Anonymní uživatel
305 příspěvků
10. 2. 2008   #20
-
0
-

Proč ve skriptu pro editaci je:

$ID = $_GET["ID"];

$Nazev = $_POST["Nazev"];
$Datum = $_POST["Datum"];
$Obsah = $_POST["Obsah"];


jednou $_GET a ostatni $_POST???

Má to nějaký hlubší smysl?

Jinak to, bohužel, taky vidím v pořádku.

Zdravim

Nahlásit jako SPAM
IP: 88.102.169.–
OndreJ
~ Moderátor
0
Stálý člen
10. 2. 2008   #21
-
0
-

heh, a nakoniec taka blbost! nepredava si ID cez GET! :smile1:

edit: a to znaci jednu vec, ze si ani nevyskusal to, co sme mu hore radili, aby si zobrazil ten SQL dotaz! :smile13:

Nahlásit jako SPAM
IP: 213.151.246.–
Lighter0
Návštěvník
10. 2. 2008   #22
-
0
-

To Jirka: Mno diky metode Get dostávám z adresy IDčko a díky tomu se určí jaký příspěvek se bude upravovat. A tamty 3 posty jsou data poslaná z formuláře, to co má zaznamenat neboli přemazat to, co už v DB je.

Ondrej: Pořád nevidím v čem je problém ?

Nahlásit jako SPAM
IP: 84.244.95.–
OndreJ
~ Moderátor
0
Stálý člen
10. 2. 2008   #23
-
0
-

Na začiatku scriptu si musíš prevziať ID:

$id = 0;

if (isset($_GET['id'])) $id = abs(intval($_GET['id']));

a formulár musíš odosielať s týmto ID-ckom:
<form action="./edituj_clanek.php?id=<?php echo $id; ?>" method="post" />

no a nakoniec (tak ako máš) vložiť do SQL dotazu:
...WHERE id = ".$id) or die(...

Nahlásit jako SPAM
IP: 213.151.246.–
Lighter0
Návštěvník
10. 2. 2008   #24
-
0
-

Ondrej já to mám udělaný tim stylem že si uložím tento odkaz do promenný, třeba
$Url = "http://localhost/Admin/edituj_clanek.php?ID="
A pak při delaný odkazu na editaci tam k tomu přidám akorát ID toho clanku zakže mi vznikne odkaz třeba
http://localhost/Admin/edituj_clanek.php?ID=10 mno a tady pak beru id pomocí tohodle příkazu

$ID = $_GET["ID"];

Sice to neni ID vzaný z formuláře ale z umele vytvořený odkazu, funguje to ale dobře v obou případech takže tady chyba není.

Nahlásit jako SPAM
IP: 84.244.95.–
OndreJ
~ Moderátor
0
Stálý člen
10. 2. 2008   #25
-
0
-

Lenže ty vyplníš formulár a zmačkneš tlačítko Odoslať a to id tým pádom strácaš!

edit:
A tie dva prípady ti fungujú preto, že:
INSERT nepotrebuje žiadne ID
a
DELETE dotaz bere to ID z GET odkazu a nie z formulára!

chápeš už?

Nahlásit jako SPAM
IP: 213.151.246.–
Lighter0
Návštěvník
10. 2. 2008   #26
-
0
-

Ondrej: Seš fakt dobrej, tím to je. Byla to moje chyba že jsem si ID nevypsal ale me to vubec nedošlo že se to nenačítá když DELETE je temeř stejnej kod a IDčko se tam načitalo ok.

Jinak správnej kod na to mysql query vypadá takto:

mysql_query("UPDATE clanky SET Nazev = '".$Nazev."', Datum = '".$Datum."', Obsah = '".$Obsah."' WHERE IDClanky = " . $ID) or die("Nelze upravit údaje v databázi: " . mysql_error());


Mužu mít dotaz proč jsou promenne Nazev, Datum a Obsah z obou stran ohraniceny teckou a pak ještě dvojitýma a jednoduchýma uvozovkama ? Trošku nechápu tu podstatu proč se to delá tak složite a neveme to SET Nazev = '$Nazev', Datum = '$Datum', .... atd ?

Nahlásit jako SPAM
IP: 84.244.95.–
Zelenáč0
Posthunter
10. 2. 2008   #27
-
0
-

To Lighter : Protoze by se to tak delat melo a nechapu, proc to interpret bere i bez toho.
Tecka spojuje retezce. Retezce se ohranicuji uvozovkami.

Takze mas jeden retezec:

UPDATE clanky SET Nazev = '

ohranicis ho uvozovkami:
"UPDATE clanky SET Nazev = '"

a pomoci operatoru tecka spojis s retezcem druhym:
"UPDATE clanky SET Nazev = '" . $Nazev

Nahlásit jako SPAM
IP: 89.176.254.–
Lighter0
Návštěvník
10. 2. 2008   #28
-
0
-

Jasný, díky za vysvětlení.

Nahlásit jako SPAM
IP: 84.244.95.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Table — založil Onsi

TABLE JS — založil BoBy

Table or Div — založil WebDevelop

JavaFX Table — založil William

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý