Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pobranie zmiennej do funkcji
Forum PHP.pl > Forum > Przedszkole
MaryonD
Witam, raczkuje w PHP i potrzebuje pomocy. Pobieram do formularza rekordy z bazy jednak mam zmienną na końcu funkcji ($wiersz) i chcę się odwołać do niej na początku kodu to formularz jej "nie zna". Zależy mi na tym, żęby formularz był na początku skryptu ponieważ wtedy komunikaty z ifów pojawiają mi sie ładnie poniżej fomularza. Z góry dziękuje za pomoc!

<?php


function pokaz() {

?>

<form action="index.php" method="post">

<table>
<tr>
<td>Nazwa:<input type="text" name="szukaj" /><input type="submit" name="przycisk" value="Pokaż"/></td>
<td><font name="pole"/><?php echo $wiersz[1]></font></td>
</tr>
</table>

</form>

<?php

if (isset($_POST["przycisk"])) {
if (empty($_POST["szukaj"])) {

echo 'Proszę podać nazwe';

} else {

$ip="localhost";
$login="root";
$haslo="";
$baza="123";
$tabela="towary";
$szukaj=$_POST['szukaj'];

mysql_connect ($ip,$login,$haslo);
mysql_select_db($baza);

$id_wiersz = mysql_query ("select id from $tabela WHERE pole='$szukaj');
$row = mysql_fetch_row($id_wiersz);
if (empty($row)){
echo 'Nie ma';
}
else {
$wykonaj = mysql_query ("select * from $tabela WHERE id=$row[0]");
$wiersz=mysql_fetch_array($wykonaj);
}
}
}
}

pokaz();

?>
nospor
Kolejnośc:
Najpierw wykonanie kodu, pobranie danych itp a dopiero potem wyświetlanie.

Cytat
Zależy mi na tym, żęby formularz był na początku skryptu ponieważ wtedy komunikaty z ifów pojawiają mi sie ładnie poniżej fomularza.
To nie wyświetlaj od razu komunikatów w tych IFach, tylko zapisuj je do zmiennej, a wyświetlaj z tej zmiennej dopiero po formularzu.

ps: i używaj BBCODE
b4rt3kk
Spróbuj coś takiego:

  1. <?php
  2. function pokaz() {
  3.  
  4. if (isset($_POST["przycisk"])) {
  5. if (empty($_POST["szukaj"])) $error[1] = true; else {
  6.  
  7. $ip="localhost";
  8. $login="root";
  9. $haslo="";
  10. $baza="123";
  11. $tabela="towary";
  12. $szukaj=$_POST['szukaj'];
  13.  
  14. mysql_connect ($ip,$login,$haslo);
  15.  
  16. $id_wiersz = mysql_query ("select id from $tabela WHERE pole='$szukaj'");
  17. $row = mysql_fetch_row($id_wiersz);
  18.  
  19. if (mysql_num_rows($row)==0) $error[2]=true; else {
  20. $wykonaj = mysql_query ("select * from $tabela WHERE id='{$row[0]}'");
  21. $wiersz=mysql_fetch_array($wykonaj);
  22. }
  23.  
  24. }
  25. }
  26.  
  27. ?>
  28. <form action="index.php" method="post">
  29. <table>
  30. <tr>
  31. <td>Nazwa:<input type="text" name="szukaj" /><input type="submit" name="przycisk" value="Pokaż"/></td>
  32. <td><font name="pole"/><?php echo $wiersz[1]?></font></td>
  33. </tr>
  34. </table>
  35. </form>
  36. <?php
  37. if ($error[1]) echo 'Uzupełnij pola';
  38. if ($error[2]) echo 'Brak wyników wyszukiwania';
  39. }
  40.  
  41. pokaz();
  42.  
  43. ?>
MaryonD
OK, a powiedz mi jeszcze jak obejść coś takiego:
Ten formularz pokazuje mi pierwszy znaleziony rekord w bazie, jeśli występują dalej kolejne to mi ich nie pokazuje.
Proszę poradź jak rozwiązać problem. Myślałem o czymś takim:
while($wiersz=mysql_fetch_array($wykonaj))
echo "Pole: ".$wiersz[1], ";

Zamysł jest taki:
Tworze dodatkowy przycisk NEXT i PREVIOUS i podpinam pod nich funkcje.
Chciałbym rozwiązać to w taki sposób, że jeśli wartość występuje więcej niż 1 raz to przyciski są nieatywne, natomiast w innym przypadku, żębym
za pomocą tych przycisków mógł przełączać się pomiędzy kolejnymi znalezionymi rekordami w bazie, które będą się wyświetlać w polu formularza.
Pomóż jak się za to zabrać! Dzięki!
b4rt3kk
Cytat(MaryonD @ 14.11.2012, 15:35:39 ) *
OK, a powiedz mi jeszcze jak obejść coś takiego:
Ten formularz pokazuje mi pierwszy znaleziony rekord w bazie, jeśli występują dalej kolejne to mi ich nie pokazuje.
Proszę poradź jak rozwiązać problem. Myślałem o czymś takim:
while($wiersz=mysql_fetch_array($wykonaj))
echo "Pole: ".$wiersz[1], ";

Zamysł jest taki:
Tworze dodatkowy przycisk NEXT i PREVIOUS i podpinam pod nich funkcje.
Chciałbym rozwiązać to w taki sposób, że jeśli wartość występuje więcej niż 1 raz to przyciski są nieatywne, natomiast w innym przypadku, żębym
za pomocą tych przycisków mógł przełączać się pomiędzy kolejnymi znalezionymi rekordami w bazie, które będą się wyświetlać w polu formularza.
Pomóż jak się za to zabrać! Dzięki!


Jeśli chcesz wyświetlić wszystkie wyniki, to tak, masz rację pętla while jest tu odpowiednia:

  1. <td><font name="pole"/><?php while($wiersz) echo $wiersz.'<br/>'; ?></font></td>


Co to drugiego pytania, to możliwości jest wiele. Np. zwyczajna paginacja, ale wtedy będziesz musiał ograniczyć wyniki zapytania i je porcjować. Druga opcja to JS, względnie jQuery i ukrywanie/odkrywanie poprzedniego, czy też następnego rekordu. Można również użyć Ajaxa. Masz tu pole do popisu i rozwinięcia swojej wiedzy w tym zakresie.
MaryonD
Wyrzuca tylko komunikat od tych error(ów):
Notice: Undefined variable: error

Jak je moge zadeklarować?
nospor
normalnie:
$error = array();
MaryonD
To samo...
Jak napisze:
$error[] = array();

to na początku mam błąd:
  1. Undefined offset: 1

  1. Undefined offset: 2


Błędy znikają po kliknięciu na "Pokaż" przy pustym polu, jeśli natomiast wpisze towar, którego nie ma to nika mi tylko błąd
  1. Undefined offset: 2

natomiast
  1. Undefined offset: 1
pozostaje.
nospor
nie: $error[] = array();
a: $error = array();
Napisałem przecież wyraźnie.

I masz to dać na początku funkcji pokaz()

I nie:
if ($error[1])
a:
if (!empty($error[1]))
Analogicznie z 2
MaryonD
Super! Dziękuje bardzo! wink.gif

Powiedzcie mi jeszcze dlaczego w formularzu przyjmuje mi wszystkie znaki z wyjątkiem "\".
Jeśli dam ten znak to pojawia się błąd:
  1. mysql_fetch_row() expects parameter 1 to be resource, boolean given in...


Próbowałem w IFie go wykluczyć na różne sposoby, ale nie potrafie
  1. if (empty($_POST["szukaj"]) && ($_POST["szukaj"]!='\')) {$error[1] = true;} else {...
b4rt3kk
Użyj funkcji mysql_escape_string.

  1. $szukaj = mysql_escape_string($_POST["szukaj"]);


i do zapytania przesyłaj w ten sposób spreparowaną zmienną.
MaryonD
O to chodziło , dzięki
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.