Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Własna funkcja, wyswitla sie przy deklarowaniu jako zmienna.
Forum PHP.pl > Forum > Przedszkole
flasy
zrobilem taka prosta przykladowa funkcje z uzyciem petli while.

  1. <?php
  2. function piotrek(){
  3. $i=1;
  4. while ($i < 5)
  5. {
  6. echo "1 <br>";
  7. $i++;
  8. }}
  9.  
  10. $zmienna = piotrek();
  11. ?>


problem polega na tym ze funkcja powinna byc wyswitlona w momencie gdy napisze
  1. <?php
  2. echo $zmienna;
  3. ?>

ale ona wyswietla sie juz w momencie deklaracji! (a kiedy pisze echo $zmienna to ona sie nie wyswietla!)
O co chodzi co zle robie? Chce tego uzyc na takim przykladzie
  1. <?php
  2. $zmienna2 = "Jakis tekst... $zmienna Jakis tekst";
  3. echo $zmienna2;
  4. ?>
krzysiekk
zrob tak chyba ze nie o to ci chodzilo
  1. <?
  2. function piotrek()
  3. {
  4. $i=1;
  5. while ($i < 5)
  6. {
  7. $t[]= "1 <br>";
  8. $i++;
  9. }
  10. return $t;
  11. }
  12. $zmienna = piotrek();
  13. foreach($zmienna as $zm)
  14. {
  15. print $zm;
  16. }
  17. ?>
batman
  1. <?php
  2. function piotrek(){
  3. $i=1;
  4. while ($i < 5) {
  5. $sout .= "1 <br>";
  6. $i++;
  7. }
  8.  
  9. return $sout;
  10. }
  11.  
  12. $zmienna = piotrek();
  13.  
  14. echo $zmienna;
  15. ?>
flasy
jeszcze jedno male pytanko/problem, podobny...


  1. <?php
  2. $zmienna1 = "ksiazka";
  3. $zmienna2 = "imie int(15) NOT NULL, nazwisko int(15) NOT NULL,";
  4.  
  5. $query="CREATE TABLE ".$zmienna1." (id int(6) NOT NULL auto_increment,".$zmienna2." PRIMARY KEY (id),UNIQUE id (id),KEY id_2 (id))";
  6.  
  7. echo $query; // wszystko ladnie pieknie mi zwraca
  8.  
  9. if(mysql_query($query) == FALSE){
  10. echo "FALSE!";
  11. }
  12. else{
  13. echo "TRUE!";
  14. } // i tutaj zawsze zwraca wartosc false
  15. ?>

nadmienie ze polaczenie z baza jest ok.


a jezeli zrobie cos takiego:
  1. <?php
  2. $query="CREATE TABLE ksiazka (id int(6) NOT NULL auto_increment,imie int(15) NOT NULL, nazwisko int(15) NOT NULL, PRIMARY KEY (id),UNIQUE id (id),KEY id_2 (id))";
  3.  
  4. echo $query; // wszystko ladnie pieknie mi zwraca
  5.  
  6. if(mysql_query($query) == FALSE){
  7. echo "FALSE!";
  8. }
  9. else{
  10. echo "TRUE!";
  11. }// i tutaj wszystko smiga :/
  12. ?>
JaRoPHP
Więc u mnie Twój pierwszy fragment @flasy (ten który podobno zawsze zwraca wartość FALSE) działa tak jak powinien.
Może nie chce Ci utworzyć bazy danych, bo ona już istnieje (za drugim i kolejnym razem, rzeczywiście będzie wartość FALSE)?

EDIT:
Użyj takiego kodu, aby wyświelić ewentualny błąd:
  1. <?php
  2. mysql_query($query) or die(mysql_error());
  3. ?>
batman
@flasy
Pierwszy przykład, który podałeś działa. Mam tylko jedną uwagę. Jeśli chcesz sprawdzić, czy coś jest true lub false to użyj operatora identyczności ( === ), a jeszcze lepiej zrób tak:

  1. <?php
  2. if(!mysql_query($query)) {
  3. echo "FALSE!";
  4. }
  5. else { 
  6. echo "TRUE!";
  7. }
  8. ?>


