Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ja tekstitiedostojen luonti

Sivun loppuun

somero [11.03.2011 19:59:16]

#

Nyt probleemana seuraavanalinen hassuttelu. Eli käyttäjä kirjoittaa luvun input laatikkoon ja seuraava sivu luo input laatikoita halutun määrän. Seuraavaksi tahtoisin, että ohjelma luo tiedostot input laatikoiden nimen perusteella, mutta lopputuloksena on se, että ohjelma luo vain viimeisen input laatikon nimen perusteella yhden tiedoston. Ohessa koodit:

1.php

<form action="2.php" method="get">
Määrä: <input type="text" name="maara" />
<input type="submit" />
</form>

2.php

<form action="3.php" method="get">

<?php
$luku = $_GET["maara"];
$tuloste = 0;

while ($tuloste < $luku) {
 echo "<br><input name=SIVU>Tekstitiedoston nimi</input></ br>";
 $tuloste += "1";
}

?><br><br>

<input type="submit" />
</form>

3.php

<?php
$sivut = $_GET["SIVU"];
$luonti = fopen($sivut.".txt", "a+");
$as = 0;

while ($as < $luku); {
 echo "$luonti";
 $as =+ 1;
}
?>

Olen myös miettinyt, että kannattaisiko tulostaa 2.php:n nimet tekstitiedostoon josta 3.php lukea ne yksitellen ja luoda tiedostot niiden mukaan.

Veini [11.03.2011 20:23:06]

#

Ongelmia näyttäisivät olevan ainakin nämä:

Ensiksi, tiedostossa 2.php tulostetaan tekstilaatikkoja, joille kaikille annetaan nimeksi "NIMI". Se ei oikein tunnu toimivalta, kun vain viimeisen tekstilaatikon sisältö voidaan tällöin hakea GET-metodilla.

Toiseksi ongelmaksi huomasin sen että tiedostossa 3.php luodaan vain yksi tekstitiedosto, eikä while-silmukasta ole oikeastaan hyötyä.

Sitten olisi vielä se että tiedostossa 3.php haetaan vain yksi tieto GET-metodilla.

makumaku [11.03.2011 21:19:02]

#

Aloita vaikka siitä että tiedostossa 3.php on muuttuja $luonti jota ei käytetä mihinkään , ja muuttuja $luku jota ei ole alustettu missään.

somero [11.03.2011 22:28:23]

#

<?php
$luku = 3;
$as = 0;


while ($as < $luku) {
 $sivut = $_GET["SIVU"."$as"];
 fopen($sivut.'.txt', 'a+');
 $as += "1";
}

echo "$luku";

?>

Sain toimimaan tuolla tavalla, mutta nyt vain tuon luvun pitäisi saada vaihdettua. Millä keinolla kannattaisi lähteä poimimaan osoiterivin viimeistä ja suurinta numeroa?

Metabolix [11.03.2011 23:08:59]

#

Vastaan nyt vain kysymykseesi ottamatta kantaa siihen, miten huonosti ja väärin olet koko hommaa tekemässä.

preg_match_all("/\\d+/", $_SERVER["REQUEST_URI"], $osumat);
$luvut = array_map("intval", $osumat[0]);
$viimeinen = end($luvut);
$suurin = max($luvut);

somero [12.03.2011 08:33:59]

#

ota kantaa vain :)

esajeejee [12.03.2011 22:25:26]

#

Tee mielummin javascriptillä, 100x helpompaa nopeampaa ja säästää bandwidthia. Esimerkiks:

<form method="POST" id="jee" action="joku.php" onsubmit="validate.call( this );">
Tiedoston 1 nimi:<input type="text" name="filu1" /><br />

<input type="submit" name="submitti" value="luo tiedostot" />
<input type="button" value="lisää tiedosto" onclick="moarfiles.call( this.form )" />
</form>
var filecount = 1;

function moarfiles(){
filecount++;

var
filu = document.createElement( "input" ),
texti = document.createTextNode( "Tiedoston " + filecount + " nimi:" ),
br = document.createElement( "br" ),
uusi = document.createDocumentFragment();

filu.setAttribute( "name", "filu"+filecount );
filu.setAttribute( "type", "text" );
uusi.appendChild( texti );
uusi.appendChild( filu );
uusi.appendChild( br );

this.submitti.parentNode.insertBefore( uusi, this.submitti );

}

somero [13.03.2011 14:12:26]

#

esajeejee: thänksit javascript ideasta. tesmailen tuon toimivuutta. minulla on silti edelleen ongelmana tuon <input määrien lähettäminen seuraavaan php tiedostoon, jossa ajattelin luoda silmukan joka loisi nuo filet.

The Alchemist [13.03.2011 14:33:47]

#

somero kirjoitti:

esajeejee: thänksit javascript ideasta. tesmailen tuon toimivuutta. minulla on silti edelleen ongelmana tuon <input määrien lähettäminen seuraavaan php tiedostoon, jossa ajattelin luoda silmukan joka loisi nuo filet.

Ihan normaalisti käytät get/post-muuttujia kuten kaikkien muidenkin formin tietojen kanssa. HTML:ssä on sitä varten hidden-tyyppinen inputti.

esajeejee [13.03.2011 21:21:03]

#

somero kirjoitti:

esajeejee: thänksit javascript ideasta. tesmailen tuon toimivuutta. minulla on silti edelleen ongelmana tuon <input määrien lähettäminen seuraavaan php tiedostoon, jossa ajattelin luoda silmukan joka loisi nuo filet.

Jos käytät tuota javascript formia niin ne tulee POST parametreissa näin

filu1=jeejee.txt&filu2=auto.txt&filu3=jsss.txt .... &filuN=asda.txt

niin paljon ku tiedostoja tuli

function validFileName( $str ) {
return true; //Hyväksyy kaikki tiedostonimet
}

if ( $_POST['filu1'] ) {
$c = 1;
$m = 0;
$output = "";
	foreach ( $_POST as $key => $val ) {

		if( stripos ( $key, "filu" ) === false ) { continue; }

		if ( validFileName( $_POST[ 'filu'.$c ] ) ) {
		// Luontikoodia tähän;
		$output .= "Luotiin tiedosto nimellä $val\n";
		$m++;
		}
	$c++;
	}
$luonti = "Luotiin yhteensä ";
$luonti .= $m == 1 ? "1 tiedosto:\n\n" : $m ." tiedostoa\n\n";
echo $luonti.$output;
}
else {
exit(); //Tiedostonimiä ei löytynyt
}

En jaksa ajaa tuota koodia joten saattaa olla syntaksivirheitä

Metabolix [13.03.2011 21:22:35]

#

Asiaa auttaisi, jos kertoisit kunnolla, mitä on tarkoitus saada tehtyä. Nykyisellään homma vaikuttaa siltä, ettei sitä luultavasti kannattaisi tehdä ollenkaan.

somero [13.03.2011 22:12:40]

#

Sain duunattua homman toimimaan tässä päivän aikana. Metabolix on aina yhtä ihana kaikkia kohtaan ;)

EDIT: Thänksit kaikille vastanneille! Arvon marjapiirakan kaikkien kesken.

Metabolix [14.03.2011 15:20:16]

#

somero kirjoitti:

Metabolix on aina yhtä ihana kaikkia kohtaan ;)

Enkö olekin? :) Mutta ei kyseessä ollut nyt mikään piikki, vaan ihan oikeasti en keksi yhtään järkevää käyttötarkoitusta koodillesi tai ainakaan tuolle toteutustavalle.

Jos perimmäinen tavoite on luoda tyhjiä tiedostoja käyttäjän antamilla nimillä, eikö olisi helpointa joko syöttää jokainen nimi erikseen, lähettää lomake enteristä ja päästä automaattisesti takaisin lomakkeeseen tai kirjoittaa ne tiedostonimet yhteen textareaan omille riveilleen?

<?php
// Jos lomake lähetettiin, luodaan tiedosto.
if (!empty($_POST["nimi"])) {
  $html = htmlspecialchars($_POST["nimi"]);
  if (file_exists($_POST["nimi"])) {
    echo "<p>Tiedosto {$html} on jo olemassa!</p>";
  } elseif (touch($_POST["nimi"])) {
    echo "<p>Luotiin {$html}.</p>";
  } else {
    echo "<p>Virhe tiedoston {$html} luonnissa!</p>";
  }
}
// Tulostetaan lomake. Lopussa valitaan JS:llä valmiiksi tekstilaatikko.
?>
<form action="" method="post">
  <p>
    Anna tiedostonimi:
    <input type="text" name="nimi" id="nimi" />
    <button type="submit">Luo!</button>
  </p>
</form>
<script type="text/javascript">
  document.getElementById("nimi").focus();
</script>
<?php
// Poimitaan preg_matchilla tiedostonimet.
if (preg_match_all('/^\\s*(\\S.*?)\\s*$/m', @$_POST["nimet"], $nimet)) {
  // Luodaan listatut tiedostot.
  foreach ($nimet[1] as $nimi) {
    $html = htmlspecialchars($nimi);
    if (file_exists($nimi)) {
      echo "<p>Tiedosto {$html} on jo olemassa!</p>";
    } elseif (touch($nimi)) {
      echo "<p>Luotiin {$html}.</p>";
    } else {
      echo "<p>Virhe tiedoston {$html} luonnissa!</p>";
    }
  }
}
// Tulostetaan lomake.
?>
<form action="" method="post">
  <p>Kirjoita tiedostonimet seuraavaan laatikkoon eri riveille.</p>
  <p><textarea name="nimet" rows="10" cols="60"></textarea></p>
  <p><button type="submit">Luo!</button></p>
