Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Tablica zamiast wielokrotnego sprawdzania
Forum PHP.pl > Forum > Przedszkole
ktosz
hej mam sobie zrobione takiego bota, ktory sprawdza czy ktos wpisal dana tresc w formularzu i odpowiada. i mam okolo 50 takich komend, a wyglada to tak:

  1. <?php
  2. $pos = strpos($_POST['txt'], '-wstawaj');
  3. if ($pos === false) {
  4. } else {
  5. $_POST['txt']=str_replace('-wstawaj', '&nbsp;', $_POST['txt']);
  6. $wyswietli="wstajemy";
  7. }
  8. $pos = strpos($_POST['txt'], '-spij');
  9. if ($pos === false) {
  10. } else {
  11. $_POST['txt']=str_replace('-spij', '&nbsp;', $_POST['txt']);
  12. $wyswietli="¶pimy";
  13. }
  14. $pos = strpos($_POST['txt'], '-lez');
  15. if ($pos === false) {
  16. } else {
  17. $_POST['txt']=str_replace('-lez', '&nbsp;', $_POST['txt']);
  18. $wyswietli="leżymy";
  19. }
  20. ?>

i tak dalej i tak dalej do 50 paru, jak w prosty sposob to zmienic na cos szybszego, bo to dziala, ale wiem, ze jest wolne i zle zrobione.


no i pytanie z mysql, mam dwie linie, INSERT INTO i UPDATE. Oczywi¶cie działa, ale chcę to wrzucić w jedno.
  1. mysql_query("INSERT INTO `tabela` VALUES ('$nick','$email','$haslo','$zmienna')");
  2. mysql_query("UPDATE `inna` SET `kiedy`=$czas, `nastepnie`=$czas WHERE `id`=$kto[id]");


robię tak jak poniżej, lecz nie działa.
  1. mysql_query("INSERT INTO `tabela` VALUES ('$nick','$email','$haslo','$zmienna'); UPDATE `inna` SET `kiedy`=$czas, `nastepnie`=$czas WHERE `id`=$kto[id]");




dziekuje za pomoc
Tomplus
Aby działało Ci wielozapytania, to musisz skorzystać z MySQLi czyli MySQL Improvment

Działa podobnie do mysql ale musisz zmienić trochę kodu w zapytaniach:
http://www.w3schools.com/php/php_ref_mysqli.asp

Albo najlepiej nauczyć się PDO, obsługuje bazy MySQL i dodatkowo też możesz tworzyć wielozapytania.
ktosz
Okej dzieki, przechodze na MySQLi smile.gif. Wszystko juz pozmienialem sobie tylko mam problem z takim zapytaniem, ktore zlicza mi ilu ludzi jest na danej podstronie:

  1. $iletamjest=mysql_result(mysql_query("SELECT COUNT(id) FROM `users` WHERE `ostatnio_stronadwa`>$byl AND `strona`='0'"), 0);

No i na MySQL mi zlicza poprawnie, ale zmieniajac na:
  1. $iletamjest=mysqli_result($mysql->query("SELECT COUNT(id) FROM `users` WHERE `ostatnio_stronadwa`>$byl AND `strona`='0'"), 0);

to juz mi natomiast nie dziala. i mam problem? z reszta sobie porawdzilem.


no i co do czesci pierwszej z tym php mam zapytanie
viking
Nie ma funkcji mysqli_result. Query zwraca obiekt http://php.net/manual/pl/class.mysqli-result.php na którym możesz dalsze operacje wykonywać.
nospor
Cytat
mysqli_result($mysql->query("SELECT COUNT(id) FROM `users` WHERE `ostatnio_stronadwa`>$byl AND `strona`='0'"), 0);

I przyjmij jedna banalna zasade: jedna linia, jedna komenda.
ktosz
dzieki

A na to pierwsze z php zapytanie ktos odpowie? to bylo glowne?
Tomplus
Jeżeli logika tych komend jest taka sama, to wystarczy stworzyć sobie jak±¶ tablicę a następnie pętle.

  1. <?php
  2. $komendy = [
  3. 'wstawaj' => 'wstajemy', 'spij' => '¶pimy', 'lez' => 'leżymy'
  4. ];
  5.  
  6. foreach($komendy as $rozkaz => $komenda) {
  7. if(!strpos($_POST['txt'], '-'.$rozkaz)) {
  8. $_POST['txt'] = str_replace('-'.$rozkaz, '&nbsp;', $_POST['txt']);
  9. $wyswietli = $komenda;
  10. }
  11. }
  12. ?>



Ew. bez pętli, ale z użyciem switch.
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.