PHP / MySQL kullanarak bir MySQL veritabanı sorun birden fazla etiket saklanması?

2 Cevap php

Öncelikle bana kullanıcıları, shoe, shirt, hat, glasses, örneğin bir virgül ile ayrılır birden fazla etiket girelim ve veritabanındaki her etiketi saklamak gereken bu komut olduğunu anlatalım.

Ama nedense etiketleri doğru veritabanında depolanan değildir. Bir kullanıcı, iki veya daha fazla etiket girdiğinde Örneğin bunun yerine orada kendi satırlar onları görüntüleyen artı etiketleri bile sadece boş bir satır girildiğinde veritabanına girilen edilmez aynı satırda tüm saklanır?

Birisi bana bu sorunu gidermek için sipariş benim komut değiştirmek gerekir ne bir kaç örnek verebilir misiniz?

Aşağıda mysql tablo olduğunu.

CREATE TABLE questions_tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tag_id INT UNSIGNED NOT NULL,
users_questions_id INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tag VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
UNIQUE('tag')
);

İşte yazısıdır.

<?php 
require_once ('./mysqli_connect.php');

if (isset($_POST['submitted'])) {
		$mysqli = new mysqli("localhost", "root", "", "sitename");
		$dbc = mysqli_query($mysqli,"SELECT questions_tags.*, tags.* FROM questions_tags, tags");
	if (!$dbc) {
		print mysqli_error($mysqli);
	}
$page = '3';

$tag = mysqli_real_escape_string($mysqli, $_POST['tag']);

$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT questions_tags.*, tags.* FROM questions_tags INNER JOIN tags ON tags.id = questions_tags.tag_id WHERE questions_tags.users_questions_id=3");
if(mysqli_num_rows($dbc) >= 0){

if (isset($_POST['tag'])){
	$tags = explode(",", $_POST['tag']);

	for ($x = 0; $x < count($tags); $x++){

$mysqli = new mysqli("localhost", "root", "", "sitename");
$clean_url = mysqli_real_escape_string($mysqli, $page);

$query1 = "INSERT INTO tags (tag) VALUES ('$tags[x]')";

if (!mysqli_query($mysqli, $query1)) {
	print mysqli_error($mysqli);
	return;
}

$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT id FROM tags WHERE tag='$tags[x]'");
	}
}

if (!$dbc) {
	print mysqli_error($mysqli);
}  else {
	while($row = mysqli_fetch_array($dbc)){
		$id = $row["id"];
	}
}

$query2 = "INSERT INTO questions_tags (tag_id, users_questions_id) VALUES ('$id', '$page')";

if (!mysqli_query($mysqli, $query2)) {
	print mysqli_error($mysqli);
	return;
}

echo "$tag has been entered";

	if (!$dbc) {
			print mysqli_error($mysqli);
	}
}
mysqli_close($mysqli);
}
?>

2 Cevap

Bu değiştirin:

$query1 = "INSERT INTO tags (tag) VALUES ('$tags[x]')";

Bu ile:

$query1 = "INSERT INTO tags (tag) VALUES ('" . $tags[$x] . "')";

ve BTW, sql injections ve XSS karşı güvenli gerekiyor

update: Ayrıca bu değiştirmeniz gerekir:

$dbc = mysqli_query($mysqli,"SELECT id FROM tags WHERE tag='$tags[x]'");

bununla

$dbc = mysqli_query($mysqli,"SELECT id FROM tags WHERE tag='" . $tags[$x] . "'");

x bir değişkendir ... kullanmanız gerekir $x

Update2: questions_tags kodu içinde olmalıdır için döngü

Burada sabit kod

<?php
require_once ('./mysqli_connect.php');

if (isset($_POST['submitted'])) {
    $mysqli = new mysqli("localhost", "root", "", "sitename");
    $dbc = mysqli_query($mysqli,"SELECT questions_tags.*, tags.* FROM questions_tags, tags");
    if (!$dbc) {
    	print mysqli_error($mysqli);
    }
    $page = '3';

    $tag = mysqli_real_escape_string($mysqli, $_POST['tag']);

    $mysqli = new mysqli("localhost", "root", "", "sitename");
    $dbc = mysqli_query($mysqli,"SELECT questions_tags.*, tags.* FROM questions_tags INNER JOIN tags ON tags.id = questions_tags.tag_id WHERE questions_tags.users_questions_id=3");
    if(mysqli_num_rows($dbc) >= 0){

    	if (isset($_POST['tag'])) {
    		$tags = explode(",", $_POST['tag']);

    		for ($x = 0; $x < count($tags); $x++){

    			$mysqli = new mysqli("localhost", "root", "", "sitename");
    			$clean_url = mysqli_real_escape_string($mysqli, $page);

    			$query1 = "INSERT INTO tags (tag) VALUES ('" . $tags[$x] . "')";

    			if (!mysqli_query($mysqli, $query1)) {
    				print mysqli_error($mysqli);
    				return;
    			}

    			$mysqli = new mysqli("localhost", "root", "", "sitename");
    			$dbc = mysqli_query($mysqli,"SELECT id FROM tags WHERE tag='" . $tags[$x] . "'");


    			if (!$dbc) {
    				print mysqli_error($mysqli);
    			}  else {
    				while($row = mysqli_fetch_array($dbc)){
    					$id = $row["id"];
    				}
    			}

    			$query2 = "INSERT INTO questions_tags (tag_id, users_questions_id) VALUES ('$id', '$page')";

    			if (!mysqli_query($mysqli, $query2)) {
    				print mysqli_error($mysqli);
    				return;
    			}

    			echo "$tag has been entered";
    		}
    	}

    	// is this needed?
    	// if (!$dbc) {
    	//	 print mysqli_error($mysqli);
    	// }
    }
    mysqli_close($mysqli);
}
?>

Girilen etiketleri listesini ayırmak için explode() bir göz atın. Döngüsü için / bir foreach kullanarak liste üzerinde yineleme ve ayrı ayrı her bir etiketi yerleştirin.

Best wishes,
Fabian