matriks87
(Matriks87)
16 Grudzień 2010 08:06
#1
Witam zacząłem naukę z PHP korzystam z książki PHP i MySQL i mam pewien problem mianowicie nie działa mi funkcja lub źle ją wpisuje wygląda ona tak
<?php
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$zamowienia = file("../../zamowienia.txt");
$ilosc_zamowien = count($zamowienia);
if ($ilosc_zamowien == 0)
{
echo '
Brak zamówień.
Proszę spróbować później.';
}
for ($i=0; $i < $ilosc_zamowien; $i++)
{
echo $zamowienia[$i].'
';
}
?>[/code]
jak powinna wyglądać ścieżka w file(), bo podejrzewam że ona zawiera błąd
w tej ścieżce zapisywane są wszystkie pliki :
C:\usr\krasnal\www\ja
taki błąd wyskakuje:
Warning: file(…/zamowienia.txt): failed to open stream: No such file or directory in c:\usr\krasnal\www\ja\zobaczzamowienia.php on line 5
adpawl
(adpawl)
16 Grudzień 2010 10:04
#2
jeżeli wszystkie pliki masz w katalogu C:\usr\krasnal\www\ ja , to ścieżka powinna wyglądać tak:
zamowienia.txt
a nie tak: …/…/zamowienia.txt
Bo w tej chwili pliku zamowienia.txt szuka 2 katalogi wyżej w strukturze, czyli w C:\usr\ krasnal
Grzechu98
(Grzegorz Wziatek)
16 Grudzień 2010 20:00
#4
$zamowienia = fopen("$DOCUMENT_ROOT zamowienia.txt","rb");
powinno pomóc, jeżeli dobrze zrozumiałem błąd
matriks87
(Matriks87)
17 Grudzień 2010 08:22
#5
wciąż t samo
Warning: fopen(c:/usr/apache/httpd/html/ zamowienia.txt): failed to open stream: No such file or directory in c:\usr\krasnal\www\ja\zobaczzamowienia.php on line 5
adpawl
(adpawl)
17 Grudzień 2010 11:08
#6
przetworzzamowienie.php masz skopane.
Co to jest?
-powinno być $_SERVER
Właściwie to DOCUMENT_ROOT nie jest tutaj do niczego potrzebny, wystarczy samo fopen(‘zamowienia.txt’, …
A jeżeli już, to nic dziwnego że komunikuje błędną ścieżkę skoro jest w niej spacja przed nazwą pliku.
Dalej, jeżeli coś wysyłasz, to potem przy odbieraniu sprawdź czy jakieś dane faktycznie zostały wysłane
np. przynajmniej coś w stylu
if(isset($_POST['submit'])){
//tutaj odbierasz zmienne itd.
}
else {
//tu coś robisz gdy nie ma oczekiwanych danych
}
Nie wygodniej było by tu wykorzystać file_get_contents i file_put_contents ?
Poza tym nie @ $wp, tylko @$wp
Ogólnie, kod bardzo nieprzemyślany.
matriks87
(Matriks87)
17 Grudzień 2010 17:20
#7
Nadmieniłem na początku że dopiero pierwsze kroki stawiam więc prosze o wyrozumiałość :razz:
tak było w książce chodziło o to żeby nie pisać cały czas $_POST[‘DOCUMENT_ROOT’]; tylko samo $DOCUMENT_ROOT
nie słyszałem jeszcze o takim czyms i nie wiem jak to stosować
Dalej, jeżeli coś wysyłasz, to potem przy odbieraniu sprawdź czy jakieś dane faktycznie zostały wysłane np. przynajmniej coś w stylu Kod: Zaznacz cały if(isset($_POST[‘submit’])){ //tutaj odbierasz zmienne itd. } else { //tu coś robisz gdy nie ma oczekiwanych danych }
spróbuje coś z tym pokombinować
zamieniałem:
$DOCUMENT_ROOT = $_POST['DOCUMENT_ROOT'];
na
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
oraz
@ $wp = fopen("$DOCUMENT_ROOT zamowienia.txt", 'ab');
na
$wp = fopen('zamowienia.txt', 'ab');
w przetworzzamowienie i w zobaczzamowienia:
$zamowienia = fopen("$DOCUMENT_ROOT zamowienia.txt","rb")
na
$zamowienia = fopen('zamowienia.txt',"rb");
i teraz nie ma żadnego błędu ale na stronie nic się nie wyświetla cała biała strona
matriks87
(Matriks87)
20 Grudzień 2010 06:41
#9
wywala mi błąd w przetworzzamowienia.php
Parse error: parse error in c:\usr\krasnal\www\ja\przetworzzamowienie.php on line 99
96 $fp=file_put_contents('zamowienia.txt', $ciagwyjsciowy, FILE_APPEND | LOCK_EX);
97 if($fp) echo '
Zamówienie zapisane.'; else echo '
Błąd zapisu.';
98 }
99 else echo '
Nie otrzymano danych z formularza';
i jeszcze pytanie czy ta klamra } na początku tej 99 musi być? co ona zamyka
próbowałem z tym i bez tego i nic
adpawl
(adpawl)
20 Grudzień 2010 10:54
#10
Coś chyba zmieniałeś, bo linijka $fp… u mnie ma nr 91, u ciebie 96.
Co do klamerek, to ta pod if($fp) jest od sprawdzenia czy plik istnieje - file_exists
natomiast ta z linijki 99 u ciebie - jest domknięciem warunku sprawdzającego czy wormularz został wysłany
if(isset($_POST['submit']))
Więc jeżeli coś zmieniałeś, to podaj cały kod a nie tylko fragment.
A tak na marginesie, krasnal od dawna nie jest już rozwijany. Przejdź lepiej na coś aktualniejszego np xampp, vertrigo, wamp (albo nieoficjalny pamp)
matriks87
(Matriks87)
20 Grudzień 2010 11:52
#11
a mógłbyś powiedzieć co dokładnie robi :
$fp=file_put_contents('zamowienia.txt', $ciagwyjsciowy, FILE_APPEND | LOCK_EX);
błąd miałem takie że nie miałem otwartej klamry przy
if(isset($_POST['submit']))
w tej chwili błędu nie wyrzuca ale wyświetla mi z 2 else że Nie otrzymano danych z formularza :?
adpawl
(adpawl)
20 Grudzień 2010 12:01
#12
linia ta dopisuje stringa $ciagwyjsciowy do pliku zamowienia.txt
parametr FILE_APPEND powoduje, że dane są dopisywane a nie nadpisywane
zaś LOCK_EX blokuje plik podczas zapisu
A czy w pliku index masz tak jak w kodzie jaki wkleiłem?
matriks87
(Matriks87)
20 Grudzień 2010 12:21
#13
no nie mailem już poprawiłem i z formularza wczytuje ale ciągle jest problem z zapisem teraz wychodzi
Fatal error: Call to undefined function: file_put_contents() in c:\usr\krasnal\www\ja\przetworzzamowienie.php on line 99
adpawl
(adpawl)
20 Grudzień 2010 12:49
#15
krasnal, więc stara 4.3.9 i 5.0.2
file_put_contents jest od wersji 5, więc trzeba by w krasnalu przełączyć na piątke
Chociaż można kombinować wracając do fopen+fwrite albo zastosować obejście w postaci upgradephp http://developer.berlios.de/project/sho … up_id=3997
Najlepiej jednak jak wcześniej wspominałem, zmienić starego krasnala na coś świeższego.
i tak byłby problem z flagą LOCK_EX bo według manuala doszła w 5.1.0
adpawl
(adpawl)
20 Grudzień 2010 15:08
#19
cayman3_11, bardzo możliwe - jednak wystarczyło by tę flagę usunąć. (oczywiście przy większej liczbie wywołań blokować już by wypadało)
Tak czy inaczej lepiej przejść na v5 niż męczyć na starej wersji.
Bak już się uczyć, to na bieżąco, a nie historii.
matriks87, pozostając na php4, można to było ruszyć bez żadnych modyfikacji korzystając z ww. upgradephp, albo jego tylko części
/**
* write-at-once file access (counterpart to file_get_contents)
*
* @param integer $filename
* @param mixed $content
* @param integer $flags
* @param mixed $resource
* @return integer
*/
if (!function_exists("file_put_contents")) {
function file_put_contents($filename, $content, $flags=0, $resource=NULL) {
#-- prepare
$mode = ($flags & FILE_APPEND ? "a" : "w" ) ."b";
$incl = $flags & FILE_USE_INCLUDE_PATH;
$length = strlen($content);
// $resource && trigger_error("EMULATED file_put_contents does not support \$resource parameter.", E_USER_ERROR);
#-- write non-scalar?
if (is_array($content) || is_object($content)) {
$content = implode("", (array)$content);
}
#-- open for writing
$f = fopen($filename, $mode, $incl);
if ($f) {
// locking
if (($flags & LOCK_EX) && !flock($f, LOCK_EX)) {
return fclose($f) && false;
}
// write
$written = fwrite($f, $content);
fclose($f);
#-- only report success, if completely saved
return($length == $written);
}
}
}
…i już mamy obsługę file_put_contents z parametrami.
Co do źródła wiedzy, to chyba nic nie pobije manuala
http://www.php.net/manual/pl/funcref.php
w kwestii mail’i to krasnal ma chyba SMTP
konfiguracja w php http://www.php.net/manual/pl/mail.configuration.php