• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sonda php-działanie na plikach

Object Storage Arubacloud
0 głosów
353 wizyt
pytanie zadane 20 maja 2017 w PHP przez marcinconn Obywatel (1,560 p.)

Mógłby mi ktoś powiedzieć jak mam poprawić kod, żeby sonda działała? tj. zapisywało mi do pliku wyniki(każdy w osobnej linii) i wyświetlało je obok miejsc na nie przeznaczonych.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
 <form action="wyniki.php" method="post">
 <fieldset>
 Co robi wróbel na gałęzi?<br/>
 <label><input type="radio" name="opcja" value="siedzi"/>Siedzi</label><br/>
 <label><input type="radio" name="opcja"value="kuca"/>Kuca</label><br/>
 <label><input type="radio" name="opcja" value="patrzy"/>Patrzy na wszystkich z góry</label><br/>
 <input type="submit" value="wyślij">
 </fieldset>
 </form>
</body>
</html>

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body> 
 <?php
        $file1 = fopen("wyniki.txt", "r") or die("Unable to open file!");
        $siedzi=fgets($file1);
        $kuca=fgets($file1);
        $patrzy=fgets($file1);
        fclose($file1);
        switch($_POST['opcja'])
        {
        case "siedzi":
                $siedzi++;
                break;
        case "kuca":
                $kuca++;
                break;
        case "patrzy":
                $patrzy++;
                break;
        }
        $file2 = fopen("wyniki.txt", "w+") or die("Unable to open file!");
        fwrite($file2, $siedzi);
        fwrite($file2, "\n");
        fwrite($file2, $kuca);
        fwrite($file2, "\n");
        fwrite($file2, $patrzy);
        fwrite($file2, "\n");
        fclose($file2);
        $handle=fopen("wyniki.txt","r");
         echo "Wyniki sondy: <br/>";
         echo "Siedzi: "; $Linia1=fgets($handle);
         echo "<br/>";
         echo "Kuca: "; $Linia2=fgets($handle);
         echo "<br/>";
         echo "Patrzy na wszystkich z góry: "; $Linia3=fgets($handle);
         echo "<br/>";
         fclose($handle);
 ?>
 </body>
</html>

 

1 odpowiedź

0 głosów
odpowiedź 20 maja 2017 przez Chess Szeryf (76,710 p.)
wybrane 20 maja 2017 przez marcinconn
 
Najlepsza

Użyj do tego trybu: a lub a+. Jeśli korzystałbyś z file_get_contents to powienieneś użyć stałej o nazwie FILE_APPEND.

Append - (ang. - dopisz).

$handle = fopen("/home/rasmus/file.txt", "a+");

 

komentarz 20 maja 2017 przez Chess Szeryf (76,710 p.)

Dodaj tę linię:

file_put_contents('result.txt',file_get_contents('wyniki.txt').PHP_EOL .file_get_contents('wyniki2.txt').PHP_EOL);

Jeśli chciałbyś to mieć na switchu, to wyglądałoby to mniej więcej tak:

