A Wam wszystkim ciężko opisać problem, tylko z błota w bagno kolege wprowadzacie?
Więc może ja spróbuje pomóc. Opiszmy więc problem.
<?php
$tworz = "create table ksiazki (id int unsigned not null auto_increment, tytul
varchar(24) not null, autor varchar(24) not null, ilosc int not null, primary key (id))";
$dodaj = ("insert into ksiazki values('0', '$_POST[tytul]','$_POST[autor]','$_POST[ilosc]')");
if ($laczenie && $wybierz) {
echo 'polaczyles sie z baza <br />'; } else {
if ($_POST[tytul] <> NULL && $_POST[autor] <> NULL && $_POST[ilosc] > 0) {
echo '<br />dodano rekord'; }
}
} else {
echo 'brak polaczenia <br />'; }
?>
Do linijki 2 jest dobrze, a w niej:
<?php
?>
Jeżeli nie korzystasz z mysql w formie okienkowej, tylko łączysz się za pomocą standardowych funkcji w php, to polecenie wygląda nieco inaczej:
<?php
?>
Linia nr. 3. Niby wszystko ok, ale zapewne jesteś nastawiony na przyjmowanie tego typu zgłoszeń, czyli książek, więc śmiało możesz ręcznie (poprzez np. phpMyAdmin'a) wstawić tabelę do bazy danych aby nie przejmować się tym później w skrypcie. Możesz śmiało wyrzucić tę linijkę.
Linia nr. 5. Zapytanie możesz śmiało zadeklarować w momencie w którym będzie ono potrzebne więc linijka jest do przeniesienia.
Przechodzimy do if'a. Dobrze jest sprawdzana pierwsze zmienna, czyli '$laczenie', druga zaś, tak jak wcześniej wspomniałem, jest zbędna.
Przejdźmy do pierwszego zagnieżdzonego if'a:
<?php
?>
- to zapytanie spróbuje utworzyć tabelę w bazie danych, co wywoła niepotrzebnie zapytanie, to już omawialiśmy.
Dalej:
<?php
if ($_POST[tytul] <> NULL && $_POST[autor] <> NULL && $_POST[ilosc] > 0)
?>
Jeżeli chodzi o tablice asocjacyjne to należy nazwy pól ujmować w apostrofy lub cudzysowy, czyli ilustrując przykładem:
<?php
$_POST['tytul'] // a nie $_POST[tytul]
?>
.
I tutaj w tym miejscu należy wykonać zapytanie. Nie jest koneiczne najpierw umieszczanie treści zapytania w zmiennej a później deklarowanie w funkcji mysql_query(), bo to niepotrzebne zajmowanie pamięci.
Czyli teraz deklarujemy zapytanie:
<?php
$zapytanie = mysql_query("INSERT INTO ksiazki VALUES('". $_POST['tytul'] ."', '". $_POST['autor'] ."', '". $_POST['ilosc'] ."') "); ?>
W tym miejscu zanim wypiszemy treść: 'dodano rekord', przydałoby się sprawdzić czy zapytanie zostało poprawnie wykonane. Pomoże nam w tym zmienna $zapytanie, do której 'wrzucony' został efekt wykonywania zapytania.
<?php
if ( $zapytanie )
{
echo 'dodano rekord <br />'; }
?>
Ok więc omówinie skryptu chyba zakończone. Przejdźmy do dalszych pytań.
Cytat
chodzi mi o to zeby w 15 linijce przed zapytaniem mysql wprowadzic instrukcje if zeby sprawdzala czy dana ksiazka jest juz w magazynie a jesli tak zeby jej nie dodawala
Powinniśmy więc zaraz za sprawdzenie połączenia wywołać zapytanie które sprawdzi czy istnieje dana książka w bazie danych. Nie mamy tutaj neistety zabardzo jak zidentyfikować książki, np. po identyfikatorze ISBN, więc posłużymy się tytułem.
<?php
$zapytanie = mysql_query("SELECT tytul FROM ksiazki WHERE tytul = '". $_POST['tytul'] ."' "); $rows = mysql_num_rows( $zapytanie ); // zmienna $tablica zawiera dane dotyczace ilosci rekordow z tytulem podanym w for
mularzu // pozostaje sprawdzic czy liczba jest wieksza od 0
if ( $rows > 0 )
{
echo 'książka o podanym tytule znajduje się już w bazie danych'; } else
{
// dalsza część skryptu związana z dodaniem książki do bazy
}
?>
Cytat
aby po kazdorazowym dodaniu ksiazki wyswietlony zostal stan magazynu
Więc zaraz za funkcją dodającą książkę należy wyświetlić stan:
<?php
$zapytanie = mysql_query("SELECT * FROM ksiazki"); // brak klauzuli WHERE oznacza że pobrane zostan szystkie rekordy z tabeli {
echo 'ID: '. $tablica['id'] .' tytuł '. $tablica['id'] .'<br />'; }
?>
Ok. Troszkę namotałem więc przedstawię jak to powinno wyglądać w caej okazałości.
<?php
if ( $laczenie && $wybierz )
{
echo 'polaczyles sie z baza <br />';
$zapytanie = mysql_query("SELECT tytul FROM ksiazki WHERE tytul = '".
$_POST['tytul'] ."' ");
$rows = mysql_num_rows( $zapytanie ); // zmienna $tablica zawiera dane dotyczace
ilosci rekordow z tytulem podanym w formularzu
// pozostaje sprawdzic czy liczba jest wieksza od 0
if ( $rows > 0 )
{
echo 'książka o podanym tytule znajduje się już w bazie danych'; } else
{
if ( $_POST['tytul'] <> NULL && $_POST['autor'] <> NULL )
{
$zapytanie = mysql_query("INSERT INTO ksiazki VALUES('". $_POST['tytul']
."', '". $_POST['autor'] ."', '". $_POST['ilosc'] ."') ");
if ( $zapytanie )
{
echo 'dodano rekord <br />';
$zapytanie = mysql_query("SELECT * FROM ksiazki"); // brak klauzuli
WHERE oznacza że pobrane zostan szystkie rekordy z tabeli
{
echo 'ID: '. $tablica['id'] .' tytuł '. $tablica['id'] .'<br />'; }
}
}
}
} else
{
echo 'brak polaczenia <br />'; }
?>
Uff... chyba wszystko jest ok
EDIT: oops, zapomnialem o wybraniu bazy, omg - juz dodałem do tego ostatniego kodu