2016-03-27 28 views
0

Hey herkes gördüğünüz gibi tüm kodu koydum çünkü Veritabanına bilgi bağlamaya ve yazmaya çalışıyorum çok basit ve basit ama ne olduğunu anlamıyorum yanlış yapıyorum ???? Kullanıcının bir formu doldurarak ve veritabanına yerleştirmek istediğimde bilgi verdikten sonra veritabanına bilgi vermesini sağlamaya çalışıyorum. Veritabanının kendisi inşa edilir ve tablolar ve satırlar yapılır.Bağlantı kuramıyor ve mysql veritabanına yazamıyorum

<!DOCTYPE HTML> 
<html> 
<head> 
<style> 
.error {color: #FF0000;} 
</style> 
</head> 
<body> 

<?php 
// define variables and set to empty values 
$nameErr = $emailErr = $genderErr = $phoneErr = $cityErr = $countyErr = $adressErr = ""; 
$name = $email = $gender = $phone = $instagram = $facebook = $city = $country = $adress = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name1"])) { 
    $nameErr = "Name is required"; 
    } else { 
    $name = test_input($_POST["name1"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
     $nameErr = "Only letters and white space allowed"; 
    } 
    } 

    if (empty($_POST["email"])) { 
    $emailErr = "Email is required"; 
    } else { 
    $email = test_input($_POST["email"]); 
    // check if e-mail address is well-formed 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $emailErr = "Invalid email format"; 
    } 
    } 

    if (empty($_POST["phone"])) { 
    $phone = "Phone number is required"; 
    } else { 
     $phone = test_input($_POST["phone"]); 
    } 

    if (empty($_POST["gender"])) { 
    $genderErr = "Gender is required"; 
    } else { 
    $gender = test_input($_POST["gender"]); 
    } 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
?> 
<h2>Amsterdam event attending</h2> 
<p><span class="error">* required field.</span></p> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>, <"> 
    Name: 
    <input type="text" name="name1" value="<?php echo $name;?>"> 
    <span class="error">* <?php echo $nameErr;?></span> 
    <br><br> 
    Adress: 
    <input type="text" name="adress" value="<?php echo $adress;?>"> 
    <span class="error">*</span> 
    <br><br> 
    City: 
    <input type="text" name="city" value="<?php echo $city;?>"> 
    <span class="error">*</span> 
    <br><br> 
    E-mail: 
    <input type="text" name="email" value="<?php echo $email;?>"> 
    <span class="error">* <?php echo $emailErr;?></span> 
    <br><br> 
    Instagram: 
    <input type="text" name="insta" value=""> 
    <br><br> 
    Facebook: 
    <input type="text" name="face" value=""> 
    <br><br> 
    Phone number: 
    <input type="text" name="phone" value="<?php echo $phone;?>"> 
    <span class="error">* <?php echo $phoneErr;?></span> 
    <br><br> 
    Gender: 
    <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female 
    <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male 
    <span class="error">* <?php echo $genderErr;?></span> 
    <br><br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

<?php 
if(isset($_POST['submit'])){ 
} 
$servername = 'localhost'; 
$username = 'root'; 
$password = '1234'; 
$database = 'amsterdam'; 

$conn = mysqli_connect($servername, $username, $password, $database); 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_errno());   
    } 
    $sql = "INSERT INTO inschrijvingen (name, adress, city, email, insta, face, phone, gender); 
    VALUES ($_POST[name1], $_POST[adress], $_POST[city], $_POST[email], $_POST[insta], $_POST[face], $_POST[phone], $_POST[gender])"; 
    mysql_close($conn); 
    ?> 

</body> 
</html> 
+1

ne der Error_log kapsamaz:

Bu durumda senin hazırlanan deyimi gibi görünecektir? – Stuart

cevap

1

