Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Porównanie zawartośći zmiennej z zawartością kolumny w bazie.
Forum PHP.pl > Forum > Przedszkole
pzcjnr
Witam. Tworze swój pierwszy skrypt w php, doszedłem do momentu, w którym nie mogę sobie poradzić i prosił bym o pomoc doświadczonych kolegów.
Mianowicie mam formularz, potrzebuje porównać czy to co zostanie przekazane w formularzu znajduje się w pewnej tabeli w bazie danych.
Dokładniej:
1. W formularzu wpisuje login użytkownika i chce sprawdzić czy użytkownik o takim loginie istnieje w bazie. Więc dane z formularza przekazuje sobie do zmiennej, wszystko jest ok.
2. Połączenie z bazą danych mam ok, bez błędów.
3. Chce sprawdzić czy login przekazany w zmiennej znajduje się w kolumnie username tabeli user i jeśli tak pobrać userid użytkownika o tym username(loginie), jeśli nie wyświetlić stosowny komunikat. Nie wiem za bardzo jak się do tego zabrać. Prubuje coś z takim zapytaniem

Kod
$query = 'SELECT username, userid FROM user where username == $zmienna';


ale po pierwsze nie działa, a po drugie nawet gdyby zadziałało i wyświetli mi to to nie wiem jak to przypisać potem zmiennej...

Może kombinuje za bardzo, nie wiem, jest to mój pierwszy skrypt w php, przeczytałem tylko jedną książkę o php 5 jednak mało jest tam o pracy z bazami danych. Proszę o jakąś pomoc jeśli to możliwe, jesli nie to chociaż jakieś wskazówki lub polecenie dobrej literatury, która pomoże mi rozwiązać moje problemy. Pozdrawiam
K4mil94
Zapytanie ma być:
Kod
SELECT username, userid FROM user WHERE username='$zmienna'
artur_dziocha
bardzo ciekawa strona
Temat: linkiKursy_dla_poczatkujacych
poklikaj, poczytaj
Maxik
W zapytaniu nie == tylko =, dodatkowo string w zapytaniu powinien być w ' i ', a samo zapytanie powinno być w " i "
  1. <?php
  2. $query = "SELECT username, userid FROM user WHERE username='".$zmienna."'";
  3. ?>


Potem sprawdzasz:
  1. <?php
  2. if(mysql_num_rows(mysql_query($query)==1){
  3. echo 'zalogowano';
  4. } else{
  5. echo 'błąd';
  6. }
  7. ?>
pzcjnr
Użyłem tego zapytania, nawet tak by samo id zwracało tylko czyli w moim przypadku:
Kod

<?php
$query = "SELECT userid FROM user WHERE username='".$wyzywaj."'";
$wynik = mysql_query($query);
echo ("Wynik rowna sie: $wynik");
?>

Zrobiłem tak by sprawdzić co zwraca mi zapytanie. Powinno mi zwrócić samą liczbę, (1 w przypadku który testuje)
a zwraca mi zawsze taki ciąg:
Kod
Wynik rowna sie: Resource id #2

Co może powodować ten błąd?
K4mil94
  1. <?php
  2. $zapytanie = "SELECT * FROM users WHERE username='$wyzywaj';";
  3. $wynik = mysql_query($zapytanie);
  4. $dane = mysql_fetch_array($wynik);
  5. $id = $dane['userid'];
  6. echo "Wynik równa się: $id";
  7. ?>
To spróbuj.
pianta_d
Poczytaj o mysql_fetch_array



Powinno pomóc
pzcjnr
dzięki, zmodyfikowałem trochę kod kolegi K4mil94 i działa tak jak chce. Mam jeszcze tylko mały problem ze składnią zapytania insert. Mianowicie mam tak:

Kod
if (mysql_num_rows($wynik)==1 && mysql_num_rows($wynik2)==1){
$zapis = "INSERT INTO Bitwy (id_bitwy, wyzywajacy, wyzywany, status) VALUES ('NULL, $id, $id2, ".$status."')";

W ogóle mi nie zapisuje do bazy nic. id_bitwy jest ustawione na auto_increment, czytałem, że wtedy trzeba wstawić Null w zapytaniu żeby poprawnie dodało może jednak trzeba inaczej. Skrypt nie zgłasza błędu, po prostu się nie zapisuje nic.
K4mil94
  1. <?php
  2. $zapytanie = "INSERT INTO `Bitwy`(`id_bitwy`, `wyzywajacy`, `wyzywany`, `status`) VALUES ('', '$id', '$id2', '$status');";
  3. $wynik = mysql_query($zapytanie);
  4. ?>
Tak zobacz. I czy na id_bitwy masz ustawiony Primary Key ?
piotrooo89
~K4mil94 jak podajesz to rób to poprawnie.

  1. <?php
  2. $zapytanie = "INSERT INTO `Bitwy`(`wyzywajacy`, `wyzywany`, `status`) VALUES ('".$id."', '".$id2."', '".$status."')";
  3. $wynik = mysql_query($zapytanie);
  4. ?>
InosU31
Cytat(pzcjnr @ 27.03.2009, 16:30:41 ) *
dzięki, zmodyfikowałem trochę kod kolegi K4mil94 i działa tak jak chce. Mam jeszcze tylko mały problem ze składnią zapytania insert. Mianowicie mam tak:

Kod
if (mysql_num_rows($wynik)==1 && mysql_num_rows($wynik2)==1){
$zapis = "INSERT INTO Bitwy (id_bitwy, wyzywajacy, wyzywany, status) VALUES ('NULL, $id, $id2, ".$status."')";

W ogóle mi nie zapisuje do bazy nic. id_bitwy jest ustawione na auto_increment, czytałem, że wtedy trzeba wstawić Null w zapytaniu żeby poprawnie dodało może jednak trzeba inaczej. Skrypt nie zgłasza błędu, po prostu się nie zapisuje nic.



nie wiem czy to wazne ale czy nie powinno byc tak ? :
  1. <?php
  2. if (mysql_num_rows($wynik) ==0 && mysql_num_rows($wynik2)==0) //jesli ilosc wynikow rowna 0 - czyli nie znaleziono to wtedy wykonuje ponizsza instrukcje czyli INSERT
  3. {
  4. ?>

a pozniej tak jak panowie wyzej Ci napisali ;-)
pzcjnr
tak, id bitwy jest primary key-em.
Testowałem oba kody niestety przy obydwóch to samo czyli dalej nie zapisuje. Czy może mieć to znaczenie, że w tej tabeli mam jeszcze kilka kolumn w których nie zapisuje nic przy tym zapytaniu? jednak mają ustawione, "Null" na tak więc chyba powinno być ok.

Generalnie struktura mojej tabeli wygląda tak:


Naprawdę już nie wiem co jest nie tak.
K4mil94
@piotrek mi działa tak jak podałem.
------------------------------------------
Zmień z int na tinyint
pzcjnr
Cytat(InosU31 @ 27.03.2009, 17:11:52 ) *
nie wiem czy to wazne ale czy nie powinno byc tak ? :
  1. <?php
  2. if (mysql_num_rows($wynik) ==0 && mysql_num_rows($wynik2)==0) //jesli ilosc wynikow rowna 0 - czyli nie znaleziono to wtedy wykonuje ponizsza instrukcje czyli INSERT
  3. {
  4. ?>

a pozniej tak jak panowie wyzej Ci napisali ;-)


nie, tak jak jest. W formularzu są podawane dwa nicki userów, skrypt sprawdza czy userzy z takimi nickami rzeczywiście są w tabeli user jeśli są to wtedy zapisuje ich id do tabeli bitwy, w polach id1, i id2. Może na pierwszys rzut oka trochę nie logicznie ale chodzi o to by była możliwość zapisywania tylko tych id userów którzy są w bazie w tabeli z użytkownikami.
InosU31
Cytat(pzcjnr @ 27.03.2009, 17:26:13 ) *
nie, tak jak jest. W formularzu są podawane dwa nicki userów, skrypt sprawdza czy userzy z takimi nickami rzeczywiście są w tabeli user jeśli są to wtedy zapisuje ich id do tabeli bitwy, w polach id1, i id2. Może na pierwszys rzut oka trochę nie logicznie ale chodzi o to by była możliwość zapisywania tylko tych id userów którzy są w bazie w tabeli z użytkownikami.



nie wiem czy rozumiem dobrze ale jesli masz tabele i w niej umieszczone jakies dane (np. niki) i chcesz je uzupelnic to moze uzyj:
  1. <?php
  2. $zapytanie = "UPDATE bitwy SET wyzywajacy = '$id, wyzywany = '$id2', status ='$status')";
  3. $wynik = mysql_query($zapytanie);
  4. ?>


"bitwy" powinienes napisac z malej bo tak masz w bazie z tego co widze
pianta_d
Nie tak
  1. <?php
  2. $zapytanie = "UPDATE bitwy SET wyzywajacy = '$id, wyzywany = '$id2', status ='$status')";
  3. ?>


ale tak
  1. <?php
  2. $zapytanie = "UPDATE bitwy SET wyzywajacy = '".$id."', wyzywany = '".$id2."', status ='".$status."')";
  3. ?>
pzcjnr
Cytat(InosU31 @ 27.03.2009, 17:41:40 ) *
nie wiem czy rozumiem dobrze ale jesli masz tabele i w niej umieszczone jakies dane (np. niki) i chcesz je uzupelnic to moze uzyj:
  1. <?php
  2. $zapytanie = &#092;"UPDATE bitwy SET wyzywajacy = '$id, wyzywany = '$id2', status ='$status')\";
  3. $wynik = mysql_query($zapytanie);
  4. ?>


"bitwy" powinienes napisac z malej bo tak masz w bazie z tego co widze


nie, tabela bitwy jest w 100 % czysta. Żadnych danych. Dane mam w tabeli user. Tabela user jest główną tabelą mojego skryptu forum (vBulletin) Pisze małą modyfikacje i na jej potrzeby utworzyłem nową tabelę (bitwy) i do niej chce zapisać dane.

EDIT: Już wszystko ok. Miałem bardzo głupi błąd na który zwrócił mi uwagę InosU31. Mianowicie w zapytaniu miałem "bitwy' z dużej a należało użyć z małej tak jak w bazie co jest zresztą logiczne.
Dziękuje wszsytkim za pomoc.
InosU31
to w takim razie moze tak zadziala (nie jestem pewien bo nie sprawdzilem):

musisz najpierw wykonac zapytanie ktore wybierze ci userow:
  1. <?php
  2. $users = mysql_query ("SELECT * FROM 'user' WHERE id = '$id'");
  3. if (mysql_num_rows($users) != 0) // jesli istnieje to  
  4.  
  5. {
  6. $dane = "INSERT INTO `Bitwy`(`wyzywajacy`, `wyzywany`, `status`) VALUES ('".$id."', '".$id2."', '".$status."')"; // doda ci do drugiej tabeli te dane
  7. $wynik = mysql_query($dane);
  8. }
  9. ?>
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.