Autor Zpráva
svetlusacek
Profil *
dobry den vsem! moc bych vas chtela poprosit o pomoc. muj provozovatel hostingu nedavno zmenil verzi a prostredi PHP a od te doby mam problemy na webu. konkretne s nahravanim souboru na FTP server pres formular a PHP. komunikace s databazi mi funguje, ale neprenese se mi soubor. prosim, najde se nekdo, kdo by mi mohl poradit? byla bych vam moc vdecna...

formular:
<?  include('./config.php');    ?>
<?
    $spojeni = @MySQL_Connect($se, $uz, $he);
    $db = @MySQL_Select_DB($DB);

?>


<FORM METHOD="POST" action="ins_info.php" enctype="multipart/form-data">
<TABLE>

<TR><TD><u><b>Upload a file:</b></u></TD></TR>
<TR>
<TD><b>Title:</b></TD>
<TD><INPUT TYPE="TEXT" NAME="titulek_form"></INPUT></TD>
</TR>
<TR>
<TD><b>Date:</b></TD>
<TD><INPUT TYPE="TEXT" NAME="datum_form"></INPUT></TD>
</TR>
<TR>
<TD><b>File:</b></TD>
<TD><INPUT TYPE="FILE" ACCEPT="*/*" SIZE="33" NAME="soubor"></INPUT></TD>
</TR>
<TR>
<TD><INPUT TYPE="SUBMIT" NAME="Odeslat" VALUE="Add to database"></INPUT></TD>
</TR>
</TABLE>

</FORM>

a soubor ins_info.php (soubor vlozeny pres formular dostane nove jmeno, napr. info1234.pdf -- ale ted mi funguje pouze komunikace s databazi -- takze vysledek je, ze na vystupu dostanu pouze info1234. (bez souboru na FTP serveru a bez koncovky s typem souboru -- vysledek v databazi je na obrazku). asi mam chybu nekde v te druhe casti kodu, od podminky while, ale nevim si s tim rady. slozky, do kterych se ma zapisovat, maji obe dve prava 777):
<?    include('./config.php')    ?>
<?
    @Set_Time_Limit(0);
    $INI_ADMIN_PASSWORD = $_POST["INI_ADMIN_PASSWORD"];
    $soubor = $_FILES["soubor"]["name"];
    $spojeni_ftp = $_GET[spojeni_ftp];    
 
    $MaxID = $_POST["MaxID"];   
    $titulek_form = $_POST["titulek_form"];
    $datum_form = $_POST["datum_form"]; 
    $DatumInt = $_POST["DatumInt"];
    $jmeno =  $_POST["jmeno"];
    
    $prenos_info = $_GET[prenos_info];
    $vloz_info = $_GET[vloz_info];   


IF($PASSWORD==$INI_ADMIN_PASSWORD):

    $spojeni = MySQL_Connect($se, $uz, $he);
    $db = MySQL_Select_DB($DB);

    $vyber2 = MySQL_Query("SELECT Max(ID) FROM info");
    $MaxID = MySQL_Result($vyber2, 0) +1;

    $titulek_form = HTMLSpecialChars($titulek_form);
    $datum_form = HTMLSpecialChars($datum_form);

    $datum2 = Explode(".", $datum_form);

    $DatumInt = MkTime(0,0,0, $datum2[1], $datum2[0], $datum2[2]);

    $jmeno = "info";
    
    $i = 1;

    do
{
         if($i==1) $jmeno_old = $jmeno;
         $jmeno = $jmeno_old;
         $nazev = Explode(".", $soubor_name);
         SRand((double)MicroTime()*1e6);
         $cislo = Rand (1, 9999);
//         $nazev[0] .= $cislo;
         $jmeno .= $cislo.".".$nazev[1];
         $i++;
}
    While(@File_Exists("$INI_info_path$jmeno"));


    $vloz_info = @MySQL_Query("INSERT INTO info VALUES ('$MaxID', '$titulek_form', '$datum_form', '$jmeno', '$DatumInt')");


// *** FTP prenos souboru
 
      
        $spojeni_ftp = @ftp_connect("$INI_ftp_server");                          // pripojeni k FTP serveru
        @ftp_login($spojeni_ftp, "$INI_ftp_user", "$INI_ftp_pass");                              // prihlaseni k FTP serveru

        $prenos_info = @ftp_put($spojeni_ftp, "$INI_info_ftp_path$jmeno", "$soubor", FTP_BINARY);       // kam se ma soubor ulozit

        @chdir("$INI_server_home_path");                                                 // nastaveni domovskeho adresare
        @ftp_close($spojeni_ftp);                                                                 // odhlaseni od FTP serveru