VALUES'lerinizi tek tırnak içine almalısınız. Ancak, $_POST dizin adlarındaki tek tırnaklar kodunuzda hatalar oluşturacağından, sorgunuzda doğrudan $_POST değişkenleri yazdığınızda mümkün değildir. Yaptığınız ana hata, $_POST değişkeninizi doğrudan SQL enjeksiyon gibi ciddi güvenlik sorunları yaratacak şekilde sorgunuza aktarmaktır. mysqli_real_escape_string() işleviyle yapmalı ve $ _POST dizisinin her dizini için değişkenler oluşturmalısınız.

Bu ben bunu görecektir:

$conn = mysqli_connect($servername, $username, $password, $database); 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_errno());   
    } 
$name=mysqli_real_escape_string($_POST['name1']); 
$adress=mysqli_real_escape_string($_POST['adress']); 
$city=mysqli_real_escape_string($_POST['city']); 
$email=mysqli_real_escape_string($_POST['email']); 
$insta=mysqli_real_escape_string($_POST['insta']); 
$face=mysqli_real_escape_string($_POST['face']); 
$phone=mysqli_real_escape_string($_POST['phone']); 
$gender=mysqli_real_escape_string($_POST['gender']); 

    $sql = "INSERT INTO inschrijvingen (name, adress, city, email, insta, face, phone, gender); 
     VALUES ('$name', '$adress', '$city', '$email', '$insta', '$face', '$phone', '$gender')"; 

$result=mysqli_query($conn,$sql); 

Daha önce kodu ve sonrasında kodu gözden vermedi. Sadece sorguyu ve değerler parametresini düzelttim. Ayrıca kodunuza mysqli_query() işlevini ekledim. Bu işlev, kodunuzda kaçırdığınız sorguyu yürütmekten sorumlu olan ana işlevdir. Bu senin problemini çözerse bana haber ver.

+0

* benissimo! * ;-) –

+0

@ Fred-ii-; 0) Teşekkürler – DevMan

+0

prego (si, parlo la vostra lingua un po) ;-) –

0

Sorunun sayfada şey yazmaya SONRA bir I/O akışı (SQL sunucusu ile akışı) açmaya çalıştığınız olduğunu düşünüyorum. Stdout'u (oluşturduğunuz sayfaya akış) açamazsınız ve daha sonra php'de başka bir akışı açmaya çalışamazsınız. İlk karakterleri sayfaya yazmadan önce diğer tüm akışların oluşturulması gerekir. Bunu deneyin:

<?php 
// define variables and set to empty values 
$nameErr = $emailErr = $genderErr = $phoneErr = $cityErr = $countyErr = $adressErr = ""; 
$name = $email = $gender = $phone = $instagram = $facebook = $city = $country = $adress = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name1"])) { 
    $nameErr = "Name is required"; 
    } else { 
    $name = test_input($_POST["name1"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
     $nameErr = "Only letters and white space allowed"; 
    } 
    } 

    if (empty($_POST["email"])) { 
    $emailErr = "Email is required"; 
    } else { 
    $email = test_input($_POST["email"]); 
    // check if e-mail address is well-formed 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $emailErr = "Invalid email format"; 
    } 
    } 

    if (empty($_POST["phone"])) { 
    $phone = "Phone number is required"; 
    } else { 
     $phone = test_input($_POST["phone"]); 
    } 

    if (empty($_POST["gender"])) { 
    $genderErr = "Gender is required"; 
    } else { 
    $gender = test_input($_POST["gender"]); 
    } 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
?> 
    <!DOCTYPE HTML> 
