Script php per link 'Aggiungi agli amici'?

hackersatifal

Utente Attivo
9 Ago 2012
238
0
0
Salve a tutti,
ho sviluppato un codice che mi serve per fare aggiungere a un utente una persona come amico, ma il problema è che ogni volta che ricarico la pagina dove si trova lo script, pur non spuntando il link, mi aggiunge il dato alla tabella del database senza toccare alcuna parte della pagina, ma solo aggiornando. Potreste aiutarmi a capire e risolvere l'errore?
Ecco il codice:
Io devo sviluppare il codice in modo che si apra una finestra per aggiungere un dato in una tabella di mysql, quindi creo un link ad una pagina che ha come variabile settata quella che viene verificata e che serve per chiedere la conferma dell'azione, in modo che venga aggiunto il dato. Ho quindi modificato il codice in questo modo, ma mi aggiunge comunque il dato in tabella anche se viene aggiornata la pagina in cui si trova, perché?

Ecco il codice:
PHP:
<?php   
session_start();   
$user = (!empty($_GET['id'])) ? $_GET['id'] : 'Niente';
include('connessione.php');   
if($_SESSION['utente'] == ""){   
echo("Non sei autorizzato ad entrare!");   
exit();   
}   
?>   
<html xmlns="http://www.w3.org/1999/xhtml">   
<head>   
</head>   
<body>
<?php 
require_once "connessione.php";
if(isset($_GET['user'])){
    $query3=mysql_query("INSERT INTO amici_temp (username_proprietario, username_amico) VALUES ('".$_SESSION['utente']."', '".$_GET['id']."')");
var_dump($query3);
$query2 = "SELECT * FROM amici, amici_temp WHERE username_proprietario='".$_SESSION['utente']."'";
$result2 = mysql_query($query2) or die(mysql_error()); 
if(mysql_num_rows($result2)==0){ 
echo "<a href=\"?user=".$_GET['id']."\" onclick=\"return(confirm('Sei sicuro di voler inoltrare la richiesta? Clicca su Ok se s&igrave, mentre su Annulla se no!'))\">Aggiungi agli amici!</a>"; 
} 
}else{
    echo '';
}
$ora_attuale = time();   
$query = "SELECT * FROM bacheca WHERE Nome='$user'";   
var_dump($query);
$result = mysql_query($query) or die(mysql_error());   
while($riga = mysql_fetch_array($result)){   
$mss = stripslashes($riga['Messaggio']);   
$ora = date("d/n/Y g:i:s A", $riga['Data']);
print "<div class='postbacheca'><p class='bacheca'>$ora <label class='barradistanziatrice'> |</label> <label class='messaggio'> $mss </label></p></div>";       
}   
mysql_close($db);   
?>
</body>
</html>

Grazie a tutti in anticipo per il vostro aiuto,
hackersatifal.
 

Ciao, come dato cosa salvi un id.
Poi volevo chiederti di farmi capire meglio cosa vuoi fare, nel senso quando aggiorni la pagina cosa succede.
Ciao
 

Ciao, come dato cosa salvi un id.
Poi volevo chiederti di farmi capire meglio cosa vuoi fare, nel senso quando aggiorni la pagina cosa succede.
Ciao

Questo script si trova in una pagina che ha l'URL strutturato in questo modo: pagina.php?id=Nome utente della sessione.
Quindi estraggo questo e lo inserisco nell'url della pagina che si viene a creare cliccando sul link: pagina2.php?user=nome utente estratto tramite l'array.
Quello che dovrebbe succedere è che, cliccando sul link 'Aggiungi agli amici' si dovrebbe inserire dei dati
PHP:
$query3=mysql_query("INSERT INTO amici_temp (username_proprietario, username_amico) VALUES ('".$_SESSION['utente']."', '".$_GET['id']."')");
all'interno di una tabella mysql, è solo che, pur non spuntando il link perché il dato è già presente nella tabella,
aggiornando la pagina, si reinserisce il dato nella tabella del database (non dovrebbe succedere). Mi aiuteresti a capire come mai?
Grazie in anticipo per il tuo aiuto,
hackersatifal :D
 

Ciao, l'unica cosa che mi viene sibito da consigliarti e quella di fare un controllo sulla tabella,
se quel dato già è iinserito non fare niente.

 
Il controllo di cui parla minatore è d'obbligo. Se gli utenti sono già amici non Devi eseguire l'insert.
Ma ci sono anche altri controlli da fare, te ne suggerisco due:

