Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Napsal by mi někdo kod php?

Sia vespolek,

našel by se tu někdo kdo by mi napsal php kod pro zapsání dat ze souboru CSV do databáze?
Jde o to že bych ten soubor vložil do formuláře a po odkliknutí by se to uploadlo do databáze a seřadilo do příslušných tabulek.
Přikládám soubor CSV

Budu vděčný a možná i odměna určitě se domluvíme.

Předmět Autor Datum
Toto je poradna - pokud sháníš programátora, napiš si poptávku do bazaru.
host 10.02.2012 18:50
host
Pokud by se někdo našel a pomohl mi ho napsat tak mi tím i poradí. Stačí mi ten kod jen nějakým způs…
Gizzer 10.02.2012 18:56
Gizzer
:-( Mmmmm. Postup bude následující: 1) Nahrání souboru na server fileupload.php 2) Otevření soubo…
Flash_Gordon 10.02.2012 19:11
Flash_Gordon
Děkuji, pročtu a zkusím to nějak splácat :) Ještě jednou díky
Gizzer 10.02.2012 19:15
Gizzer
nějakým způsobem začít Sice nevím jakou máš představu, ale nahraj soubor na server přes FTP (ulehčí…
ERASER 10.02.2012 19:12
ERASER
Upload na ftp vylučuji, jde o to že uploadovat bude moct více lidí tudíž je tato možnost nevyhovujíc…
Gizzer 10.02.2012 19:16
Gizzer
beru na vědomí, snad pomůže příloha
ERASER 10.02.2012 19:37
ERASER
Také děkuji teď už to snad dohromady dám.
Gizzer 10.02.2012 19:40
Gizzer
<?php //kod pro připojení k databázi if(isset($_POST['submit'])) { $data = $_POST['data']; $data = e…
marekdrtic 10.02.2012 19:19
marekdrtic
nezbývá než také poděkovat, takže děkuji.
Gizzer 10.02.2012 19:20
Gizzer
řeším to prvně uložením na ftp a následně zprácováním do databáze. Problém je že se mi to nechce ul…
Gizzer 11.02.2012 14:33
Gizzer
Prohlížeč něco hlásí? Máš zapnutý výpis chyb (error reporting)? Taky si nech pro kontrolu echem vyp…
host 11.02.2012 15:10
host
Prohlížeč něco hlásí? Máš zapnutý výpis chyb (error reporting)? Hlásí toto Warning: Division by zer…
Gizzer 11.02.2012 15:16
Gizzer
Hlásí toto Warning: Division by zero in /home/michales.eu/michales.eu/upload_playerstat.ph p on line…
ERASER 11.02.2012 16:02
ERASER
Formulář: <form action="/upload_playerstat.php" method="POST"> Sem vlož teamstat:<br> <input name="…
Gizzer 11.02.2012 16:19
Gizzer
Nejprve sis měl zkusit vytvořit skript pro upload a potom, až ti bude daný skript fungovat, vytvořit…
ERASER 11.02.2012 16:44
ERASER
Ve složce seting je toto: <?php define('DB_CHARSET', 'utf8'); // Set your database information $spo…
Gizzer 11.02.2012 19:48
Gizzer
Dobře, k upload_playerstat.php Notice: Undefined variable: confid in Gizzer\upload_playerstat.php o…
ERASER 12.02.2012 11:27
ERASER
Ještě jeden dotaz toto je příkaz který ukládá data do tabulky v databázy $stats="playerstaty_$confi…
Gizzer 11.02.2012 21:54
Gizzer
toto je příkaz který ukládá data do tabulky v databázy $stats="playerstaty_$confid"; Ne toto :x:NEN…
ERASER 12.02.2012 11:41
ERASER
Už jsem to vyřešil. Díky ti za veškěré rady, hodně si mi pomohl. poslední
Gizzer 12.02.2012 11:53
Gizzer

:-(
Mmmmm.

Postup bude následující:

1) Nahrání souboru na server
fileupload.php

2) Otevření souboru a čtení řádek po řádku
function.fgets.php