Twój problem może wynikać z tego, że podana tabela może już istnieć, tak jak napisał @JaRoPHP.
flasy
poddaje sie nie wiem moze jestem jakis dziwny tongue.gif, generalnie to poczatkujacy w php i mysql, ale...
oto moj problem, pisze sobie skrypt (edukacyjny) ktory bedzie mi tworzyl tableki w bazie danych. Na poczatku jest strona na ktorej wpisujemy login, haslo i adres bazy danych i wpisujemy, ile ma byc wierszy w bazie. na nastepnej stronie jest petla ktora robi sie tyle razy co ilosc wierszy i tworzy pola select i tekst gdzie wpisuje nazwe wiersza i typ danych (int, varchar,text) a takze nazwe tabeli. Nastepna strona to ta:
  1. <?php
  2. $login=$_POST['login'];
  3. $haslo=$_POST['haslo'];
  4. $adres=$_POST['adres'];
  5. $nazwa_tab=$_POST['nazwa_tab']; 
  6. $ilosc_w2=$_POST['ilosc_w2']; // tu mozna wstawic domyslna wartosc 3
  7.  
  8. $polaczenie = @mysql_connect($adres, $login, $haslo)
  9. or die('Brak polaczenia z serwerem mysql. Blad: '.mysql_error());
  10. $db = @mysql_select_db($login, $polaczenie)
  11. or die('Nie moge polaczyc sie z baza danych. Blad: '.mysql_error());
  12.  
  13. function petla($i, $ilosc_w2)
  14.  {
  15.  $i=1;
  16.  while ($i < $ilosc_w2)
  17.  {
  18.  $nazwa_kol =$_POST['nazwa_kol'.$i.''];
  19.  $rodz_wp =$_POST['rodz_wp'.$i.'']." NOT NULL";
  20.  $tablica .= "&nbsp;".$nazwa_kol."&nbsp;" .$rodz_wp.",";
  21.  $i++;
  22.  }
  23.  return $tablica;
  24.  }
  25.  
  26. $tablicat = petla($i=0, $ilosc_w2);
  27. echo $tablicat;
  28. echo "<br>";
  29. $query="CREATE TABLE ".$nazwa_tab." (id int(6) NOT NULL auto_increment,".$tablicat." PRIMARY KEY (id),UNIQUE id (id),KEY id_2 (id))";
  30. echo $query;
  31. echo "<br>"; // do tego miejsca wszystko dziala
  32. if(!mysql_query($query)) { // tutaj zwraca wartosc false, zawsze. :(
  33. echo "FALSE!";}
  34. else{
  35. echo "TRUE";}
  36. mysql_close($polaczenie);
  37. ?>

tak jak napisalem, nie tworzy mi tabelki.
pomozcie... ;(
JaRoPHP
Sprawdź, co zwraca funkcja mysql_error():
  1. <?php
  2. $query="CREATE TABLE ...";
  3. if(!mysql_query($query)) {
  4. } else {...
  5. ?>

I napisz co otrzymałeś...
flasy
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' alo int(15) NOT NULL, ale int(15) NOT NULL, PRIMARY KEY (id' at line 1
JaRoPHP
Więc niedziałający skrypt wygląda inaczej niż ten prezentowany w pierwszych postach? Oczekujesz od nas @flasy pomocy, pokazując inny skrypt...

Błąd masz w funkcji petla(), która odpowiada (chyba) za utworzenie części zapytania SQL:
  1. <?php
  2. function petla($i, $ilosc_w2) {
  3.  $i=1;
  4.  while ($i < $ilosc_w2) {
  5. $nazwa_kol =$_POST['nazwa_kol'.$i.''];
  6. $rodz_wp =$_POST['rodz_wp'.$i.'']." NOT NULL";
  7. $tablica .= " ".$nazwa_kol." " .$rodz_wp.",";
  8. $i++;
  9.  }
  10.  return $tablica;
  11. }
  12.  
  13. // wywołanie funkcji
  14. $tablicat = petla($i=0, $ilosc_w2);
  15. ?>

- Po co w wywołaniu funkcji przekazujesz jej argument $i, jak i tak w pierwszej linijce nadajasz zmiennej wartość 1?
- Dokonujesz konkatenacji (łączenia) łańcucha $tablica, ale nigdzie nie widzę miejsca w którym ten łańcuch powstaje (innymi słowy, dodajesz coś do czegoś, co nie istnieje).

Jako że nie wiem, w jaki sposób są przechowywane zmienne, wywołaj swój skrypt (dla kilku wierszy), i napisz, jak wygląda utworzone zapytanie (napisz wynik tych linijek):
  1. <?php
  2. $tablicat = petla($i=0, $ilosc_w2);
  3. echo $tablicat;
  4. echo "<br>";
  5. $query="CREATE TABLE ".$nazwa_tab." (id int(6) NOT NULL auto_increment,".$tablicat." PRIMARY KEY (id),UNIQUE id (id),KEY id_2 (id))";
  6. echo $query;
  7. ?>

Dodatkowo:
- jeżeli kolumna jest kluczem podstawowym (PRIMARY KEY), jest ona automatycznie unikalną (UNIQUE), zindeksowaną (KEY) kolumną...
- włącz raportowanie błędów (error_reporting(E_ALL)) - na pewno się przyda...
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.