Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Undefined index
Forum PHP.pl > Forum > Przedszkole
Dukov
Hej, dzisiaj mam problem z czymś takim
  1. if ($_POST['name'] != null)

wywala błąd undefined index
A to pole formularza

  1. <input type="text" name="name">


Jest ktoś w stanie to wytłumaczyć? Chyba się nie pomyliłem i do formularza odwołuje się poprzez index o nazwie atrybutu name, a nie id?
trueblue
A jaką metodą wysyłasz formularz?
Dukov
Teraz mam kolejny problem też z indexami

  1. if($_FILES['filename']['error']!=4){
  2. $avatar = fileReceive();
  3. }

Funkcja
  1. function fileReceive(){
  2. $max_size = 1024*1024;
  3. if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
  4. if ($_FILES['filename']['size'] > $max_size) {
  5. echo 'Błąd! Plik jest za duży!';
  6. }
  7. else {
  8. echo 'Odebrano plik. Początkowa nazwa: '.$_FILES['filename']['name'];
  9. echo '<br/>';
  10.  
  11. if (isset($_FILES['filename']['type'])) {
  12. echo 'Typ: '.$_FILES['filename']['type'].'<br/>';
  13. }
  14.  
  15. $strExt = substr( $_FILES['filename']['name'], strrpos( $_FILES['filename']['name'], '.' ) + 1 );
  16. echo "Rozszerzenie: ". $strExt;
  17. $len = 20;
  18. $randstring = substr(sha1(rand(1,10000)),0,$len).".jpg";
  19. echo $randstring;
  20. echo $_FILES['filename']['name'];
  21.  
  22. if ($strExt == 'jpg' || 'JPG' || 'jpeg' || 'JPEG'){
  23. move_uploaded_file($_FILES['filename']['tmp_name'],
  24. $_SERVER['DOCUMENT_ROOT'].'../avatars/'.$_FILES['filename']['name']);
  25.  
  26. }
  27. else{
  28. echo "niy!!";}
  29. }
  30. }
  31. else {
  32. echo 'Błąd przy przesyłaniu danych!';
  33. }
  34. rename('avatars/'.$_FILES['filename']['name'], 'avatars/'.$randstring);
  35. return $randstring;
  36. }

  1. <form name="regform" action="scripts/registry.php" method="post" enctype="multipart/form-data>
  2. <input type="text" name="login">
  3. <input type="password" name="pass">
  4. <input type="text" name="mail">
  5. <input type="text" name='name'>
  6. <input type="text" name="city">
  7. <textarea name="desc"></textarea>
  8. <input type="hidden" name="MAX_FILE_SIZE" value="512000" /><input type="file" name="filename">
  9. <input type="submit">
  10. </form>


Co ciekawe poszedłem tutaj po najmniejszej lini oporu, przerobiłem pod swoje potrzeby skrypt z neta, stosowałem go też na innych stronach i działał - tutaj nie chce działać. Te echa są tylko dopóki zacznie działać, żeby nie było, że tak zostanie, bo docelowo będzie Location: header i komunikat.
nospor
No ale jesli ten kod odpalasz rowniez przed wyslaniem formularza to rowniez bedziesz mial ten blad. Moze pokaz caly kod, wlacznie z formularzem
Pyton_000
nawet jak wyślesz puste pole to nie będzie null tylko pusty string.

Sprawdza się przez:

  1. if(!empty($_POST['name'])) {...}
Dukov
@Pyton_100

POSTy działają, w skrypcie logowania też mam null, najpierw było jako isset, jak mnie pamięć nie myli i wywaliło błąd i w kodzie błędy zaproponowąło null i działa, ten skrypt też działa, problem mam z plikiem, a kodu się wstydzę jeszcze, dopóki go nie dopracuje wink.gif Ale formularz wysyłam DO tego skryptu metodą POST, więc formularz jest wysłany do skryptu i skrypt zaczyna działać, więc kod i tak się odpala PO wysłaniu formularza.

