Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Warunek if
Forum PHP.pl > Forum > Przedszkole
GoodStuff
Cześć, mógłby mi ktoś wytłumaczyć gdzie popełniam błąd przy tym warunku, czy wgl tak można robić?

  1. if ($sprawdzanie['id_dodajacego'] == $user['id'] AND $sprawdzanie['id_dodanego'] == $profile['id'] )
Forti
  1. if (($sprawdzanie['id_dodajacego'] == $user['id']) && ($sprawdzanie['id_dodanego'] == $profile['id'])) {
  2.  
  3. }
GoodStuff
Dalej niestety wywala mi błąd
  1. Parse error: syntax error, unexpected T_IF
Forti
Pokaż cały kod. Przed if masz prawdopodobnie brak ; przy jakieś zmiennej czy coś.
GoodStuff
  1. <?
  2. $sprawdzanie = $db->query("SELECT * FROM reputacja")
  3.  
  4. if (($sprawdzanie['id_dodajacego'] == $user['id']) && ($sprawdzanie['id_dodanego'] == $profile['id']))
  5. {
  6. echo"Już dałeś mu punkt reputacji !"
  7.  
  8. }
  9. else{
  10.  
  11. if($_POST['send'] == 2){
  12. $dodajrep = $profile['reputacja'] +1;
  13.  
  14. $result = $db->query("UPDATE `users` SET reputacja=$dodajrep WHERE `id` = $profile[id]")
  15. $result = $db->query("INSERT INTO reputacja (id_dodajacego, id_dodanego) VALUES ('".$user['id']."', '".$profile['id']."')")
  16.  
  17.  
  18. $result = $db->query("SELECT * FROM users WHERE id=$profile[id]")
  19.  
  20. // get the first (and hopefully only) entry from the result
  21. $row = mysql_fetch_array( $result );
  22. echo 'Dałeś punkt reputacji użytkownikowi '.$profile['login'].'';
  23.  
  24. }
  25.  
  26.  
  27. if($_POST['send'] == 3){
  28. $zabierzrep = $profile['reputacja'] -1;
  29.  
  30.  
  31. $result = $db->query("UPDATE `users` SET reputacja=$zabierzrep WHERE `id` = $profile[id]")
  32.  
  33.  
  34.  
  35. $result = $db->query("SELECT * FROM users WHERE id=$profile[id]")
  36.  
  37. // get the first (and hopefully only) entry from the result
  38. $row = mysql_fetch_array( $result );
  39. echo 'Zabrałeś punkt reputacji użytkownikowi '.$profile['login'].'';
  40.  
  41. }
  42. }
  43. ?>
Boshi
  1. $sprawdzanie = $db->query("SELECT * FROM reputacja")
brak średnika
GoodStuff
Rzeczywiście, dzięki teraz kolejny problem. Gdy już to poprawiłem . Strona mi się zaczęła rozjeżdżać co za tym idzie przestał działać insert i update.
\
  1. <?
  2. $sprawdzanie = $db->query("SELECT * FROM reputacja");
  3.  
  4. if (($sprawdzanie['id_dodajacego'] == $user['id']) && ($sprawdzanie['id_dodanego'] == $profile['id']))
  5. {
  6. echo"Już dałeś mu punkt reputacji !";
  7.  
  8. }
  9. else{
  10.  
  11. if($_POST['send'] == 2){
  12. $dodajrep = $profile['reputacja'] +1;
  13.  
  14. $result = $db->query("UPDATE `users` SET reputacja=$dodajrep WHERE `id` = $profile[id]")
  15. $result = $db->query("INSERT INTO reputacja (id_dodajacego, id_dodanego) VALUES ('".$user['id']."', '".$profile['id']."')")
  16.  
  17.  
  18. $result = $db->query("SELECT * FROM users WHERE id=$profile[id]")
  19.  
  20.  
  21. $row = mysql_fetch_array( $result );
  22. echo 'Dałeś punkt reputacji użytkownikowi '.$profile['login'].'';
  23.  
  24. }
  25.  
  26.  
  27. if($_POST['send'] == 3){
  28. $zabierzrep = $profile['reputacja'] -1;
  29.  
  30.  
  31. $result = $db->query("UPDATE `users` SET reputacja=$zabierzrep WHERE `id` = $profile[id]")
  32.  
  33.  
  34.  
  35. $result = $db->query("SELECT * FROM users WHERE id=$profile[id]")
  36.  
  37. // get the first (and hopefully only) entry from the result
  38. $row = mysql_fetch_array( $result );
  39. echo 'Zabrałeś punkt reputacji użytkownikowi '.$profile['login'].'';
  40.  
  41. }
  42. }
  43. ?>
Forti
po co te or die pod insert, update itp?

Wyżej napisałem Ci o średniku, trzeba Tobie palcem pokazać linijke i kolumnę abyś sam zaczął szukać? ;>


Rozwiązanie:

Kod
mysql_query($sql);
if (mysql_error()) die('Error, insert query failed with:' . mysql_error());


Pierwszy link z google.
GoodStuff
Pewnie, że nie średniki uzupełniłem
Forti
or die

zamień na to co Ci wyżej podałem. Musisz miec warunek sprawdzający czy jest błąd i ewentualnie rzucić wyjątkiem/błędęm/informacją.
GoodStuff
Chyba nie łapię co chciałeś mi przez to przekazać
Forti
Nie chyba tylko na pewno

  1.  
  2. $result = $db->query("UPDATE `users` SET reputacja=$dodajrep WHERE `id` = $profile[id]")