pagina.php?id=Ciaociao
1. Se tu lanciassi questa pagina con quell'id, si va a creare una tuo la nella tabella con 'Username_amico'=Ciaociao.
Quindi dovresti mettere un controllo, se l'utente con l'id passato con GET esiste nella tabella utenti allora puoi eseguire la insert, altrimenti no!

2. (derivante dalla 1) Un utente se inserisce il suo id non deve comunque eseguire la insert in quanto non può essere amico di se stesso. Quindi basta vedere che non sia il suo stesso id.

Se me ne vengono altri attinenti al caso ti dirò.

Edit: attenzione a quando fai il controllo suggerito da minatore. Se un utente è amico di un altro il suo id si può trovare sia in username_proprietario sia in username_amico.
 
Ultima modifica:
Ho sistemato il tuo script in questo modo:
PHP:
<?php
session_start();

require_once 'connessione.php';

if (!isset($_SESSION['utente'])) {
    header('HTTP/1.0 403 Forbidden');
    die('Non sei autorizzato a entrare.');
}

$user = !empty($_GET['id']) ? (int)$_GET['id'] : 0;
?>
<!DOCTYPE html>
<html lang="it">
    <head>
        <title>Aggiungi amico</title>
        <meta charset="utf-8" />
    </head>

    <body>
        <?php
        if ($user !== 0) {
            $username = addslashes($_SESSION['username']);
            $sql = "INSERT INTO amici_temp (username_proprietario, username_amico) VALUES ('%s', %d)";
            $sql = sprintf($sql, $username, $user);
            $query = mysql_query($sql) or die(mysql_error());

            $sql2 = "SELECT * FROM amici, amici_temp WHERE username_proprietario = '%s'";
            $sql2 = sprintf($sql, $username);
            $query2 = mysql_query($sql2) or die(mysql_error());

            if (mysql_num_rows($query2) == 0) {
                echo <<<EOF
        <a href="?user={$user}" onclick="retun confirm('Sei sicuro di voler inoltrare la richiesta?')">Aggiungi agli amici!</a>
EOF;
            }
        }

        $sql3 = 'SELECT * FROM bacheca WHERE nome = %d';
        $sql3 = sprintf($sql3, $user);
        $query3 = mysql_query($sql3) or die(mysql_error());

        while ($riga = mysql_fetch_assoc($query3)) {
            $msg = stripslashes($riga['Messaggio']);
            $ora = date('d/n/Y g:i:s A', $riga['Data']);

            echo <<<EOF
        <div class="postbacheca">
            <p class="bacheca">
                {$ora}
                <label class="barradistanziatrice"> |</label>
                <label class="messaggio"> {$msg} </label>
            </p>
        </div>
EOF;
        }
        ?>
    </body>
</html>
Ma perché hai inserito la logica per l'aggiunta di un utente agli amici nella pagina della bacheca? Operazioni differenti, pagine differenti.

P.S. Quello script era tremendo, e continua a esserlo anche dopo le mie correzioni, perché ci sono molti errori sia logici che tecnici, e il database è strutturato male. Leggi qua e cerca di applicare TUTTI i punti.
 
Ultima modifica:
Ho sistemato il tuo script in questo modo:
PHP:
<?php
session_start();

require_once 'connessione.php';

if (!isset($_SESSION['utente'])) {
    header('HTTP/1.0 403 Forbidden');
    die('Non sei autorizzato a entrare.');
}

$user = !empty($_GET['id']) ? (int)$_GET['id'] : 0;
?>
<!DOCTYPE html>
<html lang="it">
    <head>
        <title>Aggiungi amico</title>
        <meta charset="utf-8" />
    </head>

    <body>
        <?php
        if ($user !== 0) {
            $username = addslashes($_SESSION['username']);
            $sql = "INSERT INTO amici_temp (username_proprietario, username_amico) VALUES ('%s', %d)";
            $sql = sprintf($sql, $username, $user);
            $query = mysql_query($sql) or die(mysql_error());

            $sql2 = "SELECT * FROM amici, amici_temp WHERE username_proprietario = '%s'";
            $sql2 = sprintf($sql, $username);
            $query2 = mysql_query($sql2) or die(mysql_error());

            if (mysql_num_rows($query2) == 0) {
                echo <<<EOF
        <a href="?user={$user}" onclick="retun confirm('Sei sicuro di voler inoltrare la richiesta?')">Aggiungi agli amici!</a>
EOF;
            }
        }

        $sql3 = 'SELECT * FROM bacheca WHERE nome = %d';
        $sql3 = sprintf($sql3, $user);
        $query3 = mysql_query($sql3) or die(mysql_error());

        while ($riga = mysql_fetch_assoc($query3)) {
            $msg = stripslashes($riga['Messaggio']);
            $ora = date('d/n/Y g:i:s A', $riga['Data']);

            echo <<<EOF
        <div class="postbacheca">
            <p class="bacheca">
                {$ora}
                <label class="barradistanziatrice"> |</label>
                <label class="messaggio"> {$msg} </label>
            </p>
        </div>
EOF;
        ?>
    </body>
</html>
Ma perché hai inserito la logica per l'aggiunta di un utente agli amici nella pagina della bacheca? Operazioni differenti, pagine differenti.

P.S. Quello script era tremendo, e continua a esserlo anche dopo le mie correzioni, perché ci sono molti errori sia logici che tecnici, e il database è strutturato male. Leggi qua e cerca di applicare TUTTI i punti.

Ho provato lo script come lo hai modificato e mi stampa un errore di sintassi:'Parse error: syntax error, unexpected T_SL in /membri/knoweveryone/bacheca_visualizza3.php on line 33'.
Grazie ancora in anticipo per il tuo aiuto,
hackersatifal;)
 
Ma il file contiene solo il codice nel mio post? Non è possibile che non funzioni...
Sì, il file continente solo questo script. Non capisco come possa essere possibile che a te funzioni e a me no, ma mi dà sempre lo stesso errore di sintassi:'Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /membri/knoweveryone/bacheca_visualizza3.php on line 4'. Posteresti aiutarmi a risolvere la questione?
Grazie in anticipo per il tuo aiuto,
Hackersatifal.:)
 
Sì, il file continente solo questo script. Non capisco come possa essere possibile che a te funzioni e a me no, ma mi dà sempre lo stesso errore di sintassi:'Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /membri/knoweveryone/bacheca_visualizza3.php on line 4'. Posteresti aiutarmi a risolvere la questione?
Grazie in anticipo per il tuo aiuto,
Hackersatifal.:)
Qualcuno può aiutarmi?
 
ciao
non uppare di seguito (dalle 08 alle 09), appena può alex ti risponderà

edit
dimenticavo, posta il codice di 'connessione.php', l'errore potrebbe nascere da li
 
Ultima modifica:
ciao
non uppare di seguito (dalle 08 alle 09), appena può alex ti risponderà

edit
dimenticavo, posta il codice di 'connessione.php', l'errore potrebbe nascere da li
Sì, scusa per gli up. Comunque ecco il file connessione.php

PHP:
<?php
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_nome = "miodatabase";
$db = mysql_connect($db_host, $db_user, $db_password);
if($db == FALSE)
die("Errore nella connessione. Verificare i parametri nel file config.inc.php!");
mysql_select_db($db_nome, $db) or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
?>
Grazie in anticipo per il tuo aiuto borgo.
 
Ultima modifica:
ciao
continuo a non vedere errori.
tentativi: prova a scrivere connessione.php così
PHP:
<?php
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_nome = "miodatabase";
$db = mysql_connect($db_host, $db_user, $db_password) or die("Errore nella connessione. Verificare i parametri nel file config.inc.php!");
mysql_select_db($db_nome, $db) or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
?>
e al posto di
header('HTTP/1.0 403 Forbidden');
prova a mettere
header("Status: 403 Forbidden");

poi vediamo se alex passa di qui e vedere se lui riesce a capire

p.s.
fai un tentativo (modifica) alla volta e prova, torni indietro, rispristini il vecchio e fai l'altra per cercare dov'è l'inghippo
 
ciao
continuo a non vedere errori.
tentativi: prova a scrivere connessione.php così
PHP:
<?php
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_nome = "miodatabase";
$db = mysql_connect($db_host, $db_user, $db_password) or die("Errore nella connessione. Verificare i parametri nel file config.inc.php!");
mysql_select_db($db_nome, $db) or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
?>
e al posto di
header('HTTP/1.0 403 Forbidden');
prova a mettere
header("Status: 403 Forbidden");

poi vediamo se alex passa di qui e vedere se lui riesce a capire

p.s.
fai un tentativo (modifica) alla volta e prova, torni indietro, rispristini il vecchio e fai l'altra per cercare dov'è l'inghippo

Niente da fare: sempre lo stesso errore :confused:
 

Discussioni simili