Ale proszę
  1. <?php
  2. $avatar;
  3. if ($_POST['name'] != null){
  4. $userName = $_POST['name'];
  5. }
  6. if ($_POST['city'] != null ) {
  7. $userCity = $_POST['city'];
  8. }
  9. if ($_POST['desc'] != null){
  10. $userDesc = $_POST['desc'];
  11. }
  12. $host = 'localhost';
  13. $baza = 'test';
  14. $uzytkownik = 'adam';
  15. $haslo = 'aaaaa5';
  16. if ($_POST['login'] != null || $_POST['pass'] != null || $_POST['mail'] != null) {
  17. $userLogin = $_POST['login'];
  18. $userPass = $_POST['pass'];
  19. $userMail = $_POST['mail'];
  20. $len = 20;
  21. $userID = substr(sha1(rand(1,10000)),0,$len);
  22. echo $userID;
  23. if($_FILES['filename']['error']!=4){
  24. $avatar = fileReceive();
  25. }
  26. reg();
  27.  
  28. }
  29. else
  30. {
  31. header("Location: ../reg.php?reg=emptyf");
  32. }
  33. function reg(){
  34. global $userID, $userMail, $userPass, $userLogin, $userDesc, $userCity, $userName, $avatar;
  35. try {
  36.  
  37.  
  38.  
  39. $conn = new PDO("mysql:host=$host;dbname=$baza", $uzytkownik, $haslo);
  40. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  41. $stmt = $conn->prepare("SELECT Nazwa FROM Users WHERE Nazwa = '$userLogin'");
  42. $stmt->execute();
  43. $row = $stmt->fetch();
  44. if($row[0] <> 1){
  45. $stmt = $conn->prepare("INSERT INTO 'Users' ('ID', 'Nazwa','Haslo', 'mail','name','city', 'image', 'desc', 'activate', 'admin') VALUES ('$userID','$userLogin', '$userPass', '$userMail', '$userName', '$userCity, $avatar', '$userDesc','false','false'");
  46. $stmt->execute();
  47.  
  48. sendMail();
  49.  
  50. }
  51.  
  52. else{
  53. header("Location: ../reg.php?reg=userexists");
  54. }
  55. }
  56. catch(PDOException $e)
  57. {
  58. return 1; #brak polaczenia
  59. }
  60. }
  61.  
  62.  
  63.  
  64.  
  65. function fileReceive(){
  66. $max_size = 1024*1024;
  67. if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
  68. if ($_FILES['filename']['size'] > $max_size) {
  69. echo 'Błąd! Plik jest za duży!';
  70. }
  71. else {
  72. echo 'Odebrano plik. Początkowa nazwa: '.$_FILES['filename']['name'];
  73. echo '<br/>';
  74.  
  75. if (isset($_FILES['filename']['type'])) {
  76. echo 'Typ: '.$_FILES['filename']['type'].'<br/>';
  77. }
  78.  
  79. $strExt = substr( $_FILES['filename']['name'], strrpos( $_FILES['filename']['name'], '.' ) + 1 );
  80. echo "Rozszerzenie: ". $strExt;
  81. $len = 20;
  82. $randstring = substr(sha1(rand(1,10000)),0,$len).".jpg";
  83. echo $randstring;
  84. echo $_FILES['filename']['name'];
  85.  
  86. if ($strExt == 'jpg' || 'JPG' || 'jpeg' || 'JPEG'){
  87. move_uploaded_file($_FILES['filename']['tmp_name'],
  88. $_SERVER['DOCUMENT_ROOT'].'../avatars/'.$_FILES['filename']['name']);
  89.  
  90. }
  91. else{
  92. echo "niy!!";}
  93. }
  94. }
  95. else {
  96. echo 'Błąd przy przesyłaniu danych!';
  97. }
  98. rename('avatars/'.$_FILES['filename']['name'], 'avatars/'.$randstring);
  99. return $randstring;
  100. }
  101.  
  102. function sendMail(){
  103. $addressee = 'ajjambor912@gmail.com';
  104. @$email = $_POST['email'];
  105.  
  106. @$content = 'Name '.$_POST['username'].' Phone: '.$_POST['userphone'].' Content: '.$_POST['message'];
  107.  
  108. $header = "From: ".$_POST['email']." \nContent-Type:".
  109. ' text/plain;charset="iso-8859-2"'.
  110. "\nContent-Transfer-Encoding: 8bit";
  111. if (mail($addressee, 'Message from NAhandyman: ', $content , $header))
  112.  
  113. header('Location:index.php?send=true');
  114. else
  115. header('Location:index.php?send=false');
  116. }
  117.  
  118. ?>


Z góry zaznacze, że funkcja za wysyłanie maila, jest niegotowa, tylko skopiowana z innego skryptu, a wrzuciłem ją tam, żebym miał pogląd jak to mniej więcej było ostatecznie zrobione, tak jak nie są hasowane hasła itd, jak zacznie to działać, to będe dopracowywał powoli ten skrypt. Oczywiście większość nie działa, to szkielet, pisałem to wczoraj po nocy i chciałem sobie naszkicować, teraz go sukcesywnie poprawiam.
nospor
enctype="multipart/form-data>