// *** Konec - FTP prenos souboru


    Header("Location: status.php?prenos_info=$prenos_info&vloz_info=$vloz_info");
?>
<?
ELSE:
    Echo "<p style=\"color: #FF0000;\"><b>Nemáte přístup k aplikaci!</b></p>";
ENDIF;
?>
Keeehi
Profil
Začni tím, že smažeš všude @ což potlačuje výpis chyb. Podle chyby se pak dá zjistit, kde je problém.
svetlusacek
Profil *
to uz jsem udelala... ted uz mam jen toto:

        $spojeni_ftp = ftp_connect("$INI_ftp_server");                          
        ftp_login($spojeni_ftp, "$INI_ftp_user", "$INI_ftp_pass");                          

        $prenos_info = ftp_put($spojeni_ftp, "$INI_info_ftp_path$jmeno", "$soubor", FTP_BINARY);       

        ftp_chdir("$INI_server_home_path");                                                 
        ftp_close($spojeni_ftp); 

chyby mi to nehlasi, ale podle Header("Location:") mi to hlasi toto: $vloz_info = 1 (database je teda funkcni), ale $prenos_info nezahlasi nic, ani 0, ani 1, takze to nejak nekomunikuje. takhle nejak to vypada:

http://domain.com/admin/status.php?prenos_info=&vloz_info=1
Keeehi
Profil
Ten kód je tedy hrozná prasárna, ale myslím, že proměnná $soubor obsahuje cestu k neexistujícímu souboru. Vlastně se dívím, že to někdy fungovalo.

Před ftp_put vlož
var_dump($soubor);
exit;
A zkontroluje, zda na takovém místě soubor opravdu existuje.
svetlusacek
Profil *
Keeehi:
ja jsem to podedila a ted s tim bojuju... podarilo se mi ale vypsat chyby. nemam prosim Vas spise nekde chybu jeste na zacatku, v tech promennych? ja si tim nejsem vubec jista, hlavne tou promennou s password...

onedrive.live.com/redir?resid=A4FF12F0A90EB2D9!24288&authkey=!AKG6T2AOZ6DGPJY&ithint=file%2cPNG


upravila jsem zacatek souboru, ted mam:

  @Set_Time_Limit(0);
    $PASSWORD = $_POST["PASSWORD"];
    $soubor = $_FILES["soubor"]["name"];
    $titulek_form = $_POST["titulek_form"];
    $datum_form = $_POST["datum_form"]; 
 


IF($PASSWORD==$INI_ADMIN_PASSWORD):

a hlasi mi to uz pouze jeden error:

Undefined index: PASSWORD in /home/webs/domain.com/html/admin/ins_info.php on line 7

to znamena, ze mam spatne nactene admin heslo???
Keeehi
Profil
Nejsem si jistý tím na co se přesně ptáš. Obecně ano, nějaký problém tam bude ale pravděpodobně úplně jiný než si myslíš.

Ale co vím určitě je to, že se ti dá jen špatně pomoci, když se vůbec neřídíš radami ale jen tak šťoucháš do kódu a doufáš, že z toho něco vypadne.
svetlusacek
Profil *
ne, to ne. pokusila jsem se upravit tu cast kodu, kde je ftp connect, aby mi to zahlasilo chyby, abych videla, kde je mam... z toho mi pak vyslo to, co je na obrazku... takze jsem pochopila, ze na zacatku skriptu mam spatne ty promenne, ze tam mam ty, ktere nejsou ve formulari, proto to hazi chyby... takze jsem je odstranila a nechala pouze ty, ktere jsem psala naposled... no a zustala mi ta jedna chyby s tim password...
Keeehi
Profil
OK, tak to zkusíme znovu. Jak teď vypadá ten kód?
svetlusacek
Profil *
dobre, takze ten kod vypada ted takto:

<?    include('./config.php')    ?>
<?
  error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors', '1');
  @Set_Time_Limit(0);
    $PASSWORD = $_GET["PASSWORD"];
    $INI_ADMIN_PASSWORD = $_POST["INI_ADMIN_PASSWORD"];
    $soubor = $_FILES["soubor"]["name"];
    $titulek_form = $_POST["titulek_form"];
    $datum_form = $_POST["datum_form"]; 
 

