Visualizzazione risultati 1 fino 19 di 19

Discussione: Query select: perchè non va?

  1. #1
    Guest

    Predefinito Query select: perchè non va?

    in pratica, ho questo codice (che è un sistema di commenti):
    Codice PHP:
    mi connetto al DB e faccio le mie cose

    ...

    $postid = $_GET['postid'];

    ...

    mysql_query("INSERT INTO comments (userid, message) VALUES ('$username', '$content')");
    //QUESTO LO ESEGUE
    $query = mysql_query("SELECT * FROM comments WHERE userid = '$username' AND message = '$content'");
    //ANCHE QUESTO VIENE ESEGUITO CORRETTAMENTE
    while($riga = mysql_fetch_row($query))
    {
    $id = $riga[0];
    //FINO A QUA FUNZIONA
    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '$postid'");
    //QUA NON FA IL WHILE, E NON SO PERCHE'
    while($riga1 = mysql_fetch_row($query1))
    {
    //DA QUA IN POI NON SO NEMMENO SE FUNZIONA D:
    $comments = $riga1[0];
    $conc = CONCAT($comments, ',', '$id');
    $query3 = "UPDATE posts SET comments = '" . $conc . "', timestamp = NOW() WHERE id = '$postid' LIMIT 1";
    if(
    $query3) mysql_query($query3);
    else die(
    "Empty");
    }
    }
    mysql_close();
    ho le tabelle:
    posts -> id, userid, username, message, comments, timestamp (l'interessata è 'comments', dove metto le id dei commenti interessati in fila, come una CSV, cioè separati da virgole, tipo: 0,1 -> le id dei commenti sono 0 e 1)
    comments -> id, userid (che sarebbe 'username' ma non ho voglia di cambiarlo), message, timestamp

    con un campo di testo, aggiungo un post.
    con un altro campo di testo, aggiungo un commento al post di cui ho l'id nel get (..?postid=ID_DEL_POST tipo: ..?postid=0)

    appunto $content è il messaggio del commento e $username è l'username di chi posta
    Ultima modifica di netpost : 05-04-2011 alle ore 18.33.38 Motivo: Altre precisazioni per far capire i concetti

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Hai provato a stampare il contenuto di mysql_error()?

  3. #3
    rikkardo non è connesso Neofita
    Data registrazione
    11-02-2008
    Messaggi
    27

    Predefinito

    Hai provato a mettere le virgolette ` ai nomi delle tabelle e dei campi?

  4. #4
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    a mio avviso, dovresti provare a mettere la $query1 prima del ciclo while (adesso è all'interno del primo ciclo while)

    praticamente dove hai scritto //FINO A QUA FUNZIONA:

    inoltre $postid lo prelevi dal query string tramite GET, dovresti eseguire dei controlli su questa variabile...

    Codice PHP:

    //QUESTO LO ESEGUE
    $query = mysql_query("SELECT * FROM comments WHERE userid = '$username' AND message = '$content'");

    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '$postid'");

    //ANCHE QUESTO VIENE ESEGUITO CORRETTAMENTE
    while($riga = mysql_fetch_row($query))
    {
    $id = $riga[0];
    //FINO A QUA FUNZIONA

    //ecc...
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut
    Hai provato a stampare il contenuto di mysql_error()?
    Edit: Sì, non dà nessun errore (anche seguendo il consiglio di EuroSalute)

    Citazione Originalmente inviato da rikkardo
    Hai provato a mettere le virgolette ` ai nomi delle tabelle e dei campi?
    Già provato, non cambia nulla: difatti ho lasciato com'era di base il codice

    Citazione Originalmente inviato da EuroSalute
    a mio avviso, dovresti provare a mettere la $query1 prima del ciclo while (adesso è all'interno del primo ciclo while)
    Edit: Provato, non ha cambiato nulla direi (salva come sempre il commento nell'apposita tabella, correttamente.. ma non mette l'id del commento nella tabella del post)

    Citazione Originalmente inviato da EuroSalute
    inoltre $postid lo prelevi dal query string tramite GET, dovresti eseguire dei controlli su questa variabile...
    già controllato, dato che è un'abitudine mettere degli echo per ogni cosa che scrivo di cui non sono sicuro sul contenuto
    Ultima modifica di netpost : 05-04-2011 alle ore 20.33.46 Motivo: Quote

  6. #6
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    se non aggiorna l'id, allora c'è qualcosa che non va nella funzione CONCAT....
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Codice PHP:
    $conc = CONCAT($comments, ',', '$id');
    Perché $id è dentro una stringa? Doppi apici vs singoli apici vs niente apici?

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Codice PHP:
    $conc = CONCAT($comments, ',', '$id');
    Perché $id è dentro una stringa? Doppi apici vs singoli apici vs niente apici?
    Semplicemente perchè non so di che formato dev'essere, visto che Dreamweaver non mi segna CONCAT come una funzione di base (tipo NOW(), ecc..) e non ho guardato su nessuna guida PHP dov'è spiegato.. ma comunque non arriva a quel punto, poi lo sistemo, sempre che ci arrivi

  9. #9
    Guest

    Predefinito

    Il problema è che proprio non esegue il secondo while (quello dentro al primo while) e quindi non esegue nemmeno la concatenazione, così da non poter aggiungere nulla al database (UPDATE della tabella, ecc..), quindi il problema dovrebbe stare nella query2 o nel secondo while:
    while($riga1 = mysql_fetch_row($query1))

  10. #10
    Guest

    Predefinito

    il problema dovrebbe essere questo:

    tuo codice:
    $postid = $_GET['postid'];

    invece essendo il campo id un intero non necessita delle virgolette, quindi tecnicamente (per quanto ne sò), il database mysql non te lo esegue perchè non sono identici (cioè dello stesso formato)

    prova a metterlo così

    $postid = $_GET[postid];

  11. #11
    Guest

    Predefinito

    sto provando...

    ...

    eh no, non funziona nemmeno togliendo le virgolette

  12. #12
    Guest

    Predefinito

    dimenticavo, giusto per ricordare.. la query1 è questa:
    Codice PHP:
    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '" . $postid . "'");
    ma ditemi, se metto $postid nella stringa, senza la concatenazione dei . e cose così, non va? di solito facevo senza metterlo fuori dalla stringa, ma giusto per provare ho fatto così: cambia qualcosa?

    cioè:
    Codice PHP:
    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '$postid'");
    Secondo edit.. ma vabbè, comunque:
    Ho fatto controlli su tutte le variabili che ho ottenuto tramite POST, GET, e simili.. tutte sono ben assegnate, nessuna è null o cose simili, quindi, boh, query1 o while della query1
    Ultima modifica di netpost : 06-04-2011 alle ore 17.37.34 Motivo: Dimentico sempre qualcosa.. sembra che non stia usando dei diagrammi di flusso, e infatti..

  13. #13
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    guarda che la sintassi delle query è giusta...

    io non ho mai fatto una cosa del genere, interpolare due cicli while con due query diverse....

    secondo me sarebbe opportuno modificare lo script per farlo funzionare con una sola query per entrambi le tabelle....
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    guarda che la sintassi delle query è giusta...

    io non ho mai fatto una cosa del genere, interpolare due cicli while con due query diverse....

    secondo me sarebbe opportuno modificare lo script per farlo funzionare con una sola query per entrambi le tabelle....
    Eh lo sò, è ovvio.. ma il problema è che non programmo molto (in generale proprio) con PHP e connessioni a DB, ecc..
    Di solito vado di linguaggi per mondi virtuali, ma comunque non c'entra, stile diverso.

    Troverò un modo

  15. #15
    Guest

    Predefinito

    un
    Codice PHP:
    $riga = mysql_fetch_row($query)
    senza il ciclo while, visto che è una sola riga, funziona comunque? sto provando ora

    EDIT:
    una cosa così non funziona:
    Codice PHP:
    ...
    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '$postid'");
    ...
    while(
    $riga = mysql_fetch_row($query))
    {
    ...
    $riga1 = mysql_fetch_row($query1);
    if(
    $riga1)
    {
    ...
    echo
    "Funziona tutto";
    }
    else
    {
    echo
    "Non va qualcosa nella query1 o nella riga1";
    }
    }
    returna che, appunto.. non va la query1, e non so perchè

    (i '...' significano che ho fatto qualcosa di non interente al problema)
    Ultima modifica di netpost : 06-04-2011 alle ore 22.21.25

  16. #16
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    se vuoi fare dei test, prova il seguente codice....

    Codice PHP:
    <?
    $query
    = mysql_query("SELECT * FROM comments WHERE userid = '$username' AND message = '$content'");
    if (!
    $query) die ($query.": ".mysql_error());

    if (
    mysql_num_rows($query)==1){

    $riga = mysql_fetch_row($query);

    //test:
    //echo "<br>";print_r($riga);

    $id = $riga[0];

    }
    //mysql_num_rows($query)
    else echo "<br>Non è stato trovato l'id con userid = $username e message = $content";

    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '$postid'");
    if (!
    $query1) die ($query1.": ".mysql_error());

    if (
    mysql_num_rows($query1)==1){

    if (!empty(
    $id)){

    while(
    $riga1 = mysql_fetch_row($query1))
    {

    //test:
    //echo "<br>";print_r($riga1);

    $comments = $riga1[0];
    $conc = CONCAT($comments, ',', $id);
    $query3 = "UPDATE posts SET comments = '" . $conc . "', timestamp = NOW() WHERE id = '$postid' LIMIT 1";

    if(
    $query3) mysql_query($query3);
    else die(
    "Empty");
    }
    //while

    }//$id

    }//mysql_num_rows($query1)
    else echo "<br>Non sono stati trovati commenti con id=$postid";

    ?>
    con multipli id per userid, farei un while e memorizzo gli id in un array:

    Codice PHP:
    if (mysql_num_rows($query)>0){

    while (
    $riga = mysql_fetch_row($query)){

    //test:
    //echo "<br>";print_r($riga);

    $id[] = $riga[0];

    }
    //while
    }//mysql_num_rows($query)
    else echo "<br>Non sono stati trovati id con userid = $username e message = $content";
    poi con un foreach di $id fado a fare l'update di posts...

    ma non ho chiaro se $postid varia ad ogni richiesta?
    Ultima modifica di EuroSalute : 07-04-2011 alle ore 12.23.44 Motivo: più info...
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  17. #17
    Guest

    Predefinito

    Citazione Originalmente inviato da EuroSalute Visualizza messaggio
    se vuoi fare dei test, prova il seguente codice....

    Codice PHP:
    <?
    $query
    = mysql_query("SELECT * FROM comments WHERE userid = '$username' AND message = '$content'");
    if (!
    $query) die ($query.": ".mysql_error());

    if (
    mysql_num_rows($query)==1){

    $riga = mysql_fetch_row($query);

    //test:
    //echo "<br>";print_r($riga);

    $id = $riga[0];

    }
    //mysql_num_rows($query)
    else echo "<br>Non è stato trovato l'id con userid = $username e message = $content";

    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '$postid'");
    if (!
    $query1) die ($query1.": ".mysql_error());

    if (
    mysql_num_rows($query1)==1){

    if (!empty(
    $id)){

    while(
    $riga1 = mysql_fetch_row($query1))
    {

    //test:
    //echo "<br>";print_r($riga1);

    $comments = $riga1[0];
    $conc = CONCAT($comments, ',', $id);
    $query3 = "UPDATE posts SET comments = '" . $conc . "', timestamp = NOW() WHERE id = '$postid' LIMIT 1";

    if(
    $query3) mysql_query($query3);
    else die(
    "Empty");
    }
    //while

    }//$id

    }//mysql_num_rows($query1)
    else echo "<br>Non sono stati trovati commenti con id=$postid";

    ?>
    con multipli id per userid, farei un while e memorizzo gli id in un array:

    Codice PHP:
    if (mysql_num_rows($query)>0){

    while (
    $riga = mysql_fetch_row($query)){

    //test:
    //echo "<br>";print_r($riga);

    $id[] = $riga[0];

    }
    //while
    }//mysql_num_rows($query)
    else echo "<br>Non sono stati trovati id con userid = $username e message = $content";
    poi con un foreach di $id fado a fare l'update di posts...

    ma non ho chiaro se $postid varia ad ogni richiesta?
    Non essendo abituato a programmare in PHP, posso solo dire che ci proverò, ma comunque, per l'ultima domanda:
    no è unico per ogni post, cioè: ogni post ha il suo textarea per i commenti.. ed $postid è definito da un get

  18. #18
    Guest

    Predefinito

    dopo la if di controllo sulla query1, c'è l'else:
    Codice PHP:
    else echo "<br />Non sono stati trovati commenti con id=$postid";
    ecco, qua mi dà 'id =' senza nulla dopo, eppure ho fatto i controlli così:
    $postid = $_REQUEST['postid'];
    echo $postid . "<br />";

    E per esagerare, ho usato il REQUEST, nemmeno il GET!

    Però non mi returna nulla quando invio il form.

    Ora, per esagerare, ho fatto:
    Codice PHP:
    $postid = $_REQUEST['postid'];
    echo
    $postid . "<br />";
    $query1 = mysql_query("SELECT comments FROM posts WHERE id = '$postid'");
    il REQUEST proprio prima della query, ma non va comunque!! nemmeno scrive il $postid con l'echo prima della query.

    Come da motivo della modifica, dico:
    quando invio il form, la pagina si aggiorna diciamo, ed appunto sparisce il GET dal la barra dell'indirizzo, quindi:
    aggiungo un campo hidden con valore $postid, posto il tutto e provo

    altro edit:
    Fatal error: Call to undefined function CONCAT() in Indirizzo... on line 97
    Ovvero dove c'è la funzione CONCAT: tell me D:

    altro edit:
    $conc = CONCAT($comments, ',', $id);
    questa è la riga: CONCAT non me lo segna come funzione PHP, il caro Dreamweaver.. quindi credo che non esista XD
    Ultima modifica di netpost : 07-04-2011 alle ore 16.33.03 Motivo: Quinto edit, che palle

  19. #19
    Guest

    Predefinito

    Codice PHP:
    $comments = $riga1[0];
    $explode = explode(",", $comments);
    $explode[] .= $id;
    $implode = implode(",", $explode);
    Al posto di CONCAT, ho sperimentato questa funzione con gli array (è la prima volta che li uso usando la logica e non a caso, lol) e funziona tutto:
    GRAZIE, veramente GRAZIE

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •