Autor Zpráva
David1256
Profil
Jsem začátečník s MySQL a snažím se ho aplikovat na různé příklady, jeden z nich je tento: Po odeslání formuláře, kde je input na číslo, se ono číslo z inputu přičte do dané buňky v databázi. Problém je, že mi to hlásí chybu

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/f/funradio/zkouskamysql.php on line 8

Kterou mi to hlásí vždy, když s danou funkcí mysql_fetch_array() pracuji.
Dále jsem okomentoval jednotlivé části mého kódu a byl bych rád, kdybyste mi opravili komenáře, které jsou nesprávné, abych MySQL správně chápal.
Dále přikládám tabulku z databáze s názvem klikani.

Zde je můj kód:
<form method="POST">
<input type=text name="cislozformulare">
<input type=submit value="Přičti">
<?php
$spojeni = MySQL_connect("mysql.webzdarma.cz","***","***");   //spojení s databází
$cislo=mysql_query("SELECT cislo FROM klikani WHERE ID=1 ;");   // do proměnné číslo přiřaď buňku s číslem
$zaznam=MySQL_Fetch_Array($cislo);    // do pole proměnné záznam převeď $cislo tzn. tu buňku cislo
$cislo = $zaznam["cislo"]; // do proměnné $cislo přiřaď hodnotu  $zaznam pole cislo tzn. buňka obsahující číslo
mysql_query("INSERT into klikani SET cislo='".($_POST["cislozformulare"]+$cislo)."' where ID=1 ;");   //  do buňky číslo přičti hodnotu z formuláře
echo $cislo; // vypiš hodnotu buňky cislo, kde je ID rovno 1
?>
</form>


Zde http://www.funradio.wz.cz/zkouskamysql.php na živou ukázku.
Díky všem na případné rady.

Moderátor panther: Smazány příst. údaje k DB.
fuckin
Profil
$cislo=mysql_query("SELECT cislo FROM klikani WHERE ID=1 ;");  


středník tam nemá co dělat, to samé v dotazu dole.
AM_
Profil
David1256:
supplied argument is not a valid MySQL result resource
znamená, že předaný parametr není typu MySQL result - jediné jiné, co může mysql_query vrátit, je false, pokud dotaz selže. Chybu zjistíš pomocí funkce mysql_error().
David1256
Profil
AM:
Po MySQL erroru mi to vypsalo další 2 chyby. Do závorek té funkce jsem dal všechny proměnné použité ve scriptu, to je správné užití této funkce?
Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in /3w/wz.cz/f/funradio/zkouskamysql.php on line 17

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in /3w/wz.cz/f/funradio/zkouskamysql.php on line 18

fuckin:
Díky, ty středníky jsem tam dal z rady uživatele Radek Cvek z tohoto tématu.
AM_
Profil
David1256:
http://php.net/mysql_error
na tomto webu najdeš referenční příručku i všech ostatních funkcí PHP. hádájí, co má být jako parametr, není správná cesta.
David1256
Profil
AM:
Tak jsem zjistil, že se má dát za ten mysql_error() za funkci, kterou chci ověřit. A vypsalo to No database selected.
xmark
Profil
David1256:
mysql_query("INSERT into klikani SET cislo='".($_POST["cislozformulare"]+$cislo)."' where ID=1 ;"); 


Kdes viděl tenhle zápis INSERTu?
Vypadá to, že nemáš moc jasno, k čemu se používá ID a jak s databází pracuje tak nějak celkově.
Na http://www.linuxsoft.cz/article.php?id_article=344 najdeš, jak z databáze data dostat, ale doporučoval bych začít spíš na id_article=336, aby ses trochu zorientoval.

A mimochodem, smaž si přístupové údaje v #1, jestli nechceš, aby ti tu databázi někdo vyčistil.

Moderátor panther: Uživatelské jméno a heslo k DB jsem smazal.
David1256
Profil
Jak už jsem říkal, vycházím z rady uživatele Radek Cvek z tématu zmíněného zde [#4]
DJ Miky
Profil
David1256:
Po připojení funkcí mysql_connect() ještě musíš vybrat databázi, se kterou budeš pracovat, funkcí mysql_select_db() (pokud vím, tak na WZ je název databáze stejný jako login, ale raději si to ověř v administraci WZ).

A, jak už psal xmark, máš špatnou syntaxi toho aktualizačního dotazu - aktualizuje se příkazem UPDATE (tedy místo INSERT INTO napiš UPDATE). INSERT slouží ke vkládání nových záznamů (řádků) do tabulky, např. kdybys potřeboval vložit ještě další záznam s jiným ID.
pcmanik
Profil
A inak radim ti osetrit si to cislo z post-u, bohate staci funkcia intval()
David1256
Profil
Moc dík všem. Už to funguje, jak má.
Risek
Profil
David1256:

a co použít $pripsani = mysql_query("UPDATE klikani SET cislo=cislo+".$_POST['cislozformulare']." WHERE ID=1 ");
Micruss
Profil
Takhle bych to udělal já
$neco = $zaznam['cislo'] + intval($_POST['cislozformulare']);

$pripsani = mysql_query("UPDATE klikani SET cislo = '$neco' where id = 1");
Jan Tvrdík
Profil
Risek:
Není mi jasné, proč to vlákno po dvou letech vytahuješ, navíc je tebou popsané řešení náchylné na SQL injection.

Micruss:
Popsané řešení není atomické, takže může vést ke ztrátě dat.


Správné řešení je např.
if (isset($_POST['cislozformulare'])) {
    $pricist = (int) $_POST['cislozformulare'];
    mysql_query("
        UPDATE `klikani`
        SET `cislo` = `cislo` + $pricist
        WHERE `id` = 1
    ");
}
Micruss
Profil
Jan Tvrdík:

Šlo mi jen ukázat ten hlavní kód a tam vložit i s postem... počítal jsem s tím, že už to má hotové jen se ptá na to sečtení

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: