Gurzi Posted August 1, 2006 at 11:27 PM Report #41607 Posted August 1, 2006 at 11:27 PM Bem malta estou a dar em louco com uma cena.. È uma agenda utilizando ficheiros, mas o livro está nesta parte muito complexo, vocês vao ver que ele tem as register_global off mas isso eu dou conta.. agora nao percebo é a cena do $offset no campo hidden.. Por exemplo se eu carregar "Procurar" ele vai por $offset = 0 ; sim mas o que isto adianta ? para que serve isto no hidden ? no livro diz :"Notice how $offset is used to track the current browsing position.. Because the two fields(name and email) stored in the file have fixed widths , the program logic is simple; if the field had varying widths , the logic would be significantly more complex mas nao entendo mesmo <html> <head> <title>Adress Book</title> <head> <body> <h2>Address Book Browser</h2> <form method="post" action="browser.php"> $offset -= 49; if($offset <0){ $offset = 0; $fh = fopen("abook.txt", "r"); if(!$fh) die("<br> failed to open the file"); fseek($fh,$offset, SEEK_SET); $name = fread($fh, 24); $email = fread($fh, 24); fclose($fh);} elseif(isset($right)) { $offset += 49; if($offset < 0) $offset = 0; $fh = fopen("abook.txt", "r"); if(!$fh) die("<br>Failed to open the file"); fseek($fh, $offset, SEEK_SET); $name= fread($fh, 24); $email = fread($fh, 24); } elseif(isset($search)) { $offset = 0; $pattern = $name; $name = ""; $email = ""; $fh = fopen("abook.txt", "r"); if(!$fh) die("<br>failed to open the file"); fseek($fh, $offset, SEEK_SET); $s = fgets($fh, 256); while(feof($fh)) { $file_name= fread($fh, 24); $file_email = fread($fh, 24); $match = stristr($file_name, $pattern); if($match !== false ) break; $offset += 49; } fclose($fh); $offset +=49; $name = $file_name; $email = $file_email; } elseif(isset($add)) { $name = str_pad($name, 24); $email = str_pad($email, 24); $fh = fopen("abook.txt", "a"); if(!$fh) die("<br>Failed to open file"); fwrite($fh, $name); fwrite($fh, $email); fwrite($fh, "\n"); $offset = ftell($fh) - 49; fclose($fh); } $name= trim($name); $email = trim($email); <br>Name: <br><input type="text" name="name" echo "Value=\"$name\""> <br> <br>Email Adress: <br><input type="text" name="email" echo "Value=\"$email\""> <br> <br> <input type="submit" name="search" value="search"> <input type="submit" name="left" value="<"> <input type="submit" name="right" value=">"> <input type="submit" name="add" value="ADD"> <input type="hidden" name="offset" echo " Value=\"$offset\""> </form> </body> </html>
Guest id194 Posted August 2, 2006 at 12:37 AM Report #41618 Posted August 2, 2006 at 12:37 AM n sei se tou a perceber o problema aqui... mas quanto a tua pergunta... ele simplesmente esta a passar como argumento do POST o valor do offset. sempre que submetes o formulario, o offset pode vir a ter um valor diferente do anterior, logo é usado um campo hidden (pk n nos interessa nada ver tal informação no ecra mas precisamos dela) para o valor ser passado pelo POST como se tratasse de um campo normal... ms se a constante register_globals esta off, isso n deve funcionar la mt bem, tudo que é $offset, devia ser $_POST['offset'], ms isso já deves saber...
Gurzi Posted August 2, 2006 at 01:42 AM Author Report #41624 Posted August 2, 2006 at 01:42 AM Obrigado, já estou a começar a ganhar mais vontade de tentar perceber o que faz o offset ali , whatever.. agora outra dúvida.. $name = str_pad($name, 24); $email = str_pad($email, 24); porque é se deixa sempre um espaço a seguir á virgula ? (style ???) ok depois a duvida é.. fwrite($fh, $name); fwrite($fh, $email); isto não vai ficar tudo junto ? tipo : tiagoxka@pap.pt em vez de tiago xka@pap.pt ?
Guest id194 Posted August 2, 2006 at 11:11 AM Report #41677 Posted August 2, 2006 at 11:11 AM 1) tanto faz, com espaço ou sem espaço funciona mesma forma. é uma questão de estetica, faz como gostas mais. 2) yep, ms pa contornar isso faz algp como fwrite($fh, $name." "); e já tá.
Gurzi Posted August 2, 2006 at 11:15 AM Author Report #41679 Posted August 2, 2006 at 11:15 AM ok , agora , se eu carregar em adicionar ele faz $offset = ftell($fh) - 49; ora... isto depois do $name = str_pad($name, 24); $email = str_pad($email, 24); Com o caracter que muda de linha , 24 + 24 +1 = 49... Porque é que não ponho logo $offset = 0 ; ?
Gurzi Posted August 3, 2006 at 01:02 AM Author Report #41861 Posted August 3, 2006 at 01:02 AM Estou com um problema, quero que quando faça registos o gajo mude de linha no .txt mas não consigo, já usei o "\n" e aparece o caracter dele no txt mas o texto não aparece na linha de baixo como eu queria... já tentei com o fseek($handle, 0 , SEEK_END); também não resultou.. Pede-se Ajuda pff.. snippet : if(isset($_POST['Adicionar'])) { $handle = @fopen($file, "a+") OR die("Failed to open the file " . $file . "\n"); $nome = $_POST['Nome']; $email = $_POST['Email']; @fwrite($handle, $nome . "|-|"); @fwrite($handle, $email ); @fwrite($handle, "\n"); }
kingless Posted August 3, 2006 at 01:11 AM Report #41863 Posted August 3, 2006 at 01:11 AM Tenta assim if(isset($_POST['Adicionar'])) { $handle = @fopen($file, "ab+") OR die("Failed to open the file " . $file); $nome = $_POST['Nome']; $email = $_POST['Email']; $gravar = $nome ."|-|". $email; @fwrite($handle, "$gravar\r\n"); @fclose( $handle ); }
Gurzi Posted August 3, 2006 at 01:29 AM Author Report #41864 Posted August 3, 2006 at 01:29 AM O que é \r e o ab+ ?? desconheço o b Já funciona, obrigado, mas podes explicar isso do \r e do ab+ ? o a eu sei o que é nem percebo porque é que o outro não dava :@
kingless Posted August 3, 2006 at 01:36 AM Report #41867 Posted August 3, 2006 at 01:36 AM O b é para ser compativel com o windows e \r\n é para fazer nova linha no windows. O \r é retorno de carro, eu também não sei muito bem para que serve, mas utiliza-se muito para criar nova linha no windows.
Gurzi Posted August 3, 2006 at 01:39 AM Author Report #41868 Posted August 3, 2006 at 01:39 AM Obrigado 🙂 se alguem souber explicar melhor a cena do \r , agradecia, valeu a ajuda, kingless, um abraço 😛 edit : Ao que parece \r é return e o .txt "is a plane text" e usa o \r e não o \n(newline)
HecKel Posted August 3, 2006 at 02:50 AM Report #41870 Posted August 3, 2006 at 02:50 AM Sobre o \r, acho que isto ajuda 😛 Mas este para o teu caso deve ser ouro sobre azul 🙂 \r é o carriage return enquanto que o \n é o line feed (ou newline) Em sistemas unix basta o \n no entanto windows e MacOS já requer o \r para meter no inicio da nova linha visto que o \n apenas cria essa mesma nova linha. Espero que dê para perceber 🙂 abraços, HecKel Look Left Blog
Gurzi Posted August 3, 2006 at 10:17 AM Author Report #41901 Posted August 3, 2006 at 10:17 AM Obrigado, Heckel 🙂 É por estas e por outras que quero mudar rapidamente para LINUX 😛
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now