3) Rozdělení jednotlivých buněk na řádku do pole pomocí explode
function.explode.php

4) Projítí vytvořeného pole pomocí konstrukce foreach a zapsání do db
http://php.net/manual/en/control-structures.foreac h.php

Nepodstatné poznámky:
- pokud se bude vyskytovat diakritika bude nutné pracovat i s typem kódování souboru
- Ošetření vstupu (= formátu dat přijatého souboru, chybám)

nějakým způsobem začít

Sice nevím jakou máš představu, ale nahraj soubor na server přes FTP (ulehčíš si tím práci), a pak jenom napiš skript pro seřazení dat do DB. Kdybys nevěděl jak, použij google :-) nebo se někoho zeptej na konkrétní problém.

<?php
//kod pro připojení k databázi

if(isset($_POST['submit']))
{

$data = $_POST['data'];

$data = explode("\n",$data);
foreach($data as $line)
{
 $cells = explode(",",$line);
 mysql_query("INSERT INTO `table`
 SET `team` = '".mysql_real_escape_string($cells[0])."',
 SET `dalsisloupec` = '".mysql_real_escape_string($cells[1])."',
 ..... // ATD, TADY SI TO DOPISES TY SLOUPCE
 SET `poslednisloupec` = '".mysql_real_escape_string($cells[16])."';

");
}

}

?>
<form action="" method="POST">
Sem vlož csv:<br>
<textarea name="data" rows="50" cols="10"></textarea><br><br>
<input type="submit" name="submit" value="Ulož do DB">
</form>

Tohle je takový řešení narychlo za pět minut, uprav si to podle sebe, dodělej ošetření atd..

řeším to prvně uložením na ftp a následně zprácováním do databáze.

Problém je že se mi to nechce uložit na ftp do složky playerstaty, atributy nastavený na 777.

if (isset($_FILES['fupload']))
    {
  $slozka = "playerstaty"; // Zde si napi‘te svojí složku, do které se budou soubory ukádat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypí‘e tuto hlá‘ku
    chmod ($cil, 0777); // Je‘tě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
// do této chvíle se řešil upload souboru
    if($copy == true)    //pokudp roběhl uspěšně zapisujeme do databáze

Hlásí toto Warning: Division by zero in /home/michales.eu/michales.eu/upload_playerstat.ph p on line 4

Chyba dělení nulou. Nevím kde tam dělíš nulou. Asi na řádku 4. Hoď jsem celý zdrojový kód, ať vím kde mám hledat řádek č.4
Jinak jsem si testoval tvůj zdroják a u mě to běží v pohodě. Mají skripty na tvém serveru právo zapisovat soubory?

Formulář:

<form action="/upload_playerstat.php" method="POST">
Sem vlož teamstat:<br>
<input name="fupload" type="file" /><br /></td>
<input type="submit" name="submit" value="Odeslat"><br><br>

upload_playerstat.php:

<?php
  ini_set("display_errors", 1); //nepouzivejte v PHP4
  error_reporting(E_ERROR | E_WARNING);
  $a = 5 / 0;   //chyba deleni nulou
?>
<?php
          if (isset($_FILES['fupload']))
    {
  $slozka = "playerstaty"; // Zde si napi‘te svojí složku, do které se budou soubory ukádat (bez lomítka)
    $cil = $slozka . "/" .$_FILES['fupload']['name']; // Toto je proměnná $cil, která obsahuje adresář, kde se má soubor uploadovat a taky název souboru.
    $nazev_souboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru
    $copy = move_uploaded_file($nazev_souboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky
      or die ("Přenesený soubor nelze zkopírovat"); // A pokud se nepovede, tak vypí‘e tuto hlá‘ku
    chmod ($cil, 0777); // Je‘tě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777
// do této chvíle se řešil upload souboru 
    if($copy == true)    //pokudp roběhl uspěšně zapisujeme do databáze
    
    {
    include "settings.php";

     $stats="playerstaty_$confid";

     $filename=$cil;

     $handle = fopen("$filename", "r");

     while (($data = fgetcsv($handle, 1000, ',')) !== FALSE)    // cyklus který prochází jednotlivé řádky CSV souboru

  {
$rozdeleni_casu = explode(":",$data[3]);
$time= ($rozdeleni_casu[0]*60 + $rozdeleni_casu[1]);
   // i pro multi-byte (napr. UTF-8)
$prevodni_tabulka = Array(
  "'"=>"_"
);

$upraveny_text = strtr($data[0], $prevodni_tabulka);    //tady upravuju jméno aby bylo v mnou požadovaném tvaru

    // tu se dívám do databáze jeslti daný hráč už v databázi existuje.
    $exist_hrac = mysql_result(mysql_query("SELECT COUNT(*) FROM $stats WHERE Name = '$upraveny_text'"), 0);
//neexistuje -> potom ho vytvoříme pomocí insert
    if($exist_hrac==0){
    if ($upraveny_text != "Player Name" && $data[1] != "-"&& $data[2] != "-"&& $data[3] != "-"&&  $data[5] != "-"&& $data[6] != "-"&& $data[8] != "-"&& $data[9] != "-"&& $data[10] != "-")
    {
    $import2="INSERT INTO $stats (Name,Team,Pos,P,G,A,GP,Time,PIMS,plusminus,PPG,SHG,Shoot,Hits,ID) VALUES ('$upraveny_text', '$data[1]', '$data[2]', '$data[4]'+'$data[5]', '$data[4]', '$data[5]',1,'$time','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','0')";
    mysql_query($import2) or die(mysql_error());
    }
    }
    //existuje -> potom ho aktualizujeme pomocí update
    else {
    if ($upraveny_text != "Player Name" && $data[2] == "Player" && $data[1] != "-"&& $data[2] != "-"&& $data[3] != "-"&& $data[5] != "-"&& $data[6] != "-"&& $data[8] != "-"&& $data[9] != "-"&& $data[10] != "-")
    {
    $import="UPDATE $stats SET Time=Time+$time,P=P+$data[4]+$data[5], G=G+$data[4], A=A+$data[5], GP=GP+1, PIMS=PIMS+$data[6], plusminus=plusminus+$data[7], PPG=PPG+$data[8], SHG=SHG+$data[9], Shoot=Shoot+$data[10], Hits=Hits+$data[11] WHERE Name='$upraveny_text'";
    mysql_query($import) or die(mysql_error());
    }
    else
    {
     if ($upraveny_text != "Player Name" && $data[2] == "Goalie" && $data[1] != "-"&& $data[2] != "-"&& $data[3] != "-"&& $data[5] != "-"&& $data[6] != "-"&& $data[8] != "-" && $data[10] != "0"&& $data[9] != "-"&& $data[10] != "-")
      {
    $import="UPDATE $stats SET  Time=Time+$time,GP=GP+1, PPG=PPG+$data[8], Shoot=Shoot+$data[10] WHERE Name='$upraveny_text'";
    mysql_query($import) or die(mysql_error());
      }
    }
        }
    
    }
     fclose($handle);

     print "Výsledek úspěšně zapsán";}
     
  }
?>


Nejprve sis měl zkusit vytvořit skript pro upload a potom, až ti bude daný skript fungovat, vytvořit další pro vkládání do DB.
Předpokládám, že jsi daný skript netvořil, ale pouze někde stáhl, protože bys asi přišel na to proč to hlásí chybu dělení nulou (čtvrtý řádek):

$a = 5 / 0;   //chyba deleni nulou

To pochopitelně musí. Nefungovalo ti to proto, protože se žádný upload souboru nekonal, proto to nemohlo ani uložit někam do složky. V souboru s formulářem dej místo:

<form action="/upload_playerstat.php" method="POST">

toto:

<form action="upload_playerstat.php" method="post" enctype="multipart/form-data">

(formulář i "pload_playerstat.php" je ve stejné složce, ve které je i složka "playerstaty")

Stále jsem se ale nedozvěděl, jestli skripty mají právo zapisovat na server? Pokud mají pouze s oprávněním 0777, tak to lze změnit i přes FTP, tudíž není potřeba:

chmod ($cil, 0777); // Je‘tě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777

K DB - Na 22 řádku nevím jak vypadá soubor "settings.php".

Ve složce seting je toto:

<?php

define('DB_CHARSET', 'utf8');
// Set your database information
$sportsdb_host = '******';
$sportsdb_user = '*******';
$sportsdb_pass = '********';
$sportsdb_db = '*******';


MySQL_Connect($sportsdb_host,$sportsdb_user,$sportsdb_pass) Or Die('Neni conenct:'.MySQL_Error());
MySQL_Select_DB($sportsdb_db) Or Die('Neni DB:'.MySQL_Error());
MySQL_Query("SET NAMES 'cp1250'") or die(mysql_error());

?>

Toto připojení k databázi funguje.

Změnil jsem toto

<form action="upload_playerstat.php" method="post" enctype="multipart/form-data">

Už mi to jde, díky
jen mi to do databáze nevypíše všechny řádky ze souboru ale dá je do jednoho společného všechn dohromady.

Dobře, k upload_playerstat.php

Notice: Undefined variable: confid in Gizzer\upload_playerstat.php on line 21

Tak tady nemáš definovoanou proměnou "$confid":

Notice: Undefined offset: 1 in Gizzer\upload_playerstat.php on line 31

Tam není definována proměnná "$rozdeleni_casu[1]" a o řádek výše vytváříš z proměnné "$data[3]" pole pomocí separátoru ":", ale tam je pouze jedno slovo viz. řádek:

$rozdeleni_casu = explode(":",$data[3]);

Pak na 45 řádku máš špatně DB dotaz:

$import2="INSERT INTO $stats (Name,Team,Pos,P,G,A,GP,Time,PIMS,plusminus,PPG,SHG,Shoot,Hits,ID) VALUES ('$upraveny_text', '$data[1]', '$data[2]', '$data[4]'+'$data[5]', '$data[4]', '$data[5]',1,'$time','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','0')";

Je když jsem si nechal doplnit proměné:

INSERT INTO playerstaty_ (Name,Team,Pos,P,G,A,GP,Time,PIMS,plusminus,PPG,SHG,Shoot,Hits,ID) VALUES ('', 'Team', 'Goal', 'SH goal'+'Breakaway', 'SH goal', 'Breakaway',1,'0','Onetimers','Onetimer goal','Faceoff','Hits','Penalties','EN goal','0')

Co tam dělá to " '+' " ?

Když jsem pouze poupravil DB dotaz, tak se mi to nacpalo do DB, a každý údaj do vlastního chlívečku, takže nevím jak jsi dosáhl toho, že je máš ve společném chlívečku:?:

Ještě jeden dotaz

toto je příkaz který ukládá data do tabulky v databázy $stats="playerstaty_$confid"; kde $confid je proměnlivé protože záleží co je v odkaze takže třeba upload_playerstat.php kde confid je 12.
Jak má být vytvořena tabulka v databázy aby se to do ní zapisovalo? Udělal jsem playerstaty_ ale to je blbost

toto je příkaz který ukládá data do tabulky v databázy $stats="playerstaty_$confid";

Ne toto :x:NENÍ:x: příkaz, který ukládá data do tabulky v DB. Je to pouze proměnná, která definuje název tabulky v DB.

kde $confid je proměnlivé

To asi těžko, protože $confid jak jsem psal o úroveň výše, není ve zdrojáku nikde definováno.
Jinak nechápu, čeho chceš vlastně dosáhnout. Jestli chceš definovat název tabulky podle odkazu, tak na to urychleně zapomeň (, ne že by to z technického hlediska nebylo možné). O úroveň výše píšeš, že se ti to do tabulky (s názvem "playerstaty_") zapsalo, ostatně název tabulky si můžeš udělat jakýkoliv chceš.

Zpět do poradny Odpovědět na původní otázku Nahoru