IF($PASSWORD==$INI_ADMIN_PASSWORD):
  
    $spojeni = MySQL_Connect($se, $uz, $he);
    $db = MySQL_Select_DB($DB);

    $vyber2 = MySQL_Query("SELECT Max(ID) FROM info");
    $MaxID = MySQL_Result($vyber2, 0) +1;

    $titulek_form = HTMLSpecialChars($titulek_form);
    $datum_form = HTMLSpecialChars($datum_form);

    $datum2 = Explode(".", $datum_form);

    $DatumInt = MkTime(0,0,0, $datum2[1], $datum2[0], $datum2[2]);

    $jmeno = "info";
    
    $i = 1;

    do
{
         if($i==1) $jmeno_old = $jmeno;
         $jmeno = $jmeno_old;
         $nazev = Explode(".", $soubor_name);
         SRand((double)MicroTime()*1e6);
         $cislo = Rand (1, 9999);
//         $nazev[0] .= $cislo;
         $jmeno .= $cislo.".".$nazev[1];
         $i++;
}
    While(File_Exists("$INI_info_path$jmeno"));


    $vloz_info = MySQL_Query("INSERT INTO info VALUES ('$MaxID', '$titulek_form', '$datum_form', '$jmeno', '$DatumInt')");


// *** FTP prenos souboru
 

$spojeni_ftp = ftp_connect($INI_ftp_server) 
or die ("Failed to connect to ftp server $INI_ftp_server"); 

ftp_login($spojeni_ftp, "$INI_ftp_user", "$INI_ftp_pass") 
or die ("Failed to login to ftp server $INI_ftp_server"); 

ftp_chdir($spojeni_ftp, $INI_server_home_path) 
or die ("Failed to cd to $INI_server_home_path"); 

var_dump($soubor);
exit;

$prenos_info = ftp_put($spojeni_ftp, "$INI_info_ftp_path$jmeno", $soubor, FTP_BINARY) 
or die ("Failed to upload $INI_info_ftp_path$jmeno"); 

ftp_close($spojeni_ftp);  


// *** Konec - FTP prenos souboru


    Header("Location: status.php?prenos_info=$prenos_info&vloz_info=$vloz_info");
?>
<?
ELSE:
    Echo "<p style=\"color: #FF0000;\"><b>Nemáte přístup k aplikaci!</b></p>";
ENDIF;
?>

na zacatku mam asi blbe ty promenne, jenze nevim, jak to zapsat. to $PASSWORD je session ze souboru log.php, cili kdyz se nekdo prihlasi do adminu... a $INI_ADMIN_PASSWORD je z config.php, kde je to heslo ulozene... kdyz tam na zacatku ty deklarace nemam, hlavne to $INI_ADMIN_PASSWORD, tak mi to haze to echo "nemate pristup k aplikaci". no a aktualni errory, co mi ta stranka s timhle kodem hlasi, jsou tyto:

Notice: Undefined index: PASSWORD in /home/webs/domain.com/html/admin/ins_info.php on line 6

Notice: Undefined index: INI_ADMIN_PASSWORD in /home/webs/domain.com/html/admin/ins_info.php on line 7

Notice: Undefined offset: 1 in /home/webs/domain.com/html/admin/ins_info.php on line 26

Notice: Undefined offset: 2 in /home/webs/domain.com/html/admin/ins_info.php on line 26

Notice: Undefined variable: soubor_name in /home/webs/domain.com/html/admin/ins_info.php on line 36

Notice: Undefined offset: 1 in /home/webs/domain.com/html/admin/ins_info.php on line 40

Warning: ftp_chdir() [function.ftp-chdir]: Failed to change directory. in /home/webs/domain.com/html/admin/ins_info.php on line 58
Failed to cd to /home/webs/domain.com/html/
Martin2
Profil *
svetlusacek:
to $PASSWORD je session ze souboru log.php, cili kdyz se nekdo prihlasi do adminu... a $INI_ADMIN_PASSWORD je z config.php, kde je to heslo ulozene.
Soudě podle kódu je $PASSWORD získáno z GET parametru a $INI_ADMIN_PASSWORD z POST parametru požadavku. Pak následuje úplně nesmyslná podmínka, pokus vygenerovat náhodné jméno souboru, SQL Insert s neošetřenými vstupy a nakonec FTP spojení s parametry, které neznáme.

Evidentně nemáš vůbec ponětí, co se v programu odehrává. Není ti pomoci.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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