Autor Zpráva
lamič
Profil
Zdravím, rozhodl jsem se nedávno si vytvořit jednoduchou administraci. Zatím vše jde jak má, ale našel jsem problém v příkazu update.. Věřte nebo ne kod v tomto znení mi v pohodě vzal wamp(local server) a na něm mi to jede bez potíží... Ale na serveru php5.cz mi to hází neplechu.. Ani zde se nestává, že by daný update nefungoval. (paradoxní opět věřte nebo ne ten kod mi jel i tam pár hodin, poté jsem chtěl jít spát a chtěl si vše na těch stránkách ještě ověřit, ale najednou mi to hází tuto 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 'LIMIT 1' at line 1 .) přitom jsem s daným souborem nic nedělal, prostě mi to hlava nebere. jak může něco jít a posléze ne? Funkční to ale je, když kliknu na hlavní výpis novinek změna se všude projeví. Jen mi to vždycky hodí chybu, která vlastně neexistuje, když se v databázi aktualizuje vše co má.. Asi to bude verzí MySQL na php5.cz. Ale opravdu už nevím jak se té blbiny zbavit.. :-(

Zde je kod:
<?php
include("header.php");
 
 mysql_query("UPDATE zpravy 
      SET upraveno=upraveno+1
      WHERE id_zpravy=$_GET[id]");
 
      
 if (isset($_POST['submit']))
 {
 $zprava="";
 
 
   if(strlen($_POST['titulek'])>0){
$titulek=htmlspecialchars($_POST['titulek']);
}else{
$zprava.="Nevyplnili jste titulek<br />";
}

if(strlen($_POST['uvod'])>0){
$uvod=htmlspecialchars($_POST['uvod']);
}else{
$zprava.="Nevyplnili jste úvod <br />";
}

if(strlen($_POST['text'])>0){
$text=htmlspecialchars($_POST['text']);
}else{
$zprava.="Nevyplnili jste text <br />";
}
if(strlen($zprava)>0){
echo $zprava;
}
else
{   
  $sql="UPDATE zpravy SET titulek='$titulek',uvod='$uvod',text='$text' WHERE id_zpravy=$_POST[id] LIMIT 1";     

    if (!mysql_query("$sql"))
    {
    echo mysql_error();
    }
    else
    {
      header("location:index.php");
    }
 }
 }
$sql2="SELECT * FROM zpravy WHERE id_zpravy=$_GET[id] LIMIT 1" ;
   if ($vysledek2 = mysql_query("$sql2"))
{                        
$titulek=mysql_result($vysledek2,0,'titulek'); 
$uvod=mysql_result($vysledek2,0,'uvod');  
$text=mysql_result($vysledek2,0,'text');  
                    
}
else
{
echo mysql_error();
}
?>

<H2>Editace aktuality</H2>
 
<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
Titulek:<br />
<input type="text" name="titulek" value="<?php echo $titulek; ?>"><br />
Úvod:<br />
<textarea name="uvod" cols="50" rows="15"><?php echo $uvod; ?></textarea>
Text:<br />  
<textarea name="text" cols="50" rows="15" ><?php echo $text; ?></textarea>
<br />
<center><input type="submit" name="submit" value="Aktualizuj článek" /> </center>
<input type="hidden" name="id" value="<?php echo $_GET['id'];  ?>">
</form>

Chyba je v dotazu podle MySQL v $sql="UPDATE zpravy SET titulek='$titulek',uvod='$uvod',text='$text' WHERE id_zpravy=$_POST[id] LIMIT 1"; P.S. asi v tom dotazu když je tam idčko nemusí být LIMIT, ale tak co už no... Děkuji za případnou odpověd
Taps
Profil
lamič:
zkus to takto
 <?
 $sql="UPDATE zpravy SET titulek='$titulek',uvod='$uvod',text='$text' WHERE id_zpravy='".intval($_POST['id'])."'";
?>
Ano LIMIT je tam zbytečný
lamič
Profil
Taps:
Bohužel stále ta samá chyba: 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 'LIMIT 1' at line 1 :-(

ale podle toho bude teda chyba v tom druhém dotazu když to píše furt limit
Taps
Profil
lamič:
zkus ještě upravit i ten druhý select
<?
$sql2="SELECT * FROM zpravy WHERE id_zpravy=".intval($_GET['id']);

?>
lamič
Profil
Taps:
Výborně, děkuju :-) . Mohl bys mi prosím říct čím to bylo? Bylo to tou verzí MySQL?
TomasJ
Profil
lamič:
Jakého typu je sloupec id_zpravy? Pokud VARCHAR, musí být "SELECT * FROM zpravy WHERE id_zpravy='{$_GET['id']}'";
Pokud je typu INT, tak bez apostrofů WHERE id_zpravy={$_GET['id']}

To samé pak dole.
Samozřejmě nejdřív ošetřit proti SQL inject (intval zde postačí).
lamič
Profil
TomasJ:
sloupec id_zpravy je v int

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: