Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Vypsání jedné hodnoty z CSV souboru pomocí PHP scriptu.

Ahojte, narazil jsem na novinku v PHP (pro mě je to novinka), jde o práci ze souborem CSV. Mám tedy soubor data.csv První sloupec je třeba ID, druhý je název a třetí je cena.

1002;Model1;233
1003;Model1;323
1004;Model1;546
1005;Model1;988
1006;Model1;754

Dále mám script, který mi udělá pěknou tabulku s daty:

<table>
<tr><td>ID kód</td><td>Název produktu</td><td>Množství (ks)</td><td>Cena</td></tr>
<?php

	$nazev_souboru="data/data.csv";

	if (file_exists($nazev_souboru)) { 
		$soubor=fopen($nazev_souboru, "r");
		if($soubor){
		   			while (!feof($soubor)){
						$radek = fgets($soubor,5000); 					
					  $radek = str_replace(";","</td><td>",$radek);
						print("<tr><td>".$radek."</td></tr>");
				                          }
		           }
  else {print("Soubor ".$nazev_souboru." se nepodařilo otevřít pro čtení.");}
                                   } 
  else {print("Soubor ".$nazev_souboru." neexistuje.");}


?>
</table>

Já bych chtěl poradit, jak udělám script, ve kterém zadám na tvrdo ID hodnotu (nebo proměnou z formuláře) s kterou mi to porovná řádky (sloupce) v CSV souboru a při shodě vypíše třeba cenu natvrdo zadaného ID?

Předmět Autor Datum
Velice jednoduse: pred print("...$radek..) das if (zvolene id=zacatek retezce) a v tom printu samotn…
gilhad 09.05.2014 04:08
gilhad
Nechápu, kde u druhého středníku?
kubakubila 14.05.2014 21:28
kubakubila
$expl_radek=explode(";",$radek); if ($ID_natvrdo==$expl_radek[0]) { print($expl_radek[2]); }…
hynajs 09.05.2014 07:44
hynajs
Nějak nefunguje, nevím co dát do hranaté závorky místo nuly?
kubakubila 14.05.2014 21:28
kubakubila
A zkoušíš na ten script odeslat nějaké ID?
Kráťa 17.05.2014 08:30
Kráťa
$expl_radek=explode(";",$radek); for ($i = 0; i < count($expl_radek); $i=$i+3) { if ($ID_natvrdo==$e…
wam_Spider007 14.05.2014 22:06
wam_Spider007
Tak jsem se díval a zkoušel. Pořád furt nechápu ty čísla. Teď mám kód: <?php $nazov_suboru = "data.…
kubakubila 16.05.2014 22:38
kubakubila
Zkoušel jsem i použít funkci explode: <?php // načtení dat do pole $pole = file('data.csv'); for($i…
kubakubila 16.05.2014 22:47
kubakubila
ok, robil som to len z hlavy, takze je tam kopec chyb :D. Teraz som si to urobil nacisto na notase a…
wam_Spider007 17.05.2014 11:22
wam_Spider007
Supeeeeer, díky moc. Teď už to chápu. S tím se dá pěkně pracovat. Díky moc. (zámek) poslední
kubakubila 19.05.2014 20:57
kubakubila
$expl_radek=explode(";",$radek);

for ($i = 0; i < count($expl_radek); $i=$i+3) {
if ($ID_natvrdo==$expl_radek[$i]) {
 print($expl_radek[$i+2]);
}
}

ale radsej si pozri nieco o tomto: function.fgetcsv.php

potom mozes urobit:

$handle = fopen($nazov_suboru, "r");
$csv = fgetcsv($handle,  3, ';');
foreach ($csv as $riadok) {
if ($ID_natvrdo==$riadok[0]) {
 print($riadok[2]);
}
}

Tak jsem se díval a zkoušel. Pořád furt nechápu ty čísla. Teď mám kód:

<?php 
$nazov_suboru = "data.csv";
$ID_natvrdo = "3004";

$handle = fopen($nazov_suboru, "r");
$csv = fgetcsv($handle,  3, ';');
foreach ($csv as $riadok) {
if ($ID_natvrdo==$riadok[0]) {
 print($riadok[2]);
}
}

?> 
$csv = fgetcsv($handle,  3, ';');

Ta trojka znamená počet polí (sloupců)? Tady se to počítá jako 1, 2, 3?

if ($ID_natvrdo==$riadok[0]) {
 print($riadok[2]);

A tady se to počítá zase 0, 1, 2?

Protože mi to nefunguje, jsem na freehostingu IC, nemůže být problém v tom?

Zkoušel jsem i použít funkci explode:

<?php
// načtení dat do pole
$pole = file('data.csv');
for($i=0;$i<Count($pole);$i++) {
$pole[$i] = explode(';', $radky[$i]);
}
// vykreslení tabulky
echo('<table>');
for($i=0;$i<Count($pole);$i++) {
echo('<tr>');
for($j=0;$j<Count($pole[$i]);$j++) {
echo('<td>' . $pole[$i][$j] . '</td>');
}
echo('</tr>');
}
echo('</table>');
?>

Taky nic nezobrazí.

ok, robil som to len z hlavy, takze je tam kopec chyb :D. Teraz som si to urobil nacisto na notase a kod je asi takyto:

<?php
	$handle = fopen('model.csv', 'r');
	
	$id_natvrdo = 1004;
	
	while ($csv = fgetcsv($handle, 0, ';')) {
		if ($csv[0] == $id_natvrdo) {
			echo $csv[2];
			break;
		}
	}
?>

najprv otvorim subor s csv. Potom si nastavim to tvoje ID napriklad na 1004. Nasledne cez while prechadzam funkciou fgetcsv po jednotlivych riadkoch suboru. Kedze vieme, ze kazdy riadok CSV suboru obsahuje 3 hodnoty, tak viem, ze na indexe 0 je ID, na indexe 1 je nazov a na indexe 2 je cena.
V cykle uz len checkujem podmienkou IF, ci sa na indexe 0 nenachadza ID_natvrdo. Ked ano, tak vypisem hodnotu z indexu 2 (cize cenu).

a prikladam ti aj kod, ktorym to CSV vypises ako HTML tabulku. Myslim, ze toto je elegantnejsie ako to co mas ty:

<table border="1">
	<tr>
		<th>ID</th>
		<th>Nazov</th>
		<th>Cena</th>
	</tr>
<?php
	$handle = fopen('model.csv', 'r');
	
	while ($csv = fgetcsv($handle, 0, ';')) { ?>
		<tr>
			<td><?php echo $csv[0]; ?></td>
			<td><?php echo $csv[1]; ?></td>
			<td><?php echo $csv[2]; ?></td>
		</tr>
	<?php
	}
?>
</table>

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