Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Errore sintassi MySQL con funzione php date()

    Ciao a tutti ho un problema con uno script che dovrebbe inserirmi nel database MySQL dei dati relativi a degli articoli che gli utenti pubblicano, uno di questi è la data di pubblicazione, che, a quanto pare, da problemi ad essere accettata da MySQL.

    la tabella MySQL contiene:
    article_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

    user_id INTEGER UNSIGNED NOT NULL,

    is_published BOOLEAN NOT NULL DEFAULT FALSE,

    submit_date DATETIME NOT NULL,

    publish_date DATETIME,

    title VARCHAR(255) NOT NULL,

    article_text MEDIUMTEXT,
    lo script di transazione contiene:
    codice:
    case 'Submit New Article':
            $title = (isset($_POST['title'])) ? $_POST['title'] : '';
            $article_text = (isset($_POST['article_text'])) ? $_POST['article_text'] : '';
            if (isset($_SESSION['user_id']) && !empty($title) &&
                !empty($article_text)) {
                $sql = 'INSERT INTO cms_articles
                        (user_id, submit_date, title, article_text)
                    VALUES
                        (' . $_SESSION['user_id'] . ', 
                        "' . date('Y-m-d H:i:s') . '",
                        "' . mysql_real_escape_string($title, $db) . '",
                        "' . mysql_real_escape_string($article_text, $db) . '")';
                mysql_query($sql, $db) or die (mysql_error($db));
            }
            redirect('cms_index.php');
            break;
    e testandolo mi si presenta il seguente errore:
    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 ' "2010-09-20 23:37:28", "titolo", ' at line 4
    dove "2010-09-20 23:37:28" è la data di pubblicazione e "titolo" è semplicemente il corrispettivo di title.

    a cosa può essere dovuto esattamente? non capisco..
    Perpetual Ribellion With Absolutely No Cause

  2. #2
    stampa la query:

    echo $sql;

    comunque la mia esperienza dice di usare sempre i doppi apici per racchiudere la stringa SQL e l'apice per delimitare le stringhe. Si evitano facili errori.

    ed anche per le date perche' usare date() del php quando esiste NOW() di mysql....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Originariamente inviato da piero.mac
    stampa la query:

    echo $sql;

    comunque la mia esperienza dice di usare sempre i doppi apici per racchiudere la stringa SQL e l'apice per delimitare le stringhe. Si evitano facili errori.

    ed anche per le date perche' usare date() del php quando esiste NOW() di mysql....
    Sta sera provo sulla macchina interessata.. perdonami ma sto seguendo un manuale e sto studiando gli script su quest'ultimo, non senza problemi purtroppo.. proverò a stampare $sql e a sostituire date() con NOW(), basta racchiuderlo fra doppi apici " NOW() ", giusto?

    $sql = 'INSERT INTO cms_articles
    (user_id, submit_date, title, article_text)
    VALUES
    (' . $_SESSION['user_id'] . ',
    " NOW() ",
    "' . mysql_real_escape_string($title, $db) . '",
    "' . mysql_real_escape_string($article_text, $db) . '")';
    mysql_query($sql, $db) or die (mysql_error($db));
    p.s.: Avevo già provato ad eliminare il ciclo if (per forzarlo a inserire subito i dati in tabella), e in secondo luogo a stampare $title e $text_title che sono gli unici due campi inviati, li recupera tranquillamente e li stampa..
    Perpetual Ribellion With Absolutely No Cause

  4. #4
    Codice PHP:
    $title mysql_real_escape_string($title$db);
    $article mysql_real_escape_string($article_text$db);

    $sql "INSERT INTO cms_articles
    (user_id, submit_date, title, article_text)
    VALUES
    (
    $_SESSION[user_id], NOW(), '$title', '$article')";

    echo 
    $sql;

    mysql_query($sql$db) or die (mysql_error($db)); 
    prova anche cosi'.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Ho provato la versione che hai postato, aggiungendo gli apici a '$_SESSION[user_id]' (se no mi dava un errore di sintassi.. Ora mi ha inserito solo il valore della data dato da NOW(), tutti gli altri campi li ha lasciati vuoti, lo stamp di $sql riporta
    INSERT INTO cms_articles (user_id, submit_date, title, article_text) VALUES ('', NOW(), '', '')
    Perpetual Ribellion With Absolutely No Cause

  6. #6
    Codice PHP:
    case 'Submit New Article':
            
    $title = (isset($_POST['title'])) ? $_POST['title'] : '';
            
    $article_text = (isset($_POST['article_text'])) ? $_POST['article_text'] : '';
            
    $user_id = (isset($_SESSION['user_id'])) ? $_SESSION['user_id'] : '';
                
    $sql "INSERT INTO cms_articles
            (user_id, submit_date, title, article_text)
            VALUES
            ('
    $user_id', NOW(), '$title', '$article_text')";

                
    mysql_query($sql$db) or die (mysql_error($db));
            
            
    redirect('cms_index.php');
            break; 
    ora tutto viene inserito nel database tranne che per l'user_id passato tramite $_SESSION.. eppure nella pagina del form se stampo $_SESSION['user_id'] lo mostra esatto..

    -EDIT-

    Ok, ho cambiato lo script passandogli l'user_id per $_POST anzichè con la sessione ed ora va.. strano comunque..
    Perpetual Ribellion With Absolutely No Cause

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.