Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dziwny blad
Forum PHP.pl > Forum > Przedszkole
infern
Witam,

Tworze proste zapytanie w php:
  1. <?php
  2. $query = "SELECT * FROM Stanowisko WHERE Nazwa_stan='".$temp."'";
  3. $result = mysql_query($query);
  4. $line = mysql_fetch_array($result, MYSQL_ASSOC);
  5. ?>


Jest wszystko okej, problem pojawia sie jedynie jesli w jakies tam komorce jest w stringu & to wtedy nie dziala, co moze byc przyczyna?
Lejto
opisz dokładniej problem i daj kod tam gdzie błąd się robi bo tak zapytanie jest czyste nie wiem tylko czy "Stanowisko" nie powinno być z małej litery

daj jeszcze przy wywołaniu zapytania or die i zobacz czy nie będzie błędu
infern
Cytat(Lejto @ 21.12.2007, 17:14:42 ) *
opisz dokładniej problem i daj kod tam gdzie błąd się robi bo tak zapytanie jest czyste nie wiem tylko czy "Stanowisko" nie powinno być z małej litery

daj jeszcze przy wywołaniu zapytania or die i zobacz czy nie będzie błędu


Stanowisko jest definiwane z duzej litery przy tworzeniu tabeli.
Pisalem oco chodzi mam stworzona tabele z wpisami i jesli chce wyluskac wiersz gdzie np Nazwa_stan="fdsjfsglkdf & fsdfsd" to nie wyswietla mi poprawnie pozniej do inputa, a jesli jest string bez znaczka & to wtedy jest wszystko okej,
jak dodam die to nic sie nie dzieje, zapytanie sie dobrze wywoluje
wiecej kodu:
  1. <?php
  2. $temp = $_GET['NazwaStan'];
  3. $query = "SELECT * FROM Stanowisko WHERE Nazwa_stan='".$temp."'";
  4. $result = mysql_query($query) or die("Blad");
  5. $line = mysql_fetch_array($result, MYSQL_ASSOC);
  6. $temp = $line["Nazwa_stan"];
  7. echo "<INPUT type=\"text\" name=\"Nazwa_stan\" style=\"width: 328px;\" maxlength=\"40\" value=\"$temp\">";
  8. ?>
dadexix
jak się nie myle to & jest jednym ze znaków który "przeszkadza" mysql(pewnie nie bez powodu) przepuść stringa przez mysql_real_escape_string" title="Zobacz w manualu PHP" target="_manual i wymiatasz;]
infern
No niestety nie dziala obcina strina przed znakiem &, bo wyrzucam juz echo po kazdej operacji i stad wiem, jakies dalsze wskazowiki?
czachor
Przed wrzuceniem do bazy zrób to:
  1. <?php
  2. $string = htmlspecialchars($string, ENT_QUOTES);
  3. ?>


Ew. przed wyświetleniem, ale lepiej przed dodaniem do bazy, bo potem nie musisz robić tego za każdym razem.

Poza tym nie miałeś zamkniętej wartości VALUE w "".

Aha, i optymalniej i przejrzyściej:
  1. <?php
  2. echo '<INPUT type="text" name="Nazwa_stan" style="width: 328px;" maxlength="40" value="' . $temp . '">';
  3. ?>
infern
Zrobilem tak jak doradziles:
  1. <?php
  2. $temp = $_POST['Nazwa_stan'];
  3. $temp2 = htmlspecialchars($temp, ENT_QUOTES);
  4. $query = "INSERT INTO Stanowisko (Nazwa_stan) VALUES ('$temp2')";
  5. mysql_query($query);
  6. ?>


Jednak jest dalej problem z pobraniem danych przez PHP, jak robie to bezposrednio w MYSQL dziala wszystko z &
czachor
  1. <?php
  2. $temp = $_POST['Nazwa_stan'];
  3. $query = "INSERT INTO Stanowisko (Nazwa_stan) VALUES ('$temp')";
  4. mysql_query($query);
  5.  
  6. //....robisz fetch'a, potem
  7. echo htmlspecialchars($temp, ENT_QUOTES);
  8. ?>
infern
Oj, zauwazylem ze zle mi przez metode GET przenosi bo jak zrobie wsyswietlenie zaraz to juz mi obcina

Dobra jest tak
1) wywolanie:
  1. <?php
  2. $query = "SELECT * FROM Stanowisko";
  3. $result = mysql_query($query);
  4. while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
  5. {
  6. echo "<tr>";
  7. $temp = $line["Nazwa_stan"];
  8. echo "<td align=\"left\"><a href=\"dwa.php?func=showPos&NazwaStan=$temp\" target=\"funk\">$temp</a></td>";
  9. echo "</tr>";
  10. }
  11. ?>

2) Pozniej testuje tak:
  1. <?php
  2. $temp = $_GET['NazwaStan'];
  3. echo $temp;
  4. $temp2 = mysql_escape_string($temp);
  5. echo $temp2;
  6. $query = "SELECT * FROM Stanowisko WHERE Nazwa_stan='".$temp2."'";
  7. $result = mysql_query($query);
  8. echo $result;
  9. $line = mysql_fetch_array($result, MYSQL_ASSOC);
  10. echo $line;
  11. ?>


Niestety wyswietla juz tak:
temp - obciete do &
temp2 - to samo
result - Resource #id3
line - i tutaj nie wyswietla nic

Chyab poprostu usune te znaki z wierszy i to bedzie najprostrze wysjcie
Liko
Bo nie możesz przez metodę GET wysyłać znaczka & (ampersand) bo jest on w niej używany do łączenia zmiennych w zapytaniu. Także zakoduj cały string prze wrzuceniem go do linka funkcją np. urlencode" title="Zobacz w manualu PHP" target="_manual. Później deokodujesz używając urldecode.

  1. <?php
  2. $sOne = 'Something & Something Else';
  3. print '<a href="./'.basename($_SERVER['PHP_SELF']).'?temp='.urlencode( $sOne ).'">Link</a><br/>';
  4.  
  5. if( isset( $_GET['temp'] ) ) {
  6. print urldecode( $_GET['temp'] );
  7. }
  8. ?>
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.