<html> 
<head> 
<style> 
.error {color: #FF0000;} 
</style> 
</head> 
<body> 
<h2>Amsterdam event attending</h2> 
<p><span class="error">* required field.</span></p> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>, <"> 
    Name: 
    <input type="text" name="name1" value="<?php echo $name;?>"> 
    <span class="error">* <?php echo $nameErr;?></span> 
    <br><br> 
    Adress: 
    <input type="text" name="adress" value="<?php echo $adress;?>"> 
    <span class="error">*</span> 
    <br><br> 
    City: 
    <input type="text" name="city" value="<?php echo $city;?>"> 
    <span class="error">*</span> 
    <br><br> 
    E-mail: 
    <input type="text" name="email" value="<?php echo $email;?>"> 
    <span class="error">* <?php echo $emailErr;?></span> 
    <br><br> 
    Instagram: 
    <input type="text" name="insta" value=""> 
    <br><br> 
    Facebook: 
    <input type="text" name="face" value=""> 
    <br><br> 
    Phone number: 
    <input type="text" name="phone" value="<?php echo $phone;?>"> 
    <span class="error">* <?php echo $phoneErr;?></span> 
    <br><br> 
    Gender: 
    <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female 
    <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male 
    <span class="error">* <?php echo $genderErr;?></span> 
    <br><br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

<?php 
if(isset($_POST['submit'])){ 
} 
$servername = 'localhost'; 
$username = 'root'; 
$password = '1234'; 
$database = 'amsterdam'; 

$conn = mysqli_connect($servername, $username, $password, $database); 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_errno());   
    } 
    $sql = "INSERT INTO inschrijvingen (name, adress, city, email, insta, face, phone, gender); 
    VALUES ($_POST[name1], $_POST[adress], $_POST[city], $_POST[email], $_POST[insta], $_POST[face], $_POST[phone], $_POST[gender])"; 
    mysql_close($conn); 
    ?> 

</body> 
</html> 
+0

Teşekkür ederim çok teşekkür ederim çocuklar ne dediler ne eksiklerim ben senin çözümlerini uygulardım ve çok iyi çalışıyor! –

0

birkaç nokta fark ettim:

Sen sql tanımı içinden yarım noktalı virgül vardır

if(isset($_POST['submit'])){ 
} 

$ kullanmıyorsanız bir if deyimi var, muhtemelen olmalıdır:

$sql = "INSERT INTO inschrijvingen (name, adress, city, email, insta, face, phone, gender) 
VALUES ($_POST[name1], $_POST[adress], $_POST[city], $_POST[email], $_POST[insta], $_POST[face], $_POST[phone], $_POST[gender])"; 

$ sql'yi tanımladıktan sonra, veritabanını hiçbir zaman

ile sorgulamadınız

Son olarak, mysql ve mysqli'yi karıştırdınız. Sizin yakın deyim vardır diğer bazı endişeler de vardır ama diğer bazı yanıtlar zaten bu ele sanki görünüyor

mysqli_close($conn); 

olmalıdır.

0

Kodunuzu if(isset($_POST['submit'])) küme parantezinize koyun ve SQL'inizi else parantez içine alın. Ayrıca, mysqli_close() yerine mysql_close() kullanıyorsunuz.

if(isset($_POST['submit'])){ 

$servername = 'localhost'; 
$username = 'root'; 
$password = '1234'; 
$database = 'amsterdam'; 

$conn = mysqli_connect($servername, $username, $password, $database); 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_errno());   
    }else{ 

    $name=$_POST['name1']; 
    $adress=$_POST['adress']; 
    $city=$_POST['city']; 
    $email=$_POST['email']; 
    $insta=$_POST['insta']; 
    $face=$_POST['face']; 
    $phone=$_POST['phone']; 
    $gender=$_POST['gender']; 

    $sql = "INSERT INTO inschrijvingen (name, adress, city, email, insta, face, phone, gender) 
    VALUES ('$name', '$adress','$city', '$insta, '$face', '$phone', '$gender')"; 
    mysqli_close($conn); 
    } 
} 

KULLANIM TABLOLARI HAZIRLAYAN.

Kodunuz kolayca enjekte edilebilir. Hazırlanan ifadeleri kullanmanızı tavsiye ederim.

$sql = "INSERT INTO inschrijvingen (name, adress, city, email, insta, face, phone, gender) 
VALUES (?,?,?,?,?,?)"; 

$stmt = $conn->prepare($sql); 
$stmt->bind_param("sssssss", $name, $adress, $city, $email, $insta, $face, $phone, $gender); 
$stmt->close(); 
$conn->close(); 
İlgili konular