Autor Zpráva
ssssa
Profil *
Dobrý den, dělám webové stránky na serveru flyweb.cz, a udělal jsem formulář pro odesílání dat do db (MySql 5.0). Kod vypadá takto:

<?
     if(isset($_REQUEST["akce"])){
    switch($_REQUEST["akce"]){
      case "fotky-add":
       if($_REQUEST["typ"]=="empty"){echo "<script>alert(\"Musíte zadat cestu!\");</script>\n";}else{
       @mysql_query("INSERT INTO fotky(Jmeno, Popis, Typ) VALUES('" . $fotka_name . "', '" . $_REQUEST["popis"] . "', '" . $_REQUEST["typ"] . "')");}
       break;
    }
   }
?>


a formulář zní takto:

<form method="post" name="akce" enctype="multipart/form-data">
<input type="hidden" name="akce" value="fotky-add">
<textarea name="popis" rows="8" cols="35"></textarea>
<input type="file" size="30" name="fotka">
<select name="typ">
<option value="empty"></option>
<option value="product1">product1</option>
<option value="product2">product2</option>
</select>
</td></tr>
<input type="submit" value="Vložit">
</form>


Výsledek se ale v db vůbec neoběví, a přitom to na jiných serverech úplně normálně funguje. Ještě přidám script konektu do db:

<?
$sql = @mysql_connect("aven.flyweb.cz","nazev-db","heslo");
if(!$sql)
  die("Nelze se připojit k databázi. Pravděpodobně je výpadek na serveru. Těšíme se na Vaši brzkou příští návštěvu.");

@mysql_select_db("_bbf");
@mysql_query("SET NAMES utf8");
?>


Nevíte co s tím je? Vyzkoušel jsem snad úplně všechno.
Měsíček
Profil
Rádi by jsme chybové hlášky .. co třeba, kdyby jsi dal pryč to "@"?
ssssa
Profil *
Rádi by jsme chybové hlášky .. co třeba, kdyby jsi dal pryč to "@"?

Chybové hlášky to nemá vůbec žádné, a bez @ se napíše hláška

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...
Stepanka
Profil *
ssssa
Však to "Warning: .... atd" je právě ta chybová hláška. Máš chybu v tom dotazu. Ale asi v jiném, protože v tom, který jsi tu dal, žádné mysql_fetch_array není.. Máš tam ještě jiné sql dotazy?
ssssa
Profil *
ssssa
Však to "Warning: .... atd" je právě ta chybová hláška. Máš chybu v tom dotazu. Ale asi v jiném, protože v tom, který jsi tu dal, žádné mysql_fetch_array není.. Máš tam ještě jiné sql dotazy?

V tom dotazu @ je (@mysql_connect), takže to tuhle hlášku nevypisuje (vypíše se jenom když tam @ není). Když to napíšu s tím @, tak se mi žádná hláška neobjeví a přece se to neodešlě.
Stepanka
Profil *
ssssa
Však @ slouží k tomu, aby potlačil chybové hlášky. Ale on je potlačí jen v tom smyslu, že je nevypíše. Ty chyby tam ale tak jako tak jsou.
ssssa
Profil *
ssssa
Však @ slouží k tomu, aby potlačil chybové hlášky. Ale on je potlačí jen v tom smyslu, že je nevypíše. Ty chyby tam ale tak jako tak jsou.

Když odstraním @ od dotazu
mysql_query
, tak to žádnou hlášku nepíše. Hlášku to vypíše, teprve když odstraním @ od funkce
copy
(kterou jsem tady neuvedl). Vypíše to hlášku:

Warning: copy() [function.copy]: Unable to access in...


Žádné jiné hlášky to v tomto scriptu opravdu nevypisuje.
Stepanka
Profil *
ssssa
Ve svém druhém příspěvku od vrchu ale uvádíš, že vypisuje.
ssssa
Profil *
Stepanka

Tuhle hlášku:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...


to vypíše v jiném scriptu (ve výpisu dat z db)
Stepanka
Profil *
ssssa
Zkus z toho Tvého skriptu odstranit všechny @, máš jich tam více. A za mysql_query přidej or die(mysql_error());. Když tohle uděláš, tak Ti to nějakou chybu vypíše?
ssssa
Profil *
ssssa
Zkus z toho Tvého skriptu odstranit všechny @, máš jich tam více. A za mysql_query přidej or die(mysql_error());. Když tohle uděláš, tak Ti to nějakou chybu vypíše?

Když to dosadím do
mysql_query("INSERT INTO fotky(Jmeno, Popis, Typ) VALUES('" . $fotka_name . "', '" . $_REQUEST["popis"] . "', '" . $_REQUEST["typ"] . "')" or die(mysql_error()));
tak se žádná hláška neoběví, ani když to chci vypsat v konektu do db
echo mysql_error($sql);
Až když chci vypsat funkci
echo mysql_errno($sql);
tak mi to vypíše 0. Co to znamená?
Stepanka
Profil *
ssssa
Máš závorku špatně, dej tam:
mysql_query("INSERT INTO fotky(Jmeno, Popis, Typ) VALUES('" . $fotka_name . "', '" . $_REQUEST["popis"] . "', '" . $_REQUEST["typ"] . "')") or die(mysql_error());


Pokud to žádnou chybu nevypíše, zkus si před ukládáním do databáze vypsat všechny proměnné, které tam chceš uložit, takhle:
if(isset($_REQUEST["akce"])){
    switch($_REQUEST["akce"]){
      case "fotky-add":
       if($_REQUEST["typ"]=="empty"){echo "<script>alert(\"Musíte zadat cestu!\");</script>\n";}else{
           echo $fotka_name.$_REQUEST["popis"].$_REQUEST["typ"];
       }


Vypíše Ti to takhle všechny tři prommené tak, jak je chceš uložit do DB?
ssssa
Profil *
mysql_query("INSERT INTO fotky(Jmeno, Popis, Typ) VALUES('" . $fotka_name . "', '" . $_REQUEST["popis"] . "', '" . $_REQUEST["typ"] . "')") or die(mysql_error());

Chyba byla ve špatném zvolení db, protože se vypsala chyba
No database selected
. Jelikož jsem na serveru flyweb.cz dělal poprvé, špatně jsem jí určil.
Stepanka
Profil *
ssssa
Takže vyřešeno?
ssssa
Profil *
Odesílání dat do db vyřešeno, ale ještě mám problém s uploadováním obrázků do souboru. Zase to na jiných serverech jde, ale tady se to prostě nezkopíruje. Navíc to vypíše hlášku:
Warning: copy() [function.copy]: Unable to access in...
Co hláška znamená? Práva souborům jsou nastavená na 777. Script vypadá takto:

if(isset($_REQUEST["akce"])){
switch($_REQUEST["akce"]){
case "fotky-add":
$adresa = $_REQUEST["typ"];
copy($fotka, "$adresa/$fotka_name;");
break;

a formulář takto:

<form method="post" name="akce" enctype="multipart/form-data">
<input type="hidden" name="akce" value="fotky-add">
<input type="file" name="fotka">
Nahrát do:
<select name="typ">
<option value="cesta1">cesta1</option>
<option value="cesta2">cesta2</option>
</select>
</form>
ssssa
Profil *
Opraveno - použita funkce
move_uploaded_file
. Ale stejně bych rád věděl čim to bylo... :D
Budulinek
Profil *
fce copy() býva někdy na hostinzích zakázaná z bezpečnostních důvodů, proto nelze použít a nahrazuje se právě fcí move_uploaded_file()....

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