Autor Zpráva
w2009
Profil
Ahoj všem,

už léta používám jednoduchý skriptík na přidávání/upravování/mazání dat z formulářů do SQL databáze. Teď jsem poprvé narazil na problém při implementaci na server, kde běží starší verze PHP (konkrétně 5.2.5)...

...vypadá to takto:

tohle je engine:
switch($_POST['action']){
    case "add":
            $datum  = date("d. n. Y, H:i");
            $dotaz="INSERT INTO {$cfg['table']}  (id, name, text, datum) 
                                    VALUES ('LAST_INSERT_ID()','{$_POST['name']}', '{$_POST['text']}', '$datum');";
            $vysledek = queryDBdata ($dotaz);

    break;
    
    case "edit";
        $dotaz="UPDATE {$cfg['table']} 
                    SET
                    name='{$_POST['name']}', text='{$_POST['text']}'
                    WHERE id='{$_GET['id']}'";
        queryDBdata ($dotaz);
        $_GET['co']="add";

    break;
}

switch($_GET['action']){
    case "del":
        queryDBdata ("DELETE FROM {$cfg['table']} WHERE id='{$_GET['id']}'");
    break;
}

if($_GET['co']=="add" OR !$_GET['co']){
    $_GET['co']="add";
    unset($vysledek);
}else{
    echo "Editace";
    $dotaz="SELECT * FROM {$cfg['table']} WHERE id='{$_GET['id']}'";
    $vysledek=queryDBdata ($dotaz);
}
?>

... takhle vypadá odesílací formulář:

<form action="" method="post" name="form1">
                                
                                
    
                <b>Název příspěvku:</b><input name="name" type="text" id="name" value="<?=$vysledek[0]['name']?>">
    
                <br>
                <br>
                 
                <b>Text příspěvku:</b>&nbsp;                                
                <textarea id="text" name="text" cols="46" rows="4" wrap="virtual"><?=$vysledek[0]['text']?></TextArea>
                <br>
 
                                                                            

                                              <br>
                                              <br>
<p align="center"><input type="submit" name="Submit" value="ODESLAT"></p>
<input type="hidden" name="action" value="<?=$_GET['co']?>">      
      
</form>

Problém vypadá tak, že nefunguje akce "add". Data se prostě z formulářů do db neodešlou. Mazání (del) i editování (edit) přitom fungují bezproblémů (když přidám data do db přes phpmyadmin). Nefunguje jenom to odesílání ze stránky, na němž běží ten skript...

Už na to zírám asi 4 hodiny a vůbec nechápu, co je špatně. Hádal bych, že chybka bude v nastavení parametrů <form>, ale jak to nastavit správně fakt nevím:-(

Díky za jakoukoliv radu...


P.
unlucky
Profil
nejsem si jisty, ale mozna bude v tom :
LAST_INSERT_ID()
zkusil bych bez uvozovek
Davex
Profil
Nepomohlo by <input type="hidden" name="action" value="<?php echo $_GET['co']?>">?
unlucky
Profil
Davex:
problém v tom není, neboť by mu pak také nefungovaly edit a delete
Tori
Profil
w2009:
už léta používám
To se divím, že až teď vám to zlobí. Chybí jakékoli escapování vkládaných dat - tzn. pokud některý z vkládaných textů obsahuje apostrof, dotaz selže. Pokud sloupec id je AUTO_INCREMENT, můžete ho z insertu prostě vynechat, ID se vloží samo. LAST_INSERT_ID se taky ve verzích před a po 5.1.11 chová trochu jinak, koukněte na to, jestli se vás to týká nebo ne. Datum je lepší ukládat jako typ DATE nebo DATETIME, pokud podle toho chcete např. řadit výpis nebo vyhledávat. Při výpise výsledků si ho zformátujete třeba pomocí DATE_FORMAT jak potřebujete.
w2009
Profil
Pánové, jste fakt frajeři - bylo to skutečně uvozovkami v LAST_INSERT_ID() . Neuvěřitelný. Na to bych nepřišel... Díky mnohokrát.

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: