Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Sprawdzanie czy istnieje już taki tytuł (videos system)


Przejdź do rozwiązania Rozwiązane przez Macsch15,

Rekomendowane odpowiedzi

Opublikowano

Przeszukałem plik i znalazłem tylko jeden fragment:

$this->DB->insert( 'videos', $save );

PS. Nie wiem czy to przydatne ale tabela która odpowiada za filmy nazywa się "ipb_videos" a kolumna odpowiadająca za tytuły "title"

admin4YSh2.png


 

Opublikowano

Daje kilka fragmentów bo nie jestem pewien który się przyda a który nie:

protected function mainSave( $type='add' )
	{		
		$save = array();

Z kodem wyżej jest tego spory kawałem więc wkleiłem tylko fragment ze zmienną

	$save['title']        = $this->request['title'];
        $save['seo_title']    = IPSText::makeSeoTitle( $this->request['title'] );       
        $save['short_desc']   = $this->request['short_desc'];
        $save['cid']          = $catID;
        $save['last_updated'] = time();
		if( !$save['title'] OR !$save['cid'] )
		{
			$this->registry->output->showError( 'required_fields' );
		}

Poniższy kod jest w tym samym warunku if co ten który wyszukiwałem "$this->DB..."

$save['video_id'] = $videoID;

Zmienna $save jest użyta jeszcze sporo razy, ale używana do np. kodu embed itp więc nie wklejałem.

admin4YSh2.png


 

Opublikowano

Wkleiłem ten kod:

//jeżeli wysłano formularz
        $this->DB->build( array( 'select' => 'COUNT(*) as test', 'from' => 'ipb_videos', 'where' => 'title = '.$this->request['title'] ) );
        $this->DB->execute();
        $count = $this->DB->fetch();
if($count > 0)
{
//juz jest
}
else
{
//nie ma jeszcze
}

po wysłaniu filmu z istniejącym tytułem już w bazie wyskoczył Driver error

W logach z cache jest:

Error: 1064 - 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 '2' at line 1
 IP Address: 83.21.62.45 - /index.php?app=videos
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 mySQL query error: SELECT COUNT(*) as test FROM ipb_ipb_videos WHERE title = Auta 2
 .--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
 | File                                                                       | Function                                                                      | Line No.          |
 |----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------|
 | admin/applications_addon/other/videos/modules_public/post/submit.php       | [public_videos_post_submit].mainSave                                          | 37                |
 '----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------'
 | admin/sources/base/ipsController.php                                       | [public_videos_post_submit].doExecute                                         | 306               |
 

Po wysłaniu filmu z tytułem którego jeszcze nie ma jest to samo ale z innym błędem:

Error: 1146 - Table 'ponawija_foru.ipb_ipb_videos' doesn't exist
 IP Address: 83.21.62.45 - /index.php?app=videos
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 mySQL query error: SELECT COUNT(*) as test FROM ipb_ipb_videos WHERE title = teretre
 

Zauważyłem że jeżeli w kodzie jest

'from' => 'ipb_videos',

to w błędzie dodany jest prefiks, więc zmieniłem ten fragment na bez prefiksu:

'from' => 'videos',

przesłałem film o nowym tytule i znów driver error i błąd o treści:

Error: 1054 - Unknown column 'teretre' in 'where clause'
 IP Address: 83.21.62.45 - /index.php?app=videos
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 mySQL query error: SELECT COUNT(*) as test FROM ipb_videos WHERE title = teretre

A po wyslaniu takiego samego tytułu pojawia się taki błąd:

Error: 1064 - 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 '2' at line 1
 IP Address: 83.21.62.45 - /index.php?app=videos
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 mySQL query error: SELECT COUNT(*) as test FROM ipb_videos WHERE title = Auta 2

admin4YSh2.png


 

Opublikowano

Spokojnie spokojnie, Teez się zapędził.

'title = '.$this->request['title'] ) );

Zamień na:

'title = "'.$this->request['title'] . '"' ) );

 

if($count > 0)

Zamień na:

if($count['test'] > 0)
  • Lubię to 2
  • Rozwiązanie
Opublikowano

Zamień cały dodany kod na:

$this->DB->buildAndFetch(
    array(
        'select' => 'title',
        'from'   => 'videos',
        'where'  => 'title = "' . $this->request['title'] . '"'
    )
);

if($this->DB->getTotalRows())
{
    $this->registry->output->showError('...');
}
  • Lubię to 2
Opublikowano

Działa jak należy. Przy wysłaniu takiego samego tytułu wyświetla się strona błędu.

 

Ogromnie dziękuję za poświęcenie tyle czasu i pracy. Pewnie poszłoby o wiele szybciej gdyby nie moja bardzo mała wiedza.

admin4YSh2.png


 

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.