switch($_POST['opcja']) { 
	 case 'siedzi': 
	 $zmienna = file_get_contents('wyniki.txt');
	 $zmienna++;
	 file_put_contents('wyniki.txt',$zmienna++);
	 break;
     case 'kuca':
     $zmienna = file_get_contents('wyniki2.txt');
     // (...) i tak dalej, aż do break; }

 

komentarz 20 maja 2017 przez marcinconn Obywatel (1,560 p.)
da się to zrobić w jednym pliku?
komentarz 20 maja 2017 przez Chess Szeryf (76,710 p.)
<?php
clearstatcache();
session_start();
switch($_POST['opcja']) { 
	 case 'siedzi': 
	 $_SESSION['count']++;
	 print_r($_SESSION['count']);
	 break;
	 
	 case 'kuca': 
	 $_SESSION['count2']++;
	 print_r($_SESSION['count2']);
	 break;
	  
	 case 'patrzy': 
	 $_SESSION['count3']++;
	 print_r($_SESSION['count3']);
	 break;
}
 
file_put_contents('wyniki.txt',$_SESSION['count'].PHP_EOL.$_SESSION['count2'].PHP_EOL.$_SESSION['count3'].PHP_EOL);
?>

Można sesjami np., ale nie wiem, czy dałoby radę innym sposobem.

komentarz 20 maja 2017 przez marcinconn Obywatel (1,560 p.)
dałoby się technicznie zrobić zczytywanie file_get_contents(), potem to explode do tablicy, inkrementować co trzeba i przywrócić 3 linijki z tej tablicy? do 3 linijek?
komentarz 20 maja 2017 przez Chess Szeryf (76,710 p.)
edycja 21 maja 2017 przez Chess

Try this:

<?php
clearstatcache();
session_start();

switch($_POST['opcja']) { 
	 case 'siedzi': 
	 $_SESSION['count']++; 
	 break;
	 
	 case 'kuca': 
	 $_SESSION['count2']++;
	 break;
	  
	 case 'patrzy': 
	 $_SESSION['count3']++;
	 break;
}
 
file_put_contents('wyniki.txt',$_SESSION['count'].PHP_EOL.$_SESSION['count2'].PHP_EOL.$_SESSION['count3'].PHP_EOL);
 
$x=(file('wyniki.txt'));
echo "Siedzi: ".$x[0].'<br />';
echo "Kuca: ".$x[1].'<br />';
echo "Patrzy: ".$x[2].'<br />';
?>

$x to zmienna, tablicę zwraca file. Clearstatcache czyści zbuforowane informacje.

Przetestuj to:

<?php
clearstatcache();
session_start();

$_POST['opcja'] = isset($_POST['opcja']) ? $_POST['opcja'] : ""; 

for($i=1;$i<=3;$i++) {
	if (!isset($_SESSION["count$i"])) {
	  $_SESSION["count$i"] = 0;
	}  
}

switch($_POST['opcja']) { 
	 case 'siedzi':  
	 $_SESSION['count1']++; 
	 break;
	 
	 case 'kuca': 
	 $_SESSION['count2']++;
	 break;
	  
	 case 'patrzy': 
	 $_SESSION['count3']++;
	 break;
}
for($i=1;$i<=3;$i++){ 
	$arr[] = $_SESSION["count$i"].PHP_EOL;
}
 
file_put_contents('wyniki.txt',$arr[0].$arr[1].$arr[2]);
 
 
echo "Siedzi: ".$arr[0].'<br />';
echo "Kuca: ".$arr[1].'<br />';
echo "Patrzy: ".$arr[2].'<br />';

   //$_SESSION=array();
 //session_destroy();
?>
<?php
session_start();
clearstatcache();
$_POST['opcja'] = isset($_POST['opcja']) ? $_POST['opcja'] : ""; 

switch($_POST['opcja']) { 
	 case 'siedzi':  
	 $_SESSION['count0']++; 
	 break;
	 
	 case 'kuca': 
	 $_SESSION['count1']++;
	 break;
	  
	 case 'patrzy': 
	 $_SESSION['count2']++;
	 break;
}

for($i=0;$i<=2;$i++){ 
	if (!isset($_SESSION["count$i"])) {
	  $_SESSION["count$i"] = 0;
	}  

	$arr[] = $_SESSION["count$i"].PHP_EOL;
	 
	file_put_contents('wyniki.txt',$arr[$i]);
}

$numbering = ($arr[0]+$arr[1]+$arr[2]);
//echo $numbering.'<br />';

if($arr[0] ==0) {
	echo null;
}else{
	$red = ($arr[0]*100)/$numbering;
	$r1=round($red,4);

	$red2 = ($arr[1]*100)/$numbering;
	$r2=round($red2,4);
	 
	$red3 = ($arr[2]*100)/$numbering;
	$r3 = round($red3,4);

	//echo ($r1+$r2+$r3);
}
 

 //$_SESSION=array();
 //session_destroy();
?>
Siedzi: <?php echo $arr[0];?><div style="background:red;height:10px;width:<?php echo $r1*10;?>px"></div> 
Kuca: <?php echo $arr[1];?>  <div style="background:red;height:10px;width:<?php echo $r2*10;?>px"></div> 
Patrzy: <?php echo $arr[2];?>  <div style="background:red;height:10px;width:<?php echo $r3*10;?>px"></div> 

PHP:

<?php
session_start();
clearstatcache();
$_POST['opcja'] = isset($_POST['opcja']) ? $_POST['opcja'] : ""; 

$handle = fopen('wyniki.txt','w');

switch($_POST['opcja']) { 
	 case 'siedzi':  
	 $_SESSION['count0']++; 
	 break;
	 
	 case 'kuca': 
	 $_SESSION['count1']++;
	 break;
	  
	 case 'patrzy': 
	 $_SESSION['count2']++;
	 break;
}

for($i=0;$i<=2;$i++){ 
	
	if (!isset($_SESSION["count$i"])) {
		$_SESSION["count$i"] = 0;
	} 
	 
	$arr[] = $_SESSION["count$i"].PHP_EOL;
	fwrite($handle, $arr[$i]); 
}
 
$numbering = ($arr[0]+$arr[1]+$arr[2]);
//echo $numbering.'<br />';

if($arr[0] > 0 || $arr[1] > 0 || $arr[2]> 0 ) { 
	$red = ($arr[0]*100)/$numbering;
	$r1[]=round($red,4);
 
	$red2 = ($arr[1]*100)/$numbering;
	$r2[]=round($red2,4);
	 
	$red3 = ($arr[2]*100)/$numbering;
	$r3[] = round($red3,4);

	//echo ($r1+$r2+$r3);
	//print_r($r1);
	 
	$rx1=($r1[0]*10);
	$rx2=($r2[0]*10);
	$rx3=($r3[0]*10);
	if(max($rx1,$rx2,$rx3)>600){
		$max_value = 600;
	}else{ 
		$max_value = 'none';
	}
	//$rx1 =  (($arr[0]==0) ? $r1[0]+0 : $r1[0]*10);
	echo "Siedzi: ".$arr[0]."<div style=\"background:yellow;height:20px;width:{$rx1}px;max-width:{$max_value}px\"></div>";
	echo "Kuca: ".$arr[1]."<div style=\"background:yellow;height:20px;width:{$rx2}px;max-width:{$max_value}px\"></div>";
	echo "Patrzy: ".$arr[2]."<div style=\"background:yellow;height:20px;width:{$rx3}px;max-width:{$max_value}px\"></div>";
}else{ 
	 echo "Siedzi: ".$arr[0].'<br />';
	 echo "Kuca: ".$arr[1].'<br />';
	 echo "Patrzy: ".$arr[2].'<br />';
}

?>

CSS:

div{ 
	width:100px;
}

 

Podobne pytania

+1 głos
1 odpowiedź 131 wizyt
pytanie zadane 17 listopada 2020 w PHP przez CSSoup Mądrala (6,460 p.)
0 głosów
1 odpowiedź 253 wizyt
pytanie zadane 30 marca 2019 w PHP przez zerakot Obywatel (1,870 p.)
0 głosów
0 odpowiedzi 57 wizyt
pytanie zadane 18 stycznia 2019 w PHP przez Olek Szymański Użytkownik (920 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...