Нужна помощь с учебником php mysql ОБНОВЛЕНИЕ заявления, пожалуйста - PullRequest
0 голосов
/ 19 марта 2012

Пытаюсь следовать учебнику, но я получаю ошибку базы данных в шестой строке исполняемого файла php (второй код ниже)

    <?php
    mysql_connect("localhost","root","") or die("Error: ".mysql_error()); //add your DB                          username and password
    mysql_select_db("beyondmotors");//add your dbname

    $sql = "select * from `TestTable` where ID = 1";
    $query = mysql_query($sql);

    while ($row = mysql_fetch_array($query)){

        $id = $row['ID'];
        $fname = $row['FName'];
        $lname = $row['LName'];
        $phone = $row['PHON'];

        //we will echo these into the proper fields

    }
    mysql_free_result($query);
    ?>

    <html>
    <head>
    <title>Edit User Info</title>
    </head>

    <body>

    <form action="updateinfo.php" method="post">

    userid:<br/>
    <input type="text" value="<?php echo $id;?>" name="id" disabled/>

    <br/>

    Last Name:<br/>
    <input type="text" value="<?php echo $fname;?>" name="fname"/>

    <br/>

    Last Name:<br/>
    <input type="text" value="<?php echo $lname;?>" name="lname"/>

    <br/>

    Phone Number:<br/>
    <input type="text" value="<?php echo $phone;?>" name="phon"/>

    </br>

    <input type="submit" value="submit changes"/>

    </form>
    </body>
    </html>

и вот исполняемый файл

    <?php
    mysql_connect("localhost","root","") or die("Error: ".mysql_error()); //add your DB                 username and password
    mysql_se lect_db("beyondmotors");//add your dbname

    //get the variables we transmitted from the form
    $id = $_POST[''];
    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $phon = $_POST['phon'];

    //replace TestTable with the name of your table
    $sql = "UPDATE `TestTable` SET `FName` = '$fname',`LName` = '$lname',
        `PHON` = '$phon' WHERE `TestTable`.`ID` = '$id' LIMIT 1";

    mysql_query($sql) or die ("Error: ".mysql_error());

    echo "Database updated. <a href='editinfo.php'>Return to edit info</a>";
    ?>

все хорошо, пока я не нажму "отправить изменения"; чем я получаю ошибку в строке 6. Я новичок в базе данных, поэтому, пожалуйста, будьте конкретны, если это возможно Спасибо! Также, если бы кто-нибудь мог указать мне на подобный, «рабочий» учебник, который помог бы ALOT!

пытается следовать этому уроку: http://teamtutorials.com/web-development-tutorials/editing-mysql-data-using-php

Я использую Wamp-сервер, поэтому вход в базу данных правильный. Я имею в виду, что он отображает данные, просто не редактирует их .. Я получаю ошибку:

Примечание: неопределенный индекс: идентификатор в C: \ wamp \ www \ test \ updateinfo.php в строке 6

Я получаю это, даже если я изменю сообщение на $ id = $ _POST ['ID'];

Хорошо, я изменил $ _POST ['']; $ _POST ['id']; , все еще была та же ошибка.

Чем я читал в Интернете, чтобы добавить @ вперед, так что теперь это выглядит так: @ $ _ POST ['id'];

Это тоже от всех ошибок. но не моя база данных не была обновлена. Все проходит без ошибок, но данные не были изменены ??

Также, когда я пытался удалить галочки, я получаю эту ошибку:

Ошибка разбора: синтаксическая ошибка, неожиданный T_STRING в C: \ wamp \ www \ test \ updateinfo.php в строке 12

Так что я оставил их такими, какими они были ...

Может быть, потому, что я использую локальный сервер? Это должно быть все просто, не уверен, что я делаю не так здесь ... Я имею в виду, что я литературно скопировал все из учебника.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Прежде всего, вы должны быть предупреждены, что ваш код полностью уязвим к sql инъекциям . Экранирование ваших данных POST перед вставкой в ​​базу данных является хорошим началом для защиты вашей базы данных.

Кроме того, изучение расширения mysql бесполезно для новых систем, поскольку оноустарела.Вы можете подумать о поиске интерфейса PDO или расширения mysqli .Существует множество учебных пособий для начинающих для обоих, и вы получите гораздо больше.

Теперь, что касается вашей ошибки

Убедитесь, что вы определяете, какой идентификатор вы хотите обновить в своей базе данных.Во втором блоке кода у вас есть:

//get the variables we transmitted from the form
$id = $_POST[''];

необходимо изменить на:

$id = $_POST['id'];

Вы сказали, что получаете сообщение об ошибке, даже если вы изменили сообщение на $id = $_POST['ID'], но есливы смотрите на свою форму, ввод идентификатора имеет name = 'id', а PHP чувствителен к регистру.

Теперь в вашем sql-запросе все эти обратные галочки не нужны.Кроме того, нет смысла указывать, какой идентификатор таблицы, потому что все это делается в ОДНОЙ таблице, TestTable.

//replace TestTable with the name of your table
$sql = "UPDATE TestTable SET FName = '$fname',LName = '$lname', 
        PHON = '$phon' WHERE ID = '$id' LIMIT 1";

РЕДАКТИРОВАТЬ: Хотя приведенный выше запрос синтаксически правильный, вам следует рассмотреть возможность использования mysqli или PDO по причинам, указанным выше.Ниже приведены примеры использования mysqli и PDO.

Mysqli

Mysqli Manual

/* connect to the database */
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

/* build prepared statement */
$stmt = $mysqli->prepare("UPDATE TestTable SET FName=?, LName=?, PHON=? WHERE ID=?)");

/* bind your parameters */
$stmt->bind_param('sssi', $fname, $lname, $phon, $id);

/* execute prepared statement */
$stmt->execute();

/* close connection */
$stmt->close();

PDO

PDO Manual

/* connect to the database */
$dbh = new PDO('mysql:host=localhost;dbname=database', $user, $pass);

/* build prepared statement */
$stmt = $dbh->prepare("UPDATE TestTable SET FName = :fname, LName = :lname, PHON = :phon WHERE ID = :id");

/* bind your parameters */
$stmt->bindParam(':fname', $fname);
$stmt->bindParam(':lname', $lname);
$stmt->bindParam(':phon', $phon);
$stmt->bindParam(':id', $id);

/* update one row */
$fname = 'John'; # or use your $_POST data
$lname = 'Doe';
$phon  = '123-456-7890';
$id    = 1;

/* execute prepared statement */
$stmt->execute();

/* use it again!1! */
$fname = 'Jane';
$lname = 'Doe';
$phon  = '123-456-7890';
$id    = 2;

/* execute prepared statement */
$stmt->execute();

/* close connection */
$dbh = null;
0 голосов
/ 19 марта 2012

Удалить галочки:

UPDATE TestTable SET FName = '$fname',LName = '$lname',PHON ='$phon' 
WHERE TestTable.ID = '$id' LIMIT 1";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...