zmień na

  1.  
  2. $result = $db->query("UPDATE `users` SET reputacja=$dodajrep WHERE `id` = $profile[id]")
  3. mysql_error() ? die(mysql_error()) : null;


albo użyj try - catch bloku.
GoodStuff
Tutaj jest wszystko dobrze, wydaje mi się że if coś psuje ;/?

Bez warunku if wszystko działa jak należy. Jeżeli chodzi o update czy insert

gdy dodaję ten warunek , przestaje ładować dalszy kod strony. Dlaczego?
Forti
Serio?

  1. if (coś) {
  2. a
  3. } else {
  4. b
  5. }



pytasz dlaczebo nie wykonuje się b? Serio?
GoodStuff
Niestety to wiem całkiem o coś innego chodziło . Ale dzięki za naprowadzenie mnie i czas poświęcony smile.gif! Można zamknąć

Myślałem już, że sobie z tym poradziłem ale napotkałem dziwny błąd mianowicie u jednego użytkownika ten warunek if działa a u drugiego nie. Jaka może być przyczyna?

Mniej więcej przy
  1. profile.php?id=10
działa warunek a już przy
  1. profile.php?id=11
nie.

  1. $a = $db->query("SELECT * FROM reputacja");
  2. $a = $a->fetch_array();
  3.  
  4. if (($a['id_dodajacego'] == $user['id']) && ($a['id_dodanego'] == $profile['id'])) {
  5. echo"Gracz już otrzymał od ciebie punkt reputacji! !";
  6.  
  7. }
  8. else{
  9. if($user['id'] == $id){
  10. echo 'Nie możesz przyznać sam sobie punktów reputacji!';
  11. }
  12. else{
  13. echo '<br /><form method="post" action="" enctype="multipart/form-data">
  14. <input type="hidden" name="send" value="2" />
  15. <input type="submit" class="dajpkt" value="" />
  16. </form>';
  17. echo '<form method="post" action="" enctype="multipart/form-data">
  18. <input type="hidden" name="send" value="3" />
  19. <input type="submit" class="zabierzpkt" value="" />
  20. </form><br />';
  21. }
  22. }
  23. if($user['id'] == $id){
  24. echo '<br /><br /><a href="?id='.$id.'&edit=1">Edytuj profil</a>';
  25. echo '<br /><a href="index.php">Powrót</a>';
  26. }
  27. }
  28. }
  29.  
  30. }
  31. else
  32. {
  33. echo "Aby w pełni korzystać z przywilejów tej strony zaloguj się !";
  34.  
  35. }
  36.  
  37. if($_POST['send'] == 2){
  38. $dodajrep = $profile['reputacja'] +1;
  39.  
  40. $result = $db->query("UPDATE `users` SET reputacja=$dodajrep WHERE `id` = $profile[id]")
  41. $result = $db->query("INSERT INTO reputacja (id_dodajacego, id_dodanego) VALUES ('".$user['id']."', '".$profile['id']."')")
  42.  
  43.  
  44. $result = $db->query("SELECT * FROM users WHERE id=$profile[id]")
  45.  
  46.  
  47. $row = mysql_fetch_array( $result );
  48. echo 'Dałeś punkt reputacji użytkownikowi '.$profile['login'].'';
  49.  
  50. }
  51.  
  52.  
  53. if($_POST['send'] == 3){
  54. $zabierzrep = $profile['reputacja'] -1;
  55.  
  56.  
  57. $result = $db->query("UPDATE `users` SET reputacja=$zabierzrep WHERE `id` = $profile[id]")
  58. $result = $db->query("INSERT INTO reputacja (id_dodajacego, id_dodanego) VALUES ('".$user['id']."', '".$profile['id']."')")
  59.  
  60.  
  61.  
  62. $result = $db->query("SELECT * FROM users WHERE id=$profile[id]")
  63.  
  64.  
  65. $row = mysql_fetch_array( $result );
  66. echo 'Zabrałeś punkt reputacji użytkownikowi '.$profile['login'].'';
  67.  
  68. }
Boshi
Nie ma takiego ID widocznie, całość jest false, bo poszczególna część warunku jest false a 1 AND 0 = 0
GoodStuff
Ale dlaczego na jednym działa a na drugim nie chociaż rekordy są takie same
Rochu
Najprościej sprawdź sobie jak warunek w rzeczywistości wygląda, przed instrukcją warunkową wklej sobie to:

  1. echo "if ((".$a['id_dodajacego']." == ".$user['id'].") && (".$a['id_dodanego']." == ".$profile['id']."))";


i wtedy na własne oczy zobaczysz jakie wartości są porównywane i bez problemu powinieneś dojść czemu tak się dzieje.
GoodStuff
Dzięki Rochu rzeczywiście przy id_dodanego zwraca mi zawsze 10 czyli pierwszy rekord dlaczego?

  1. $a = $db->query("SELECT * FROM reputacja");
  2. $a = $a->fetch_array();
  3. echo "if ((".$a['id_dodajacego']." == ".$user['id'].") && (".$a['id_dodanego']." == ".$profile['id']."))";
Forti
Wyświetl sobie

  1. echo $a;


i zobacz jaką ma strukture, co to jest itp.
GoodStuff
Dzięki wszystkim za pomoc , człowiek ciągle się uczy.

Poradziłem sobie w ten sposób
  1. $a = mysqli_fetch_array($db->query("SELECT * FROM reputacja Where id_dodajacego=".$user['id']." and id_dodanego=".$profile['id'].""));
Boshi
Skoro $a jest tablicą to wyświetl ją przez print_r($a) i zobacz co tam siedzi. Ewentualnie var_dump($a)
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.