Kazde rozpoczete " trzeba tez zamknac "
Dukov
Zamknąłem, a efekt ten sam, póki co wykomentuje tę funkcje i poprawiam dalej, zajrzę co jakiś czas, jak ktoś znalazł rozwiązanie, najwyżej jak będę miał wszystko inne "pochytane" to wyrzucę ten warunek i funkcje i napiszę inaczej od nowa.
nospor
To moze napisz co ci nie dziala, bo jak poki co nie widze. Widzialem ze nie dzialal ci pierwszy warunek, ktory rzekomo poprawiles. Potem napisales ze nie dziala ci co innego ale co to juz nie napisales, tylko ogolnikowo cos o indeksie. Konkrety prosze smile.gif
Dukov
Notice: Undefined index: filename in D:\wamp64\www\scripts\registry.php on line 23

  1. if($_FILES['filename']['error']!=4){
  2. $avatar = fileReceive();
  3. }


Linia 23 to ten warunek.

  1. <input type="hidden" name="MAX_FILE_SIZE" value="512000" /><input type="file" name="filename">


A ta linia odpowiada za odbieranie plików, pełen kod jest wyżej smile.gif
nospor
Pokaz jeszcze raz poprawiony formularz, co by miec pewnosc ze poprawiles to poprawnie wink.gif
Pyton_000
Nie sprawdzasz czy !empty($_FILES) a powinieneś. błąd mówi jasno że nie ma indeksu filename ergo nie wysyłasz pliku.
Dukov
Proszę uprzejmie smile.gif
  1. <form name="regform" action="scripts/registry.php" method="post" enctype="multipart/form-data">
  2. <input type="text" name="login">
  3. <input type="password" name="pass">
  4. <input type="text" name="mail">
  5. <input type="text" name='name'>
  6. <input type="text" name="city">
  7. <textarea name="desc"></textarea>
  8. <input type="hidden" name="MAX_FILE_SIZE" value="512000" /><input type="file" name="filename">
  9. <input type="submit">
  10. </form>
nospor
@Pyton jakby nie wyslal pliku to nadal by byl w $_FILES ale oznaczony jako pusty. No chyba, ze juz skleroze mam na starosc smile.gif
Dukov
A no właśnie, ten warunek odpowiada za sprawdzenie pliku, 4 to plik niewysłany smile.gif 3 albo 2 to niepełny plik bądź uszkodzony, a 1 albo 0 to plik wysłany poprawnie, zresztą docelowo będzie na to 0 albo 1 wywołana funkcja, a pozostałe będzie header location powrót do rejestracji i komunikat zależny od zmiennej z GET albo return jeszcze pomyślę smile.gif

EDIT Pyton ma racje i poleciał 'pomógł' smile.gif , zmieniłem ten warunek na if(!empty($_FILES)){ i działa dokładnie tak jak chcę smile.gif teraz walczę z resztą błędów smile.gif
Pyton_000
UPLOAD_ERR_NO_FILE mówi o tym że plik został załączony do formularza ale z jakiegoś powodu nie dotarł do PHP a dokładniej jeśli tmp_name jest pusty czyli np. plik nie móg się zapisać na dysk do tmp.
Dukov
Powiem tak, zmieniłem na echo, już zacząłem głupieć od tego, bo znowu były problemy, ogólnie warunek nie działa, nieistotne czy plik jest załączony, czy nie warunek spełniony możesz mi powiedzieć pokrótce jak mam napisać ten warunek, żeby sprawdził, czy jest załączony plik, czy nie?

Teraz sobie musze jeszcze opis na forum zmienić.
Pyton_000
- najpierw sprawdzasz czy $_FILES nie jest pusty
- potem sprawdzasz czy $_FILES['filename']['error'] nie ma błedów
- dalej lecisz normalnie
Dukov
Tak, ale za każdym razem (nawet jak jest pusty) to zwraca, że nie jest pusty

  1. if(!empty($_FILES['filename'])){
  2. echo "pusty";
  3. }


Obojętnie czy jest czy nie, warunek jest spełniony, tutaj chcę sprawdzić TYLKO czy jest pusty, bo czy są błędy mam w funkcji, którą chce wywołać zamiast echo "pusty";

EDIT bez indeksu efekt ten sam, sprawdzałem.
Pyton_000
Zrób sobie `var_dump($_FILES);` i będziesz wiedział co tam jest a czego nie ma przy wysłaniu pustego formularza i z plikiem/
Dukov
Dzięki,

  1. if($_FILES['filename']['name'] != ''){

Już działa wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.