Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Dove Sbaglio? [INSERT]

  1. #1

    Dove Sbaglio? [INSERT]

    Non avendo avuto molto successo con un altro script sto provando questo che ho un pò modificato per conto mio ....

    E' un motore di ricerca a cui vorrei implementare un INSERT della parola chiave ricercata e aggiungere un campo in + su cui ricercare.


    codice:
    <?php
    $host="localhost";
    $uid="+++++++";
    $pw="+++++++++";
    $db="+++++++++++";
    $tabella="++++++++";
    $campo="descrizione";
    $ordinaper="nome";
    
    // inizio script
    if(!$stringa or $stringa=="")
    {
    echo "<font face=\"arial\" size=\"2\">E' necessario specificare la/le parola/parole da cercare
    <a href=\"javascript:history.back()\">indietro</a></font>";
    exit();
    }
    if($ordine=="crescente") { $ord="ASC"; }
    elseif($ordine=="decrescente") { $ord="DESC"; }
    $cn=mysql_connect($host,$uid,$pw);
    mysql_select_db($db,$cn);
    $query="INSERT INTO ricerche SET key='$stringa'"; 
    $sql="SELECT * FROM $tabella WHERE ";
    if($criterio=="esatta")
    {
    $sql.="$campo LIKE '%$stringa%' ORDER BY $ordinaper $ord";
    }
    elseif($criterio=="almeno")
    {
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="$campo LIKE '%$lista_parole[$i]%' OR ";
    }
    $str=substr($str,0,(strlen($str)-3));
    $sql.=$str." ORDER BY $ordinaper $ord";
    }
    elseif($criterio=="tutte")
    {
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="$campo LIKE '%$lista_parole[$i]%' AND ";
    }
    $str=substr($str,0,(strlen($str)-4));
    $sql.=$str." ORDER BY $ordinaper $ord";
    }
    $query=mysql_db_query($db,$sql);
    $num=mysql_num_rows($query);
    ?>
    
    <font face="arial" color="red">Risultati della ricerca</font>
    
    
    
    <?
    if($num<1)
    {
    // se la ricerca non produce risultati
    echo "<font face=\"arial\" size=\"2\">Porca vacca! La ricerca: $stringa non ha prodotto alcun risultato.
    <a href=\"javascript:history.back()\">riprova affinando la tua ricerca</a></font>";
    }
    elseif($num>=1)
    { 
    // cosa hai cercato
    echo "Hai cercato $stringa 
    
    ";
    while($riga=mysql_fetch_array($query))
    {
    // risultati
    echo "$riga[title]
    ".nl2br($riga[nome])."</br> $riga[descrizione] 
    ";
    echo "<a href=http://$riga[host]>$riga[host]</a>
    
    ";
     }
    }
    mysql_close($cn);
    ?>
    Premetto che non sono una cima con il PHP

    Grazie a chi mi darà una mano
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2

    insert o update?

    Quella che hai usato tu è la query dell'UPDATE non dell'insert, l'insert si fa così:
    codice:
    $query="INSERT INTO ricerche (key) VALUES ('$stringa')";
    Poi...dove la esegui la query? :master:
    Abituati ad usare la notazione dell'errore per ogni istruzione mysql, in modo che se c'è un errore te lo segnala:

    codice:
    $result = mysql_query($query)or die("Errore durante l'inserimento: ".mysql_error());
    vedi sintassi insert

    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  3. #3
    Innanzitutto grazie per l'aiuto e le dritte .. fanno sempre comodo a noi pivellini

    In effetti mi da un errore ... grrr .. sembra di sintassi, ma la Sintassi a me pare corretta!

    if($ordine=="crescente") { $ord="ASC"; }
    elseif($ordine=="decrescente") { $ord="DESC"; }
    $cn=mysql_connect($host,$uid,$pw);
    mysql_select_db($db,$cn);
    $query="INSERT INTO ricerche (key) VALUES ('$stringa')";
    $result = mysql_query($query)or die("Errore durante l'inserimento: ".mysql_error());

    $sql="SELECT * FROM $tabella WHERE ";
    if($criterio=="esatta")
    {
    $sql.="$campo LIKE '%$stringa%' ORDER BY $ordinaper $ord";
    }
    elseif($criterio=="almeno")
    {
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="$campo LIKE '%$lista_parole[$i]%' OR ";


    ........................
    Questo l'errore
    Errore durante l'inserimento: 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 'key) VALUES ('prova')' at line 1
    Perchè uso Maxthon? | Mi piace questa chat

  4. #4
    La sintassi dell'insert in sè mi sembra corretta, potrebbe però darsi che la stringa ch tu vai ad inserire contenga particolare caratteri di escape. Prova a mettere questa istruzione prima della query:

    codice:
    $stringa = mysql_escape_String($stringa);
    che ti aggiunge eventuali caratteri di escape: http://php.libero.it/manual/it/funct...ape-string.php

    Prima se la tua stringa era così:

    L'aquila -> dava problemi perché c'era un apice di troppo con mysql_escape_string diventa così L\'aquila [edit -> il forum mi toglie lo slash prima dell'apostrofo] e non dà nessun problema.

    Se comunque ti dovesse dare ancora problema fai un echo della tua query subito dopo averla definita e prova a vedere cosa ti stampa.

    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  5. #5
    - Errata corrige -
    Leggendo più attentamente l'errore ho notato che l'errore sta nell'uso di key che è una parola riservata, quindi non la puoi utilizzare in mysql, cambia il nome di quel campo.
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  6. #6
    Originariamente inviato da 13manuel84
    - Errata corrige -
    Leggendo più attentamente l'errore ho notato che l'errore sta nell'uso di key che è una parola riservata, quindi non la puoi utilizzare in mysql, cambia il nome di quel campo.
    Ma porc zozz figl di put mannagg azz grr grr grr
    Allora ho perso 3 giorni sull'altro script per la KEY che non sapevo fosse proibita ...

    difatti ora funziona tutto perfettamente !!!

    E io che m'ero rifatto tutto daccapo !!!!

    Grazie grazie grazie grazie
    per avermi svelato l'arcano!!!
    Perchè uso Maxthon? | Mi piace questa chat

  7. #7
    Prego!
    http://dev.mysql.com/doc/mysql/en/Reserved_words.html

    Qui trovi l'elenco delle parole riservate, così la prossima volta eviti di perderci tre giorni.

    ciao
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    Me lo stampo in capoccia quell'elenco giuro!!!


    Scusami se insisto .. ma 'sto motore mi sta sconvolgendo la vita.
    Per ora lui ricerca nel campo "descrizione" ma vorrei che lo facesse anche nel campo "nome" ....

    Mi son detto, facile .. basta che nella SELECT metta "nome, descrizione" .. col cavolo ... mi da questo errore:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/local/www/web/++++++++.it/result.php on line 52

    questa è la query

    // uso -Tutte-
    elseif($criterio=="tutte")
    {
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="nome, descrizione LIKE '%$lista_parole[$i]%' AND ";
    }
    $str=substr($str,0,(strlen($str)-4));
    $sql.=$str." ORDER BY $ordinaper $ord";
    }
    $query=mysql_db_query($db,$sql);
    $num=mysql_num_rows($query);


    Perchè in un campo si e in 2 no? Fa dei processi diversi il php? Devo dargli qualche istruzione maggiore?

    Grazie
    Perchè uso Maxthon? | Mi piace questa chat

  9. #9
    Ti conviene salvarlo nei preferiti piuttosto che solo in testa

    Comunque, la tua clausola nome,descrizione sembra la clausola di un WHERE e non di una SELECT, la sintassi così è errata, se vuoi selezionare più campi lo puoi fare tranquillamente:

    codice:
    SELECT campo1, campo2, campo3 FROM tabella WHERE (condizione)
    Volendo puoi selezionare tutti i campi mettendo un semplice *

    codice:
    SELECT * FROM tabella WHERE (condizione)
    Vedi sintassi SELECT

    Altra cosa, abituati a mettere la notazione dell'errore per OGNI query che esegui, così se c'è un errore te lo segnala dicendoti precisamente di che errore si tratta:

    codice:
    $query = mysql_db_query($db,$sql)or die("Errore: ".mysql_error());
    Abituati inoltre ad usare mysql_query al posto di mysql_db_query e ad aprire preventivamente una connessione. mysql_db_query è stata fortemente sconsigliata a partire dalla versione 4.0.6 di PHP. Qui trovi le ragioni.

    Nel tuo testo inoltre non si capisce come costruisci la query, l'unica cosa che si capisce è che la costruisci a pezzi; intanto che fai tutte queste prove, prova a far stampare la query subito prima di eseguirla (piazzaci quindi un echo $sql;) e vedi cosa contiene, se ci sono errori di sintassi è molto più semplice rintracciarli, perché vedi la query sott'occhi e non devi immaginarla.

    Sono piccoli consigli che mi permetto di darti perché ci sono passato anche io
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  10. #10
    Originariamente inviato da 13manuel84
    Ti conviene salvarlo nei preferiti piuttosto che solo in testa

    Comunque, la tua clausola nome,descrizione sembra la clausola di un WHERE e non di una SELECT, la sintassi così è errata, se vuoi selezionare più campi lo puoi fare tranquillamente:

    codice:
    SELECT campo1, campo2, campo3 FROM tabella WHERE (condizione)
    Volendo puoi selezionare tutti i campi mettendo un semplice *

    codice:
    SELECT * FROM tabella WHERE (condizione)
    Vedi sintassi SELECT

    Altra cosa, abituati a mettere la notazione dell'errore per OGNI query che esegui, così se c'è un errore te lo segnala dicendoti precisamente di che errore si tratta:

    codice:
    $query = mysql_db_query($db,$sql)or die("Errore: ".mysql_error());
    Abituati inoltre ad usare mysql_query al posto di mysql_db_query e ad aprire preventivamente una connessione. mysql_db_query è stata fortemente sconsigliata a partire dalla versione 4.0.6 di PHP. Qui trovi le ragioni.

    Nel tuo testo inoltre non si capisce come costruisci la query, l'unica cosa che si capisce è che la costruisci a pezzi; intanto che fai tutte queste prove, prova a far stampare la query subito prima di eseguirla (piazzaci quindi un echo $sql;) e vedi cosa contiene, se ci sono errori di sintassi è molto più semplice rintracciarli, perché vedi la query sott'occhi e non devi immaginarla.

    Sono piccoli consigli che mi permetto di darti perché ci sono passato anche io
    Questa è la mia SELECT
    ........................
    $sql="SELECT * FROM $tabella WHERE ";
    if($criterio=="esatta")
    {
    $sql.="$campo LIKE '%$stringa%' ORDER BY $ordinaper $ord";


    Le tue parole, non so perchè, mi hanno acceso il cervellino e ho semplicemente fatto

    $sql.="$campo LIKE '%$stringa%' OR $campo2 LIKE '%$stringa%' ORDER BY $ordinaper $ord";

    e tutto va.


    Non ho parole per la tua simpatia e disponibilità

    grazie mille!!!!
    Perchè uso Maxthon? | Mi piace questa chat

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.