Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt do losowania bez powtórzeń -jak
malinowy
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 17.12.2013

Ostrzeżenie: (0%)
-----


witam,

jestem początkujący w PHP, natomiast mam doswiadcenie w innych językach programowania,
także nie jestem pewien, czy będę się posługiwał językiem PHP-owym.

Potrzebuję napisać funkcję/procedurę, która będzie przyjmowała jeden parametr - nr_osoby.

Skrpt mawylosowaćz bazy dowolną osobę, która jeszcze nie była wylosowana i przy tej osobie zapisać, że jest już wylosowana.

Czyli logika miałaby być taka (trochę po Oracle-owemu);

select nr_osoby from osoby
into v_wylosowana_osoba
where wylosowany='N'
and nr_osoby != :parametr_nr_osoby
/* to po mysql-owemu*/
ORDER BY RAND()
LIMIT 1 ;

update osoby set wylosowa='Y where nr_osoby=v_wylosowana_osoba;
commit;

if v_wylosowana_osoba not null then
return v_wylosowana_osoba ;
else
return "już wszyscy wylosowani";
end if;

Proszę o pomoc.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
malinowy
post
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 17.12.2013

Ostrzeżenie: (0%)
-----


Od razu lepiej (IMG:style_emoticons/default/smile.gif)

Dziękuję.

Już był o ogródku, już witał się z gąską.
Dodałem parę warunków i znowu schody ;-(

Cytat(Turson @ 18.12.2013, 10:20:52 ) *
  1. $q_wylosowana_osoba = "SELECT nr FROM g2013_osoby WHERE losowal='N' and nr != '".$_GET['p1']."' ORDER BY rand() LIMIT 1";

Nie bierz integerów w '' ani "", $_GET w zapytaniu bezpośrednio = sql incjection


Jak nie biorę integerów w '' ani "" to nie działa.
Ale po dodaniu warunków, jak biorę w '', to też nie działa.

Zapytanie z warunkami, które zwraca wartość w MySQL:
  1. SELECT nr FROM g2013_osoby
  2. WHERE nr !=3
  3. AND para !=3
  4. AND wylosowany =0
  5. AND wylosowany !=3
  6. ORDER BY rand() LIMIT 1


W php:
  1. $q1 = $_GET['p1'];
  2.  
  3. //echo $q1;
  4.  
  5. $q_wylosowana_osoba = "
  6. SELECT nr, imie FROM g2013_osoby
  7. WHERE nr !=".$_q1."
  8. and para !=".$_q1."
  9. and wylosowany =0
  10. and wylosowany !=".$_q1."
  11. ORDER BY rand() LIMIT 1
  12. ";
  13.  
  14. $wylosowana_osoba = mysql_query($q_wylosowana_osoba) or die(mysql_error());
  15. $r_wylosowana_osoba = mysql_fetch_assoc($wylosowana_osoba);
  16. //$totalRows_osoby = mysql_num_rows($osoby);
  17. //$row_ososby2 = mysql_fetch_assoc($ososby2);
  18. //$q_update = "update g2013_osoby SET wylosowany='".$r_wylosowana_osoba['nr']."' where nr='".$_q1."'";
  19. //$wylosowana_osoba_u = mysql_query($q_update) or die(mysql_error());
  20.  
  21. echo "<div class=\"alert alert-success\">Wylosowany numer to - <span id='wynik'>".$r_wylosowana_osoba['nr']."</span> - <strong>".$r_wylosowana_osoba['imie']." !</strong> </div>";
  22.  



Błędy:
*) wersja, gdy parametr jest bez '' - and para !=".$_q1."
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 'and para != and wylosowany =0 and wylosowany != ORDER BY rand() LIMIT 1' at line 3

*) wersja, gdy parameter jest w '' - and para !='".$_q1."' (oczywiście we wszystkich wystąpieniach).

Wylosowany numer to - - !

Czyli wartości $r_wylosowana_osoba['nr'] i $r_wylosowana_osoba['imie'] mają null.

Jak zrobię :
$q1 = $_GET['p1'];

echo $q1;

zwraca mi wartość z parametru.

W czym problem?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.12.2025 - 16:12