</form>

somero [14.03.2011 16:10:51]

#

Tein tällaisen testimielessä tutkiakseni millä tavalla php:ssä kannattaa tehdä tällainen aivoton räpellys :)

qeijo [16.03.2011 17:48:49]

#

hei kaikki. jquery, ilman sivulatausta. ;)

//syota.html
<script type="text/javascript"  src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

<table id="taulu">
<tr><td><input type="text" name="filut[]"></td></tr>
</table>

<p><img src="lisaarivinappi" id="uusirivi"></p>
<p><img src="siistitallennanappi.png" id="nappi"></p>

<script>
$("#uusirivi").click(function() {
$("#taulu").append("<tr><td><input type='text' id='filu' name='filut[]'></td></tr>");
});

$("#nappi").click(function() {
var filunimi = $("#filut").val();
$.post("tallenna.php", { filut: filut },
   function(data) {
     alert(data);
   }); });
</script>


//tallenna.php

<?php

$filut = $_REQUEST[filut];

foreach($filut as $filu)
{
luofilu(tarkista_nimi($filu)); //esim..
}

//Jotain palautetta vois syota.html:lle lähettää..

?>

Ei ole testattu.. Mutta näyttää ihan toimivalta. ;)

Huom! tallenna.php:lle täytyy kertoa erikseen charsetti.

Mizou [16.03.2011 18:20:29]

#

Käytäppä kooditageja niin olisi helpompi lukea koodiasi ja huomaisit itsekkin kirjoitusvirheet kuten fucntion (siis käytettäessä kooditagia joka tukee käyttämääsi kieltä syntaksin värityksellä). Lisäksi toisten nimimerkkien tahallinen väärinkirjoittaminen ei yleensä ole hauskaa...

somero [16.03.2011 18:39:29]

#

Tässä sivuan nyt aika kaukaa keskustelua, mutta aloitan uuden topicin jos ei selvyyttä löydy:

Minun tulisi tehdä e-mail formi, jossa on noin 150 eri kysymystä ja ne lähetetään eteenpäin. Olisiko jotain valmista softaa jolla duunata nuo vai teenkö kaiken alusta alkaen itse?

qeijo [16.03.2011 19:21:05]

#

Mizou kirjoitti:

Käytäppä kooditageja niin olisi helpompi lukea koodiasi ja huomaisit itsekkin kirjoitusvirheet kuten fucntion (siis käytettäessä kooditagia joka tukee käyttämääsi kieltä syntaksin värityksellä). Lisäksi toisten nimimerkkien tahallinen väärinkirjoittaminen ei yleensä ole hauskaa...

Sori. En osannut käyttää noita tageja. Mut aina oppii jotain uutta. :)

The Alchemist [17.03.2011 06:55:36]

#

somero kirjoitti:

Tässä sivuan nyt aika kaukaa keskustelua, mutta aloitan uuden topicin jos ei selvyyttä löydy:

Minun tulisi tehdä e-mail formi, jossa on noin 150 eri kysymystä ja ne lähetetään eteenpäin. Olisiko jotain valmista softaa jolla duunata nuo vai teenkö kaiken alusta alkaen itse?

Eihän tuossa ole sinällään mitään ihmeellistä. Laitat kysymykset vaikka arrayhyn ja tulostat ne silmukalla.

somero [17.03.2011 11:01:42]

#

Thänksit alchemist :)

qeijo [19.03.2011 12:25:22]

#

<?php
header('Content-Type: text/html; charset=utf-8');


//Kysymykset..
$kysymykset = array("Kuka olet?","Kuinka vanha olet?","Minkä väriset hiukset sulla on?");

//Postitus osa..
if(isset($_POST[tallenna])) {

        $vastausket = $_POST[kysymys];
        foreach($vastausket as $id => $vastaus) {
                $tulos .= $kysymykset[$id].": ".addslashes(strip_tags($vastaus))."\n";
        }

$h = 'Content-type: text/html; charset=utf-8' . "\r\n";

if(@mail('vastaanottaja@domain.fi', 'Vastaus kyselyyn', $tulos, $h)) {
print("<script>alert('Vastausket postitettu, kiitos osallistumisesta.');</script><a href='jonnekkin.php'>Takaisin</a>");  }

else { print("<script>alert('Vastauksia ei voitu lähettää, yritä myöhemmin uudelleen.');</script>"); }

}


//Kysymys taulu..
else
{
print('<form action="" method="POST"><table>');

foreach($kysymykset as $kysymys) {
print('<tr><td style="padding-right: 25px;">'.$kysymys.'</td><td><input value="" type="text" name="kysymys[]"></td></tr>'); }

print('</table><p><input name="tallenna" type="submit" value="Lähetä vastaukset"></p></form>');
}
?>

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta