2017-10-16 8 views
0

Je trouve que le script suivant se bloque pour une raison quelconque. Il chargera et PHP ne verra aucune erreur, mais il ne traitera pas les données (notant que nous sommes dans un contexte où j'ai une base de données de connexion séparée ouverte.)Pourquoi les éléments suivants ne semblent pas ouvrir une connexion SQL?

Dans process.php nous avons ce qui suit:

<? PHP 
//Process the POST data in prepration to write to SQL database. 
$_POST['chat_input'] = $input; 
$time = date("Y-m-d H:i:s");  
$ip = $_SERVER['REMOTE_ADDR']; 
$name = $_SESSION['username'];  
$servername = "localhost"; 
$username = "id3263427_chat_user"; 
$password = "Itudmenif1!Itudmenif1!"; 
$dbname = "id3263427_chat_user"; 
$id = "NULL"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 

if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 

$sql = 'INSERT INTO `chat` (`id`, `username`, `ip`, `timestamp`, 
     `message`) VALUES ('$id','$name', '$ip', '$time', '$input')'; 

if(mysqli_query($link, $sql)){ 
    mysqli_close($conn); 
    header('Location: ../protected_page.php'); 
} else { 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

?> 

le formulaire HTML transmis au script est ci-dessus comme suit:

<form action="/process.php" method="post" id="chat"> 
    <b> Send A Message (500 Character Max):</b><br> 
    <textarea name="chat_input" form="chat" size="500"></textarea> 
    <input type="submit" value=submit> 
</form> 

Je ne sais pas ce qui se passe avec ça.

+0

Etes-vous sûr de vouloir faire '$ _POST [' chat_input '] = $ input; 'et non ce' $ input = $ _POST [' chat_input ']; '? – pmahomme

+0

J'ai corrigé ce point, et cela semblait n'avoir aucune importance avec ce qui se passait. –

+0

Etes-vous sûr qu'il n'y a pas d'erreurs signalées vérifiez votre chaîne sql elle doit être entourée de guillemets normalement si vous faites un simple devis pour le nom de colonne – douxsey

Répondre

2

Vous avez l'erreur de syntaxe car vous fermez la chaîne $ sql avant $ id avec votre '.

Qu'est-ce que c'est à propos de votre variable $ id? Avec votre code actuel, vous allez insérer la chaîne "NULL". Si vous souhaitez définir la valeur sql null, vous devez utiliser $id = null; ou simplement ne pas insérer de valeur.

Si vous souhaitez que votre base de données définisse un ID, laissez-le vide.

$input = $_POST['chat_input']; 
$id = null; 

$conn = new mysqli($servername, $username, $password, $dbname); 

if($conn->connect_error){ 
    die("ERROR: Could not connect. " . $conn->connect_error); 
} 

Première solution

Si ce n'est pas un code de production, vous pouvez insérer les variables directement dans la déclaration, mais vous devez utiliser " au lieu de ' pour votre chaîne SQL, vous pouvez insérer des variables et ' sans fermer la chaîne.

$sql = "INSERT INTO chat (id, username, ip, timestamp, message) VALUES ('$id', '$name', '$ip', '$time', '$input')"; 
if($conn->query($sql) === true) { 
$conn->close(); 
header('Location: ../protected_page.php'); 
} else { 
echo "ERROR: Could not able to execute $sql. " .$conn->error; 
$conn->close(); 
} 

Deuxième solution

Une meilleure approche serait une déclaration préparée.

$stmt = $conn->prepare('INSERT INTO chat (username, ip, timestamp, message) VALUES (?, ?, ?, ?)'); 
$stmt->bind_param("ssss", $username, $ip, $time, $input); 

if($stmt->execute()) { 
$stmt->close(); 
$conn->close(); 
header('Location: ../protected_page.php'); 
} else { 
echo "ERROR: Could not able to execute $stmt. " . $conn->error; 
$stmt->close(); 
$conn->close(); 
} 

Le "s" dans bind_param() définit une chaîne à la position donnée, si vous souhaitez insérer un entier, utilisez "i" à la place.

par exemple. bindParam("sis", $string, $integer, $string);